docs: 归档生产部署任务 #228

This commit is contained in:
chengma
2026-08-14 17:26:07 +08:00
parent 4d6ee8c86d
commit 03d3cb5ac9
@@ -0,0 +1,78 @@
# 228 Admin:打包部署最新版本 4d6ee8c 到生产服务器
- 类型:部署
- 父级大工单:#14
- 所属 MVP / 版本:#15 / Admin 生产部署
- 状态:已完成
- 日期:2026-08-14
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/228
## 背景与目标
生产服务此前仍运行提交 `a14c2bf`,本地最新已提交基线为 `4d6ee8c`。本次把包含 AI 服务商配置、AI 规格候选匹配、SYB 批量 AI 匹配、AI HTTP 兼容及后续数据维护代码的最新 Admin 发布到 `185.216.248.75`,继续通过 `https://buy.833729.com` 提供服务。
生产数据库已是 schema v22,旧生产二进制 `a14c2bf` 不再适合作为重启回退版本,因此同时准备支持 v22 的 `557c996` 作为快速回退 release。
## 最终方案
- 在系统临时目录分别建立 `4d6ee8c` 和 `557c996` 的 detached worktree,构建过程与主工作区未提交的 Client 文件完全隔离。
- 两个版本均使用固定 Go 1.23.0 完成全量测试、静态检查和 Linux amd64 静态构建。
- 发布前连续三次、切换前再一次确认运行中的 SYB 同步和 AI 匹配批次均为 0。
- 使用生产业务账号生成 `--no-tablespaces` 单事务逻辑备份,设置权限为 `0600`,完成 gzip、表数量和 SHA-256 校验。
- 上传目标和回退二进制,核对本地、暂存和最终 release 的 SHA-256;两个 release 均复用稳定配置和数据软链接。
- 停止 systemd 后原子切换稳定二进制链接。目标版本启动或本机登录页探测失败时,部署脚本自动切换到 `557c996`;本次目标版本健康检查通过,未触发回退。
- 部署后核对 release、进程、监听、schema、运行中批次、AI 配置、启动日志、本机及公网 HTTP 和最新静态资源。
- 未修改生产配置、AI 密钥、数据库业务数据或任务状态,未触发同步、AI 匹配、采集、采购、下单或付款。
## 改了哪些
- `/opt/cmautobuy/releases/4d6ee8c/`:新增并启用目标 release。
- `/opt/cmautobuy/releases/557c996/`:新增 schema v22 兼容快速回退 release。
- `/opt/cmautobuy/cmautobuy-admin`:稳定链接从 `a14c2bf` 原子切换到 `4d6ee8c`。
- `/opt/cmautobuy/backups/autobuy-before-228-20260814T092057Z-notablespaces.sql.gz`:新增部署前完整业务库备份。
- `docs/task/228-admin部署最新版本4d6ee8c.md`:新增本次部署归档。
上传暂存区、两个本地 detached worktree 和临时构建二进制已经清理;目标、回退 release、旧 release 和数据库备份保留。
## 验收结果
| 验收标准 | 结果 |
|---|---|
| 发布包只来自固定提交 `4d6ee8c`,不包含主工作区未提交文件 | 通过 |
| 目标和回退版本通过固定 Go 1.23.0 测试、vet 与 Linux amd64 构建 | 通过 |
| 发布前无运行中 SYB 同步或 AI 批次,数据库备份可读取 | 通过:四次均为 0;备份权限 `0600`,gzip 校验通过 |
| 本地、上传和 release 二进制 SHA-256 一致 | 通过 |
| 稳定链接指向 `4d6ee8c`,旧版本与 v22 回退版均保留 | 通过 |
| systemd、监听、schema 和启动日志正常 | 通过:active/enabled,监听 `127.0.0.1:18080`,schema v22 |
| 本机和公网 HTTP、最新 AI 静态资源正常 | 通过 |
| 未修改凭据和业务数据,未触发真实业务动作 | 通过 |
发布物与备份:
- 目标二进制:27,730,072 字节,SHA-256 `446e5903ec7768684bf30fcfdd9f0b46530b68d505ab23360f7b2c08d0ff3d5f`。
- 回退二进制:27,730,072 字节,SHA-256 `4f28d42a28bcc4c3ff0085303e754f108f2136928bf1e4ae8767b8076a9cd4b0`。
- 数据库备份:4,676,057 字节、30 个建表段,SHA-256 `689ce015cfd5b28fda36f58eae17f68b638db70340be36665e6aaf443e41656e`。
- 部署后服务 PID 为 3898,启动时间为 2026-08-14 17:22:53(UTC+8)。
- 本机根路径返回 303、登录页返回 200;公网根路径返回 303、登录页返回 200、未登录访问 AI 设置返回 303。
- 公网 `app.js` 已包含 `setupAIMatchCreate`,本机 CSS 已包含 AI 匹配进度弹窗标识。
- schema 仍为 v22;运行中的 SYB 同步和 AI 批次均为 0;已启用的 `gpt-5.5` 配置仍保持连接测试成功。
- 新进程启动后 Client 领取轮询继续返回 204。
## 测试
- 执行的命令:
- 两个隔离 worktree 分别运行 `GOTOOLCHAIN=go1.23.0 go test ./... -count=1` 和 `go vet ./...`
- 两个版本分别运行 `GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags='-s -w'`
- 生产运行态检查、`mysqldump --no-tablespaces`、`gzip -t`、SHA-256、release 安装和原子切换
- `systemctl`、`ss`、schema 与运行中批次 SQL、`journalctl`、本机及公网 HTTP、静态资源标识检查
- 结果:所有自动化测试、构建、备份、发布和健康检查通过,未触发自动回退。
- **没验证到的部分**:未使用生产账号登录后人工操作 AI 设置或批量 AI 匹配;未实际创建 AI 匹配、采集或采购任务,未执行 Client 真机下单或付款;未实际触发回退,只验证了回退 release、哈希和自动回退路径。
## 遗留问题
旧 release `a14c2bf` 不兼容当前 schema v22,不能作为普通应用回退目标。需要快速回退时使用 `/opt/cmautobuy/releases/557c996/cmautobuy-admin`;只有需要恢复旧数据库结构时才同时恢复本次数据库备份,该操作会覆盖备份时间之后的业务数据。
## 相关提交
- `4d6ee8c`:本次生产目标代码基线。
- `557c996`:本次 schema v22 兼容快速回退代码基线。