feat: deploy/deploy.sh 自动化部署体系 — 双tag镜像/快照/迁移门控/回滚,退役根deploy.sh
CI / backend (push) Waiting to run
CI / frontend (push) Waiting to run

- compose 四服务补 image: ${BACKEND_TAG}/${FRONTEND_TAG} 插值(换 tag 回滚前提)
- deploy/deploy.sh:工作区校验→PREV_SHA→pull→predeploy 快照(-Fc)→destructive 判定→
  build+双tag→.pending-deploy→迁移退出码门控→up -d --no-deps→健康轮询→versions.log→
  镜像治理;支持 --dry-run / flock / 基础设施健康门 / 多head预检
- deploy/rollback.sh:双入口(手动读 versions.log 跳 ROLLBACK 行 / --auto 读
  .pending-deploy);destructive 走 pg_restore --clean;双 tag 原子切换
- deploy/hotfix.sh:紧急单文件 cp + 强制收口提醒
- .gitignore 补 .pending-deploy/versions.log(运行时状态)
- 退役根 deploy.sh + deploy.env.example(SSH 旧模型,被 deploy/deploy.sh 取代)
This commit is contained in:
34047007@qq.com
2026-08-10 16:30:43 +08:00
parent 2c6ecc1f91
commit c55d096769
9 changed files with 513 additions and 177 deletions
+3 -2
View File
@@ -1,11 +1,12 @@
# 部署运维方案:生产工程化(一期 + 二期)
> **日期:** 2026-08-08v17 更新于 2026-08-10
> **版本:** v17.0(当前) **状态:** 一期 3 项已执行(磁盘/备份/TLS+ 构建加速(Dockerfile 卫生)+ gitea TLS,其余待执行
> **日期:** 2026-08-08v18 更新于 2026-08-10
> **版本:** v18.0(当前) **状态:** 一期 §2 deploy/deploy.sh 体系已实现(v18),见版本记录
> **关联:** [docs/10-生产部署文档.md](10-生产部署文档.md)、[docs/11-20260717部署事故分析.md](11-20260717部署事故分析.md)、[docs/12-部署实际操作记录.md](12-部署实际操作记录.md)、[docs/17-生产数据迁移.md](17-生产数据迁移.md)24 迁移专项,2026-08-09
>
> **版本记录:**
> - **v17** — 2026-08-10:§7 补「服务器本地改动必须回流 gitea」环节(TLS/Caddy 改动从未提交,git-ify checkout 会丢 HTTPS——回流后服务器 git pull 才安全,与 §2 闭环)
> - **v18** — 2026-08-10**§2 deploy/deploy.sh 体系落地(首次实现)**——① compose 四服务(backend/worker/migrate/frontend)补 `image:` + `${BACKEND_TAG}`/`${FRONTEND_TAG}` 插值(M2/M4 + 换 tag 回滚前提,build 前 export tag 则 build 产物直接打 `<sha>` 标签);② 新建 `deploy/deploy.sh`(工作区校验 → PREV_SHApull 前,F)→ git pull → before head → predeploy 快照 `-Fc` 全量(H)→ destructive 判定(P12 + `destructive_*`/`# DESTRUCTIVE` 双保险)→ build + 双 tag → `.pending-deploy`N1,落部署目录)→ 多 head 预检(P15)→ 迁移 `run --no-deps --rm` 退出码门控(K)→ after head → `up -d --no-deps backend worker frontend` → 健康轮询(V6)→ versions.log + 删标记 → 镜像治理 count 制;支持 `--dry-run`;顶部 source .envG+ flock + 遗留标记检测(I)+ 基础设施健康门(P14/N5));③ 新建 `deploy/rollback.sh`(双入口:手动读 versions.log 跳 ROLLBACK 行(E5/ `--auto` 读本次 `.pending-deploy`N1 洞);destructive=是 走 `pg_restore --clean --if-exists`L);双 tag 原子切换(E2);回滚追 ROLLBACK 行);④ 新建 `deploy/hotfix.sh`cp + 收口提醒);⑤ .gitignore 补 `.pending-deploy`/`versions.log`;⑥ 退役根 `deploy.sh` + `deploy.env.example`SSH 旧模型);⑦ docs/deployment-guide.md 同步。复用 migrate_prod.sh 的 `get_db_rev()` 模式(`grep -oE '[0-9a-f]{12}' | tail -1` 防容器 ID 误抓)。脚本用法见 §2 下方或 deploy/*.sh 头部
> - **v16** — 2026-08-10:§3 补批量迁移执行序 + destructive ordering(批次 1 日期收窄须与发代码同窗口);§7 补 gitea TLS 落地;§6 补构建加速落地(腾讯 pip/npm 源 + BuildKit,详见记忆 docker_build_optimization
> - **v1** — 初稿(生产工程化框架,一期 + 二期)
> - **v2** — 吸收三档补强:破坏性迁移硬判定、backup.sh 上机查清、扩对盘、compose 范围澄清、挂卷后 logrotate、pre-deploy 快照留存、registry token 轮换、alembic head 采集、增强级
+19 -8
View File
@@ -11,8 +11,8 @@
```bash
# 1. 服务器上 clone 项目
ssh root@your-server.com
git clone https://gitee.com/your-org/scilit-oncology.git /root/scilit-oncology
cd /root/scilit-oncology
git clone https://gitee.com/your-org/scilit-oncology.git /root/scilit
cd /root/scilit
# 2. 配置环境变量
cp .env.example .env
@@ -27,15 +27,26 @@ curl http://localhost:8000/health
curl http://localhost:80
```
## 使用 deploy.sh 自动化部署
## 使用 deploy/deploy.sh 自动化部署(生产)
> 旧根目录 `deploy.sh`(SSH 直连模型)已废弃,替换为 `deploy/` 脚本体系。
> 完整设计见 [16-部署运维方案.md](16-部署运维方案.md) §2。
```bash
# 1. 配置服务器连接信息
cp deploy.env.example deploy.env
# 编辑 deploy.env,填入 SCILIT_HOST / SCILIT_USER / SCILIT_PATH
# 在服务器 /root/scilitgit 仓库 + .env 所在目录)执行
# 2. 推送代码并部署
source deploy.env && ./deploy.sh
# 0. 前置:基础设施已在跑
docker compose -f docker-compose.prod.yml ps
# 1. 预览将执行的命令(不执行任何变更)
bash deploy/deploy.sh --dry-run
# 2. 正式部署(自动:工作区校验 → git pull → predeploy 快照 →
# 迁移 → 容器切换 → 健康轮询 → versions.log
bash deploy/deploy.sh
# 3. 回滚到上一成功版本
bash deploy/rollback.sh
```
## PostgreSQL 备份与恢复