docs: 归档部署任务 #269
This commit is contained in:
@@ -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` 本次生产目标代码基线
|
||||
Reference in New Issue
Block a user