-
方案一 GitHub Actions 到服务器直连发布(轻量、通用)
- 思路:在仓库 Settings → Secrets 配置 SSH_HOST/SSH_USERNAME/SSH_KEY;Actions 检出代码、安装依赖、构建后通过 SSH 在服务器执行拉取、安装生产依赖与 PM2 reload。
- 示例要点:
- 运行器:ubuntu-latest;步骤含 actions/checkout@v4、actions/setup-node@v4(指定 Node 18/20 LTS)、安装依赖与构建。
- 部署步骤使用 appleboy/ssh-action 执行远程脚本:
- 脚本示例:
- cd /path/to/project
- git pull
- yarn install --production
- pm2 reload all
- 适用:单台/少量服务器、快速交付;如需审批/多环境可扩展为 workflow_dispatch 或接入 Argo CD。
-
方案二 服务器 Webhook 自动拉取(自托管、事件驱动)
- 思路:在服务器以 Node.js 启动 HTTP 服务,使用 github-webhook-handler 校验 secret;收到 push 事件后执行部署脚本(git pull、安装依赖、重启)。
- 关键配置:
- GitHub Webhook:Payload URL(如 http://your-domain/autodeploy)、Content type application/json、设置 Secret。
- 服务器监听端口(如 7777),可用 Nginx 反向代理与鉴权;部署脚本中执行 git reset --hard origin/main && git pull && npm install && pm2 restart app。
- 适用:不依赖第三方 CI、对内网/私有仓库友好。
-
方案三 本地 Node.js 脚本一键打包上传(零依赖 CI)
- 思路:本地用 Node.js 脚本(如 ssh2 + archiver)打包前端/静态产物,上传至服务器临时目录并解压替换,最后执行远程重启命令。
- 关键依赖与流程:
- 依赖:ssh2、archiver、dotenv、ora;.env 管理 SERVER_HOST/PORT/USER、本地 dist 目录与目标部署目录。
- 流程:本地 npm run build → 压缩为 zip → SSH 上传 → 远程解压到部署目录 → 执行 pm2 reload 或等效命令。
- 适用:前端或静态站点、希望“本地一键发布”的团队。