Skip to content

使用 SSH 来部署 Nest 服务

August 8, 2024 by ccforeverd

通过 Github Actions + SSH 部署 Nest 服务

Github Action

修改 build 命令

在打包后, 将以下文件复制到 dist 目录下:

  • package.json
  • tsconfig.json
  • nest-cli.json
  • ../../.env
apps/nest-service/package.json
{
  "scripts": {
    "build": "nest build", 
    "build": "nest build && cp package.json dist/package.json && cp tsconfig.json dist/tsconfig.json && cp nest-cli.json dist/nest-cli.json && cp ../../.env dist/.env.root", 
  }
}

dist 目录上传后, 再移出到指定位置

上传 dist 目录

在之前的 Nginx 静态服务Github Actions 后面, 添加如下步骤:

.github/workflows/deploy.yml
- name: Build Nest Service
  run: pnpm build:nest
 
- name: Deploy Nest to Staging server
  uses: easingthemes/ssh-deploy@main
  with:
    SSH_PRIVATE_KEY: ${{ secrets.TENCENT_CLOUD_SSH }}
    ARGS: '-rlgoDzvc -i'
    SOURCE: 'apps/nest-service/dist'
    TARGET: '/usr/share/nginx/html/nest-service'
    REMOTE_HOST: ${{ secrets.TENCENT_CLOUD_IP }}
    REMOTE_USER: ${{ secrets.TENCENT_CLOUD_USER }}
    SCRIPT_AFTER: |
      cd /usr/share/nginx/html/nest-service
      mv -f ./dist/package.json ./package.json
      mv -f ./dist/tsconfig.json ./tsconfig.json
      mv -f ./dist/nest-cli.json ./nest-cli.json
      mv -f ./dist/.env.root ../../.env
      npm install
      # pm2 restart nest-service # 后续添加 pm2 重启功能
      echo $RSYNC_STDOUT

然后发起一次提交, 等待 Github Actions 完成

服务器配置

登录到服务器, 进入 /usr/share/nginx/html/nest-service 目录

Terminal
ls
# dist  nest-cli.json  node_modules  package.json  package-lock.json  tsconfig.json

依次执行: (仅第一次启动)

  1. 全局安装 nestpm2: npm install -g @nestjs/cli pm2

  2. 设置 pm2 随系统启动: pm2 startup

  3. 第一次启动服务: pm2 start dist/main.js --name nest-service

  4. 编辑 nginx 配置文件: vim /etc/nginx/nginx.conf, 添加一个代理:

    添加代理
    location /api/ {
        proxy_pass http://localhost:5210/;
    }
  5. 重启 nginx: systemctl restart nginx

  6. .github/workflows/deploy.yml 中的 SCRIPT_AFTER 中添加 pm2 restart nest-service 重启服务

打开页面 示例: 实现天气预报查询服务, 查看接口是否可用