Files
cmautobuy/docs/task/282-admin部署规范csv预检与sku并发恢复到生产.md
T
2026-08-21 09:49:57 +08:00

3.5 KiB

282 Admin:部署规范 CSV 预检与 SKU 并发恢复到生产

  • 类型:部署
  • 父级大工单:#14
  • 所属 MVP / 版本:#15 / Admin 生产部署
  • 状态:已完成,待用户验收
  • 日期:2026-08-21
  • Gitea 工单:#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(本次生产目标代码基线)