6.1 KiB
6.1 KiB
247 Admin:部署档口入库码后台回写版本到生产服务器
- 类型:部署
- 父级大工单:#14
- 所属 MVP / 版本:#15 / Admin 生产部署
- 状态:已完成,待用户验收
- 日期:2026-08-15
- Gitea 工单:#247
背景与目标
生产 Admin 原来运行 17c2d45,尚未包含 #245 按货运单号直查顺运宝和 #246 档口入库码
后台批量回写。本任务把固定提交 7736ab7 构建并发布到 185.216.248.75,继续通过
https://buy.833729.com 提供服务。
发布前预检发现生产数据库已于 2026-08-15T08:53:04Z 记录 schema v25,两个新增字段、
批次索引和包含 queued 的状态约束均已存在;但线上仍是只支持 v24 的旧进程。旧进程尚未
重启所以仍在线,一旦重启将拒绝连接版本更高的数据库。本次发布因此同时恢复“线上二进制
与数据库版本一致”的安全状态。
最终方案
- 在 Windows 系统临时目录建立
7736ab7detached worktree,与主工作区未提交的 Client 文件隔离;使用固定 Go 1.23.0 完成 vet、全量构建和全量测试,再交叉编译 Linux amd64 静态二进制。 - 上传后核对本地、暂存和最终 release 的 SHA-256、文件大小和 ELF 类型;正式 release
继续通过符号链接复用
/opt/cmautobuy/config.yaml和/opt/cmautobuy/data,没有复制 或输出凭据。 - 因生产 schema 已是 v25,先在不对公网开放的
127.0.0.1:18081使用生产环境启动目标 二进制,确认数据库自检、稳定配置和登录页均正常,随后才进入切换窗口。 - 三次核对运行中的 SYB 同步、AI 匹配、档口入库码排队/回写均为 0。切换前使用生产业务
账号生成
--no-tablespaces单事务逻辑备份,权限设为0600,完成 gzip、建表段和 SHA-256 校验。 - 停止 systemd 后原子切换稳定二进制链接并启动。目标版本通过本机登录页检查后,再核对 schema v25 字段/索引/约束、systemd、监听、Nginx、公网 HTTPS 和最新静态资源标识。
- 预检发现改变了原回退条件:旧
17c2d45不能在 v25 上直接启动。当前只允许修复前进; 只有确认没有任何新业务写入时,才能同时恢复数据库备份和原 release。不得只切旧二进制。 - 部署过程没有触发顺运宝同步、档口入库码匹配/回写、AI 匹配、采集、采购、下单或付款。
改了哪些
/opt/cmautobuy/releases/7736ab7/:新增并启用目标 Admin release。/opt/cmautobuy/cmautobuy-admin:稳定链接从17c2d45原子切换到7736ab7。/opt/cmautobuy/backups/autobuy-before-247-20260815T093211Z-v25-notablespaces.sql.gz: 新增部署前生产 v25 备份。docs/task/247-admin部署档口入库码后台回写版本.md:新增本次部署归档。
原 17c2d45 release 继续保留,但不能单独作为 v25 应用回退。服务器上传暂存文件和预检
日志已删除;本地 detached worktree 已移除。已校验的 Linux 二进制暂时保留在系统临时目录
cmautobuy-deploy-247-20260815-172931/artifacts,不在仓库中且不含配置或数据。
验收结果
| 验收标准 | 结果 |
|---|---|
发布物只来自固定提交 7736ab7,固定 Go 1.23.0 验证通过 |
通过 |
| 切换前 SYB、AI 和档口入库码运行数均为 0 | 通过(三次核对) |
| 数据库备份权限、gzip、建表段和哈希校验通过 | 通过:0600、31 个建表段 |
| 本地、上传和最终 release 哈希一致 | 通过 |
systemd active/enabled,只监听 127.0.0.1:18080 |
通过 |
| schema v25 字段、索引和状态约束自检通过 | 通过 |
| 本机和公网根路径、登录页、静态资源正常 | 通过 |
| 配置、AI 密钥和业务记录保持,未触发真实业务动作 | 通过 |
发布结果:
- 目标二进制:28,012,696 字节,SHA-256
a6bc35265c57942a5ffc54e7a547ca129b14f439ce1bf494c4d06eb10162cef1。 - 数据库备份:4,845,905 字节,SHA-256
1f0b763a4c50cffd0bfec64ea76026c6da9922f23751632a2e8870ab7532a891。 - 新服务 PID 为
30494,启动时间2026-08-15 17:32:41 CST;启动日志显示数据库就绪, fatal、panic 和迁移错误均为 0。 - MySQL 服务端为 8.4.8,schema 为 v25;
apply_batch_id、apply_queued_at、idx_inner_code_apply_batch和含queued的状态约束均存在。 - 本机根路径 303、登录页 200;公网根路径 303、登录页 200、
app.js200,且最新脚本包含apply_batch_id标识。 - 部署后运行中的 SYB、AI 和档口入库码后台任务均为 0;档口入库码记录仍为 110 条。
- 稳定配置和数据链接正常,AI 密钥文件可由服务读取且权限仍为
0600;未读取或输出内容。
测试
- 执行的命令:
- 隔离 worktree:
GOTOOLCHAIN=go1.23.0 go vet ./...、go build ./...、go test ./... -count=1 GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags='-s -w'- 上传前后
sha256sum、stat、file - 独立端口生产环境启动预检、生产运行态 SQL、
mysqldump --no-tablespaces、gzip -t readlink、systemctl、ss、nginx -t、journalctl、本机和公网curl
- 隔离 worktree:
- 结果:固定 Go 1.23.0 验证、静态构建、启动预检、备份、切换及全部发布后健康检查通过。
- 没验证到的部分:未使用生产账号登录后人工选择超过 20 条档口入库码并观察后台进度;
未向真实顺运宝发送匹配、删除或写入请求;未触发真实同步、AI 匹配、采集、采购、下单或
付款;未实际执行数据库覆盖恢复或旧 release 回退。当前环境仍没有独立 MySQL 8.4
_test库执行 v24→v25 DDL 演练,但生产现有 v25 已由目标二进制启动自检通过。
遗留问题
旧 17c2d45 只支持 schema v24,不能单独启动。生产发生故障时优先修复前进;如确需恢复
本次备份,必须先确认备份后没有需要保留的新业务数据,并同时恢复数据库与原 release。
相关提交
7736ab7:本次生产目标代码基线。