使用 SSH 来部署 Nest 服务
August 8, 2024 by
通过 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
依次执行: (仅第一次启动)
-
全局安装
nest
和pm2
:npm install -g @nestjs/cli pm2
-
设置
pm2
随系统启动:pm2 startup
-
第一次启动服务:
pm2 start dist/main.js --name nest-service
-
编辑
nginx
配置文件:vim /etc/nginx/nginx.conf
, 添加一个代理:添加代理location /api/ { proxy_pass http://localhost:5210/; }
-
重启
nginx
:systemctl restart nginx
-
在
.github/workflows/deploy.yml
中的SCRIPT_AFTER
中添加pm2 restart nest-service
重启服务
打开页面 示例: 实现天气预报查询服务, 查看接口是否可用