From 912ba96d12c6b2f8ca030f0167f6c089f44c2e3a Mon Sep 17 00:00:00 2001 From: chengma Date: Fri, 21 Aug 2026 09:49:57 +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#282?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...admin部署规范csv预检与sku并发恢复到生产.md | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 docs/task/282-admin部署规范csv预检与sku并发恢复到生产.md diff --git a/docs/task/282-admin部署规范csv预检与sku并发恢复到生产.md b/docs/task/282-admin部署规范csv预检与sku并发恢复到生产.md new file mode 100644 index 0000000..a3e18fe --- /dev/null +++ b/docs/task/282-admin部署规范csv预检与sku并发恢复到生产.md @@ -0,0 +1,65 @@ +# 282 Admin:部署规范 CSV 预检与 SKU 并发恢复到生产 + +- 类型:部署 +- 父级大工单:#14 +- 所属 MVP / 版本:#15 / Admin 生产部署 +- 状态:已完成,待用户验收 +- 日期:2026-08-21 +- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/282 + +## 背景与目标 + +将已提交的最新 Admin 代码发布到生产,包含 #281 的规范 CSV 只读预检能力,以及 #283 +对 SYB 与目录并发写入同一 SKU 规格时的安全恢复。生产继续通过 +`https://buy.833729.com` 提供服务。 + +## 最终方案 + +- 从固定提交 `9c22ec6` 构建 Linux amd64 静态二进制;本地、上传和最终稳定链接的 + SHA-256 均为 `ee1ab23eb28c454e7f07c478bf148b0c7a696db8c2df39ef79348cb524cc0ca9`。 +- 切换前确认 schema 为 v29,SYB、目录导入和 AI 匹配活动任务均为 0;创建并校验 + 服务器端逻辑备份。首次备份因默认 MySQL 配置含不兼容项而生成了 20 字节空文件, + 已立即删除;改用 `mysqldump --no-defaults --no-tablespaces` 后得到有效备份。 +- 新二进制先在 `127.0.0.1:18081` 预检,根路径为 303、登录页为 200;随后原子切换 + `/opt/cmautobuy/cmautobuy-admin` 并重启 systemd。 +- 第一次正式切换在服务尚未完成监听时立即检查页面,自动回退到 `efad2ea`。确认原因后, + 增加最多 15 秒的登录页就绪等待,再次切换成功。 +- 复用 release 外的 `config.yaml` 和 `data` 链接;没有修改配置、环境文件、数据库结构 + 或业务数据,未执行目录导入 `--apply`、SYB、AI、采集、采购、下单或付款。 + +## 改了哪些 + +- `/opt/cmautobuy/releases/9c22ec6/cmautobuy-admin`:新增并启用生产二进制。 +- `/opt/cmautobuy/cmautobuy-admin`:稳定链接从 `efad2ea` 原子切换到 `9c22ec6`。 +- `/opt/cmautobuy/backups/autobuy-before-282-20260821T014506Z-notablespaces.sql.gz`:部署前 + 逻辑备份,78,513,534 字节,SHA-256 为 + `da0c5955bf67b846124681bfc008efe7af993c49f7967c46a843617149da380c`,权限 0600。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 发布物来自固定提交,构建、上传和安装 SHA-256 一致 | 通过 | +| 切换前后台作业为空,逻辑备份可通过 gzip 校验 | 通过 | +| 独立端口预检和 schema v29 自检通过 | 通过 | +| systemd active/enabled,稳定链接指向新 release | 通过 | +| Nginx、本机和公网 HTTPS 根路径、登录页正常 | 通过 | +| 生产配置、数据和密钥未复制或输出;未触发业务写入 | 通过 | +| 上一 release `efad2ea` 保留,可切回 | 通过 | + +## 测试 + +- 执行的命令:在 `admin/` 以 Go 1.23.0 执行 `go test ./... -count=1`、`go build ./...`、 + `go vet ./...`;以 `GOOS=linux GOARCH=amd64 CGO_ENABLED=0` 构建发布物。服务器执行 + SHA-256、`mysqldump --no-defaults --no-tablespaces`、`gzip -t`、独立端口预检、schema 与 + 活动任务查询、systemd、端口监听和 `nginx -t`;本机执行公网 HTTPS 检查。 +- 结果:服务运行 `9c22ec6`,schema 为 v29;本机和公网根路径均为 303、登录页均为 200; + 启动后没有 fatal、panic 或迁移失败日志。 +- **没验证到的部分**:未执行目录导入 `--dry-run` 或 `--apply`;未登录生产页面发起 + SYB、AI 或真实业务操作;未实际执行回退或恢复备份。 + +## 相关提交 + +- `fe64d3b` feat: 增加规范 CSV 预检与安全入库 (#281) +- `05b04e0` fix: 恢复并发 SKU 规格唯一键冲突 (#283) +- `9c22ec6` docs: 归档任务 #283(本次生产目标代码基线)