From b5383701713ab5aad10c19fda21fc933b4ff4330 Mon Sep 17 00:00:00 2001 From: chengma Date: Tue, 18 Aug 2026 15:41:31 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=BD=92=E6=A1=A3=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=20#269?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...-admin部署档口逐件回写与原始SKU匹配版本.md | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 docs/task/269-admin部署档口逐件回写与原始SKU匹配版本.md diff --git a/docs/task/269-admin部署档口逐件回写与原始SKU匹配版本.md b/docs/task/269-admin部署档口逐件回写与原始SKU匹配版本.md new file mode 100644 index 0000000..136d90d --- /dev/null +++ b/docs/task/269-admin部署档口逐件回写与原始SKU匹配版本.md @@ -0,0 +1,65 @@ +# 269 Admin:部署档口逐件回写与原始 SKU 匹配版本 + +- 类型:部署 +- 父级大工单:#14 +- 所属 MVP / 版本:#15 / Admin 生产部署 +- 状态:已完成,待用户验收 +- 日期:2026-08-18 +- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/269 + +## 背景与目标 + +把 #250 多件档口入库码逐件回写和 #259 原始 SKU 确定性匹配发布到生产 Admin,继续通过 `https://buy.833729.com` 提供服务,并安全处理相应 MySQL 追加迁移。 + +## 最终方案 + +- 最初固定提交 `a989e0d` 隔离构建并上传。生产预检发现数据库已被此前运行中的本地 Admin 记录为 v28,但 `source_sku_raw` 使用中间版本的默认排序规则,最终结构自检拒绝启动;稳定链接此时没有切换,旧服务继续运行。 +- 按追加迁移原则在 #259 增加 v29,不改写 v28:把既有字段统一为 `VARCHAR(500) COLLATE utf8mb4_bin NULL`,字段已正确时不改数据。最终固定提交改为 `7175af5` 并重新隔离验证、构建、上传和校验。 +- 切换前确认 SYB 同步、AI 匹配及档口入库码排队/回写均为 0。两条 `assigned/claimed` 采购任务是 8 月 12–13 日遗留状态,对应 Client 已长期未上线,不属于正在执行的任务。 +- 创建生产数据库单事务逻辑备份,验证权限、压缩包和建表段。目标二进制在 `127.0.0.1:18081` 预检成功并执行 v29,登录页返回 200。 +- 再次确认后台空闲后停止 systemd,原子切换稳定链接并启动。发布后验证 release 哈希、systemd、监听、schema v29、后台状态、Nginx、本机及公网 HTTP。 +- 配置、数据和 AI 密钥继续放在 release 外并由现有链接/环境文件复用;没有读取或输出凭据,也没有触发真实业务动作。 + +## 改了哪些 + +- `/opt/cmautobuy/releases/7175af5/cmautobuy-admin`:新增并启用最终生产 release。 +- `/opt/cmautobuy/cmautobuy-admin`:从 `d79e5c4` 原子切换到 `7175af5`。 +- `/opt/cmautobuy/backups/autobuy-before-269-20260818T073254Z.sql.gz`:新增部署前生产备份。 +- MySQL schema:从已存在的 v28 升级至 v29,`source_sku_raw` 统一为 `utf8mb4_bin`。 +- 未启用的候选 release `a989e0d` 和上传暂存文件已删除;前一生产 release `d79e5c4` 保留,但不兼容 schema v29,不能单独回切。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 发布物来自固定提交 `7175af5`,Go 1.23.0 测试、build、vet 通过 | 通过 | +| 部署前后台任务空闲,数据库备份完整 | 通过 | +| 本地、上传及最终 release 哈希一致 | 通过 | +| v29 迁移成功且原始 SKU 字段为二进制排序规则 | 通过 | +| systemd active/enabled,仅监听 `127.0.0.1:18080` | 通过 | +| Nginx、本机和公网登录页、静态资源正常 | 通过 | +| 新二进制包含 #250、#259 页面/错误标识 | 通过 | +| 未修改配置或触发真实业务动作 | 通过 | + +发布结果: + +- 二进制:28,131,480 字节,SHA-256 `c14b1a92736d7e83459038b1957b835bd8d12a1108289e5788ca3f66c6468ac6`。 +- 数据库备份:5,101,261 字节、权限 `0600`,SHA-256 `7d36990b8db734cde9890f4d7ad4a648080b0fd5f3cd84bb498c978bf82fd832`,包含 32 个建表段。 +- 新进程 PID 为 `21314`,启动时间 `2026-08-18 15:39:51 CST`。 +- 本机根路径 303、登录页 200;公网根路径 303、登录页 200、`app.js` 200。 +- 发布后 SYB、AI、档口入库码活动任务均为 0,启动日志中的 fatal、panic 和迁移错误均为 0。 + +## 测试 + +- 执行的命令:隔离 worktree 中使用 Go 1.23.0 执行 `go test ./... -count=1`、`go build ./...`、`go vet ./...`;Linux amd64 静态构建;服务器执行 `mysqldump`、`gzip -t`、`sha256sum`、独立端口预检、schema/字段查询、`systemctl`、`ss`、`nginx -t`、`journalctl`、本机与公网 `curl`。 +- 结果:最终构建、备份、v29 迁移、切换和发布后检查全部通过。 +- **没验证到的部分**:未使用生产账号登录后执行 Excel 重新导入、顺运宝匹配或真实多件回写;未触发同步、AI 匹配、采集、采购、下单或付款;未实际恢复数据库备份。 + +## 遗留问题 + +前一 release `d79e5c4` 最高只支持旧 schema,不能在 v29 数据库上单独启动。若必须回到该版本,需要同时恢复本次备份,这会覆盖备份时间之后产生的数据。 + +## 相关提交 + +- `b685d2c` fix: 追加原始SKU字段兼容迁移 (#259) +- `7175af5` 本次生产目标代码基线