feat(deploy): 接入全自动生产发布校验

This commit is contained in:
Script Generator
2026-07-06 14:45:44 +08:00
parent 8d61bb7c13
commit dc780e4c7d
24 changed files with 662 additions and 3 deletions

View File

@@ -144,6 +144,45 @@ docker compose --env-file .env.production -f docker-compose.prod.yml ps
curl http://localhost/api/v1/config/ai
```
## 全自动生产发布(推荐)
生产环境推荐走 `.github/workflows/deploy-production.yml`,不再要求部署侧手工执行 `docker compose build` 或手工判断是否需要 `up`
GitHub 仓库需要配置这些 Secrets
- `PROD_HOST`:生产服务器地址。
- `PROD_USER`SSH 用户。
- `PROD_SSH_KEY`SSH 私钥。
- `PROD_APP_DIR`:服务器上的项目目录。
- `GHCR_READ_TOKEN`可选。GHCR 镜像为私有包时,用于服务器 `docker login ghcr.io` 拉镜像。
服务器首次准备仍然需要完成一次:
```bash
git clone <repo-url> ftb-project-management
cd ftb-project-management
cp .env.production.example .env.production
```
然后按实际环境改好 `.env.production` 里的数据库密码、域名、`NEXTAUTH_SECRET`、AI key 等。`APP_VERSION``APP_BUILD_TIME``WEB_IMAGE``SERVER_IMAGE` 会由 GitHub Actions 在每次发布时自动更新。
之后只要代码合并或 push 到 `master`Actions 会自动执行:
1. 用当前 commit SHA 构建 `web``server` Docker 镜像。
2. 推送镜像到 GHCR镜像 tag 同时包含 commit SHA 和 `master`
3. SSH 到生产服务器,`git pull --ff-only origin master` 更新 Compose 和部署脚本。
4. 写入 `.env.production``APP_VERSION``APP_BUILD_TIME``WEB_IMAGE``SERVER_IMAGE`
5. 执行 `docker compose --env-file .env.production -f docker-compose.prod.yml pull web server` 拉取本次 SHA 镜像。
6. 启动数据库与 Redis执行 `pnpm --filter server db:deploy`
7. 执行 `docker compose --env-file .env.production -f docker-compose.prod.yml up -d --remove-orphans` 重启服务。
8. 通过 `/api/v1/health/version` 校验运行中的后端版本是否等于本次 commit SHA。
如果最后一步失败Actions 会红掉,说明“代码已合并”不等于“线上容器已更新”。本地或服务器也可以手工运行:
```bash
pnpm deploy:check-runtime http://localhost/api/v1/health/version <expected-commit-sha>
```
## Nginx 路由
`deploy/nginx/default.conf.template` 使用官方 Nginx 镜像的模板机制生成配置: