Files
cmautobuy/docs/task/269-admin部署档口逐件回写与原始SKU匹配版本.md
T
2026-08-18 15:41:31 +08:00

66 lines
4.4 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.
# 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` 本次生产目标代码基线