Web部署

吴心役
2025-09-13

部署 Next.js 开发的 mimWeb 应用。

安装 Git

  1. sudo apt update:更新软件列表。
  2. sudo apt install git:安装 Git
  3. git -version:检查 Git 版本。
  4. git config --global user.name 'aioverg':配置 Git 用户名。
  5. git config --global user.email 'aioverg@outlook.com':配置 Git 邮箱。
  6. git config --list:查看 Git 配置信息。
  7. ssh-keygen -t rsa -C 'aioverg@outlook.com':生成 ssh 密钥。

拉取代码

从 github 拉取

  1. 将生成的密钥接入 github
  2. git clone ***:拉取仓库代码。

从本地推送

ubuntu 服务器创建新的仓库

  1. git init mimWeb:创建名为 mimWeb 的空仓库。
  2. git config receive.denyCurrentBranch ignore:设置允许远程代码推送(进入仓库目录运行)。
  3. git --work-tree="./" reset --hard:显示工作目录(./ 表示当前的 mim 目录),不然只有一个 .git 目录,没有其它文件代码(进入仓库目录运行)。

配置客户端免登录推拉代码

  1. touch ~/.ssh/authorized_keys:创建 authorized_keys 文件,用于记录客户端公钥。

  2. cat ./id_rsa_aioverg.pub >> ./authorized_keys:将客户端的 ssh 公钥 id_rsa_aioverg.pub 加入 authorized_keys 中。

    这里是从本地上传 id_rsa_aioverg.pub 文件到服务器,然后加入的 authorized_keys,也可以直接将公钥内容复制到 authorized_keys

客户端推送代码

  1. git remote add origin ubuntu@123.207.211.120:mimWeb:连接远程仓库。
  2. git push origin master:推送代码至远程仓库。

本地连接多个远程仓库

以将代码分布推送到 githububuntu 的仓库为例,操作如下:

  1. git remote add name_1 url_1name_1 是自定义的连接名称, url_1 是远程仓库的地址。

    git remote add name_2 url_2name_2 是自定义的连接名称,url_2 是远程仓库的地址。

  2. git remote -v:查看本地连接的远程仓库。

  3. git push name_1 master:向 name_1 连接的远程仓库推送 master 分支。

  4. git remote remove name_1:删除名为 name_1 连接的远程仓库。

项目打包

  1. sudo apt install nodejs:安装 Node。

    安装 16 版本:

    curl -sL https://deb.nodesource.com/setup_16.x |sudo -E bash -
    sudo apt install -y nodejs
    

    可以修改 setup_16.x 来指定版本,如 setup_18.x 是安装 18 版本。

  2. node --version:检查 Node 版本。

  3. sudo apt install npm:安装 npm。

  4. npm --version:检查 npm 版本。

    npm config get registry:查看 npm 源。

    npm config set registry https://registry.npm.taobao.org/:修改 npm 源(这里使用的是淘宝镜像)。

  5. npm i:安装项目。

  6. npm run build:打包项目。

  7. npm run start:启动服务。

    注:这里默认端口号 3000,使用腾讯云服务器时需要注意,要注意在防火墙中将端口号加入进去,不然无法访问,如图:

  8. 这时候浏览器输入 公网:端口号 就能够访问网站了。

配置 Nginx

  1. sudo apt install nginx:下载 nginx。

  2. sudo vim /etc/nginx/sites-available/default:修改 nginx 配置,内容如下

    server {
            listen 80 default_server;
            listen [::]:80 default_server;
    
            server_name mim.zone; # 域名
    
            location / {
                    proxy_pass http://localhost:3000; # 代理到网站服务地址
                    proxy_set_header Host $host; # 非静态网站配置
                    proxy_set_header X-Forwared-For $remote_addr; # 非静态网站配置
            }
    }
    
  3. 配置 ssl(https加密)

    申请并下载 ssl 证书,将证书文件上传服务器。

    修改 nginx 配置,在上一步的基础上增加内容:

    这里使用腾讯云的免费证书,有效期 90天,具体的部署教程也可以看腾讯云的文档

    server {
            listen 80 default_server;
            listen [::]:80 default_server;
    
            server_name mim.zone; # 域名
    
    	    listen 443 ssl default_server; # 监听端口
            listen [::]:443 ssl default_server;# 监听端口
            ssl_certificate /etc/nginx/mim.zone_bundle.crt; # 证书文件地址
            ssl_certificate_key /etc/nginx/mim.zone.key; # 证书文件地址
            ssl_session_timeout 5m;
            ssl_protocols TLSv1.2 TLSv1.3; #请按照以下协议配置
            #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
            ssl_prefer_server_ciphers on; # 开启
    
            location / {
                    proxy_pass http://localhost:3000; # 代理到网站服务地址
                    proxy_set_header Host $host; # 非静态网站配置
                    proxy_set_header X-Forwared-For $remote_addr; # 非静态网站配置
            }
    }
    

    nginx -t:验证配置文件是否正确。

    netstat -lntp:查看端口使用,看看 443 端口是否正确开启。

    curl https://mim.zone:查看是否能够连通。

  4. /usr/sbin/nginx -s reload:重启 nginx,可以使用域名访问了。

    重启 nginx 时可能会没有权限,这时可以切换到 root 用户,使用 root 去重启。

    这里使用的腾讯云服务器,默认提供的用户是 ubuntu,登录 root 需要做如下配置:

    • sudo passwd root:设置 root 用户的密码。

    • sudo vim /etc/ssh/sshd_config:修改登录配置,内容如下:

      #PermitRootLogin prohibit-password
      改为
      PermitRootLogin yes
      
    • sudo service ssh restart:重启配置。

    • su root:切换到 root。

    • su ubuntu:切换到 root。

pm2管理服务

  1. npm install -g pm2:安装 pm2 管理 node 服务。

    注:如果默认安装目录没有权限,建议重新设置安装目:

    • 在命令行的主目录中,为全局安装创建目录:

      mkdir ~/.npm-global
      
    • 配置 npm 使用新的安装目录:

      npm config set prefix '~/.npm-global'
      
    • 修改或创建 ~/.profile 文件,并添加以下内容:

      export PATH=~/.npm-global/bin:$PATH
      
    • 使用命令更新系统变量:

      source ~/.profile
      
  2. pm2 start npm --name mimWeb -- run start(进入到 mim 目录内运行):启动一个名为 mimWeb 的服务,启动命令是 npm run start

  3. 其他命令:

    • pm2 list:查看服务列表。
    • pm2 restart all:重启所有服务。
    • pm2 restart <name>:重启。
    • pm2 stop <name>:停止。
    • pm2 delete <name>:删除。

定时任务(非必要)

  1. 给脚本赋予执行权限,以 git.sh 为例

    chmod +x git.sh
    
  2. 增加定时任务

    打开定时任务编辑,命令 crontab -e 会打开定时任务文件, 在文件中写入命令保存即可增加一条定时任务。以 git.sh 为例:

    30 5 * * * /home/ubuntu/mim/git.sh  # 每天凌晨 5:30 执行 git.sh 脚本,其它也按此格式设置。
    

    crontab -l:查看定时任务列表。

  3. 定时任务日志

    修改 /etc/rsyslog.d/50-default.conf 文件,日志文件在 /var/log/cron.log

    sudo vim /etc/rsyslog.d/50-default.conf // 做如下内容修改
    
    cron.*				/var/log/cron.log   // 将这一行前面的注释取消
    

    sudo service cron restart:重启定时任务命令,不重启日志打开不会生效。