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 采集、增强级