diff --git a/docs/task/290-admin部署多个相同顺运宝明细逐件匹配修复到生产.md b/docs/task/290-admin部署多个相同顺运宝明细逐件匹配修复到生产.md new file mode 100644 index 0000000..4938c32 --- /dev/null +++ b/docs/task/290-admin部署多个相同顺运宝明细逐件匹配修复到生产.md @@ -0,0 +1,70 @@ +# 290 Admin:部署多个相同顺运宝明细逐件匹配修复到生产 + +- 类型:部署 +- 父级大工单:#14 +- 所属 MVP / 版本:#224 / 档口入库码回写 MVP +- 状态:已完成,待用户验收 +- 日期:2026-08-22 +- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/290 + +## 背景与目标 + +#289 已修复两个相同顺运宝商品明细对应两个单件档口入库码时被误判为候选重复的问题。 +生产此前运行 `add296c`,本任务将固定提交 `a61d97b` 发布到生产,使后续人工重新匹配可使用 +新的逐件确定性规划。 + +## 最终方案 + +- 从固定提交 `a61d97b` 的隔离工作树构建 Linux amd64 静态二进制;本地、上传、release + 和稳定链接的 SHA-256 均为 + `09b3ec2d7c3eb6d77cb437d71f52e38aa68acf0d18e490e0459708f7fdff0807`。 +- 切换前确认 schema 为 v29,SYB 同步、目录导入、AI 匹配和档口入库码后台任务均为 0。 + 唯一 `claimed` 采购任务 `cg26` 自 2026-08-13 起未更新,对应 Client 最后上线于 + 2026-08-19,判定为遗留状态,不属于当前执行。 +- 使用 `mysqldump --no-defaults --no-tablespaces` 创建逻辑备份,验证 gzip、文件权限、 + 大小和建表段。 +- 目标二进制先在 `127.0.0.1:18081` 预检,再发布到 + `/opt/cmautobuy/releases/a61d97b/`,复用 release 外的配置和数据链接,原子切换稳定 + 二进制链接并重启 systemd。 +- 正式服务最多等待 15 秒;最终验证 systemd、监听、Nginx、本机和公网 HTTPS。 + 上一 release `add296c` 保留,可直接切回。 +- 没有修改 schema、配置、AI 密钥或业务数据;未执行真实重新匹配、顺运宝新增/写码、 + 采集、采购、下单或付款。 + +## 改了哪些 + +- `/opt/cmautobuy/releases/a61d97b/cmautobuy-admin`:新增并启用生产二进制, + 28,164,248 字节,权限 0750,属主 `cmautobuy:cmautobuy`。 +- `/opt/cmautobuy/cmautobuy-admin`:稳定链接从 `add296c` 原子切换到 `a61d97b`。 +- `/opt/cmautobuy/backups/autobuy-before-290-20260822T035529Z-notablespaces.sql.gz`: + 部署前逻辑备份,83,495,133 字节、权限 0600、32 个建表段,SHA-256 为 + `233a67b9a77f397fc708302e736c5142d6f225461eb456bbb34b3dbb5db461ce`。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 发布物来自固定提交,本地、上传和安装 SHA-256 一致 | 通过 | +| 切换前后台任务为空,逻辑备份通过 gzip 校验且权限为 0600 | 通过 | +| 独立端口预检、systemd、监听和 Nginx 正常 | 通过 | +| 本机和公网 HTTPS 根路径、登录页及静态资源正常 | 通过 | +| schema 和配置保持不变,未触发真实业务写入 | 通过 | +| 上一 release `add296c` 保留,可快速回退 | 通过 | + +## 测试 + +- 执行的命令:在隔离工作树的 `admin/` 以 Go 1.23.0 执行 `go test ./... -count=1`、 + `go build ./...`、`go vet ./...`,再以 + `GOOS=linux GOARCH=amd64 CGO_ENABLED=0` 构建发布物;服务器执行发布物 SHA-256、 + `mysqldump`、`gzip -t`、schema 与活动任务查询、独立端口预检、`systemctl`、`ss`、 + `nginx -t` 和日志检查;本机执行公网 HTTPS 检查。 +- 结果:生产进程实际执行 `a61d97b`;schema 为 v29;systemd active/enabled;本机根路径 + 和登录页为 303/200;公网根路径、登录页和 `app.js` 为 303/200/200;启动日志没有 + fatal、panic 或迁移失败;发布后四类后台任务仍为 0。 +- **没验证到的部分**:未用生产样本 `260820SS6E61GG` 执行重新匹配或真实档口入库码 + 回写;未实际执行应用回退或数据库恢复。 + +## 相关提交 + +- `18ad85d` fix: 兼容多个相同顺运宝明细逐件匹配 (#289) +- `a61d97b` docs: 归档任务 #289(本次生产目标代码基线)