Files
cmautobuy/docs/task/228-admin部署最新版本4d6ee8c.md
T

79 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 兼容快速回退代码基线。