如何部署一个网站?

标签: 教程 发布于:2022-11-22 21:39:27 编辑于:2022-12-09 17:48:17 浏览量:25421

概述

我在 GitHub 上开源了众多 Web 项目,基本上每个都要写一遍部署的教程,因此感觉有必要专门写一个教程,把服务部署的流程详细说一遍。

以下教程基于 Ubuntu 20.04

环境准备

安装 Nginx

Nginx 用来做反向代理,这主要是为了 HTTPS。

sudo apt update
sudo apt install nginx

安装 Certbot

Certbot 用来自动申请和更新 SSL 证书,这也是为了 HTTPS。

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

安装 pm2(可选)

pm2 用来监控服务,如果服务挂掉了其将自动重启。如果服务器重启了,pm2 也能帮我们自动启动服务。

# 首先安装 nvm,nvm 用来安装 Node.js & npm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
# 如果服务器访问不了 GitHub,使用下面这个镜像链接:
curl -o- https://iamazing.cn/upload/699fb580-6a6c-11ed-a623-133396cf317f.sh | bash
# 之后使用 nvm 安装 Node.js & npm:
nvm install node
# 然后使用安装好的 npm 安装 pm2:
npm install pm2 -g
# 使用 pm2 自动检测环境,输出合适的命令,执行输出的命令后可以配置 pm2 自动启动
pm2 startup
# 然后执行上述命令输出的命令

如果在上面操作过程中,出现安装后命令找不到的情况,重开终端,或者执行 source ~/.bashrc 即可。

手动部署

这里拿 Message Pusher 作为例子。

# 从 GitHub Release 下载可执行文件:
wget https://github.com/songquanpeng/message-pusher/releases/download/v0.3.0-alpha/message-pusher
# 给执行权限:
chmod u+x ./message-pusher
# 使用 pm2 启动服务(-- 之后的参数会传递给被启动的程序):
pm2 start ./message-pusher --name pusher -- --port 3000
# (可选)保存服务,这样服务器重启后可以自动重启我们的服务
pm2 save
# 创建 Nginx 配置文件:
cd /etc/nginx/sites-enabled
sudo touch pusher
# 使用 vim 编辑配置文件:
sudo vim ./push

内容如下:

server{
    server_name <domain>;

    location / {
        client_max_body_size  64m;
        proxy_http_version 1.1;
        proxy_pass http://localhost:<port>;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header Accept-Encoding gzip;
    }
}

注意要将上面的 <domain><port> 替换为实际的域名和端口号。

对于使用了 WebSocket 的应用,我们可能还需要设置更长的超时时间:

proxy_read_timeout 300s;
proxy_send_timeout 300s; 

编辑好之后保存(:wq!),继续下面的流程:

# 使用 certbot 获取 SSL 证书:
sudo certbot --nginx
# 按照提示选择即可。
# 之后使用 vim 再次编辑配置文件。
sudo vim ./push
# 我们会发现配置文件此时已经加入了 SSL 相关内容。
# (可选)启用 HTTP2:
# 在配置文件内,把 
listen 443 ssl; # managed by Certbot 
# 改为:
listen 443 ssl http2; # managed by Certbot 
# 之后重启 Nginx:
sudo service nginx restart

至此,大功告成,你的网站应该已经上线了。

基于 Docker 进行部署

如果要部署的服务提供了 Docker 镜像,那部署与维护起来就非常简单了。

搭建服务

一般而言,使用 Docker 启动服务时,需要指定:

  1. 要映射的端口:-p <HOST_PORT>:<CONTAINER_PORT>
  2. 要映射的目录:-v <HOST_PATH>:<CONTAINER_PATH>
  3. 环境变量:-e KEY:VALUE

例如:

docker run -d --restart always --name message-pusher \
-p 3000:3000 -v /home/ubuntu/data/message-pusher:/data \
-v /etc/ssl/certs:/etc/ssl/certs:ro \
-e SESSION_SECRET=random_string \
justsong/message-pusher

除此之外,我们仍然需要 Nginx 来进行反代,以提供 HTTPS,此处不再赘述,详见上一节。

更新服务

下述命令会自动更新你所搭建的服务到最新版本:

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower -cR

未经允许,禁止转载,本文源站链接:https://iamazing.cn/