Admin:部署商品级颜色映射版本到生产 #296

Open
opened 2026-08-24 15:18:36 +08:00 by ila · 4 comments
Owner

基本信息

  • 类型:部署
  • 父级大工单:#14
  • 所属 MVP / 版本:#291 / 蝦皮与 PDD 商品级颜色映射
  • 阶段:Stage C 生产发布

要解决什么

生产当前运行的 Admin 尚未包含 #293、#294、#295 的商品级颜色映射数据模型、可视化页面及 SYB 完整规格解析接入,需要把最新已提交代码安全发布到生产,并执行 MySQL schema v29 → v30 迁移。

做什么 / 不做什么

  • 做:从固定 Git 提交构建 Linux amd64 静态二进制,执行 Go 1.23.0 build、test、vet。
  • 做:切换前核对生产服务、schema 和后台活动任务,创建可校验的 MySQL 逻辑备份。
  • 做:先在独立端口预检新二进制,再发布到独立 release 目录并原子切换稳定链接。
  • 做:验证 schema v30、systemd、端口、Nginx、本机及公网 HTTPS。
  • 不做:不修改生产配置、AI 密钥和账号凭据;不主动触发顺运宝同步、AI 匹配、采集、采购、下单或付款。

怎么做

  • 发布基线固定为执行部署时 main 的已提交 HEAD;从隔离 Git worktree 的 admin/ 构建,避免带入当前工作区未提交文件。
  • 服务器发布到 /opt/cmautobuy/releases/<提交短哈希>/cmautobuy-admin,复用 release 外的配置、密钥和数据目录。
  • 切换前用 mysqldump --no-defaults --no-tablespaces 创建 gzip 逻辑备份并校验;确认 SYB、目录导入、AI 匹配、档口回写等后台活动任务不存在。
  • 新二进制先监听 127.0.0.1:18083 预检启动和迁移,再原子切换 /opt/cmautobuy/cmautobuy-admin 并重启 cmautobuy-admin.service。

预计修改范围:生产 release 目录、稳定二进制链接和数据库 schema_migrations v30;不修改仓库业务代码。

验收标准

  • 发布物来自固定提交,本地、上传和服务器安装 SHA-256 一致。
  • Go 1.23.0 的 go build ./...、go test ./... -count=1、go vet ./... 通过。
  • 部署前数据库逻辑备份通过 gzip 校验,权限为 0600。
  • 独立端口预检通过,生产 schema 从 v29 安全迁移并自检为 v30。
  • systemd active/enabled,127.0.0.1:18080、Nginx 和公网 HTTPS 正常。
  • 配置、密钥和业务数据未被替换,未触发真实业务操作。
  • 上一 release 保留并记录,可快速回退二进制。

怎么验证

cd D:\chengma\cmautobuy\admin
$env:GOTOOLCHAIN="go1.23.0"
go build ./...
go test ./... -count=1
go vet ./...
Remove-Item Env:GOTOOLCHAIN

服务器检查发布物 SHA-256、备份 gzip、schema_migrations、后台任务、独立端口、systemctl、ss、nginx -t 和近期日志;本地检查 https://buy.833729.com/、登录页和静态资源状态码。

风险和回退

  • schema v30 为新增表和索引的追加迁移;启动迁移前必须备份。二进制回退不会自动删除 v30 表,旧版本应忽略新增表。
  • 独立端口预检或正式启动失败时,不继续暴露新版本,稳定链接切回上一 release 并重启服务。
  • 只有数据库确认损坏且用户明确授权时才执行逻辑备份恢复,本次部署不自动恢复或删除生产数据。
## 基本信息 - 类型:部署 - 父级大工单:#14 - 所属 MVP / 版本:#291 / 蝦皮与 PDD 商品级颜色映射 - 阶段:Stage C 生产发布 ## 要解决什么 生产当前运行的 Admin 尚未包含 #293、#294、#295 的商品级颜色映射数据模型、可视化页面及 SYB 完整规格解析接入,需要把最新已提交代码安全发布到生产,并执行 MySQL schema v29 → v30 迁移。 ## 做什么 / 不做什么 - 做:从固定 Git 提交构建 Linux amd64 静态二进制,执行 Go 1.23.0 build、test、vet。 - 做:切换前核对生产服务、schema 和后台活动任务,创建可校验的 MySQL 逻辑备份。 - 做:先在独立端口预检新二进制,再发布到独立 release 目录并原子切换稳定链接。 - 做:验证 schema v30、systemd、端口、Nginx、本机及公网 HTTPS。 - 不做:不修改生产配置、AI 密钥和账号凭据;不主动触发顺运宝同步、AI 匹配、采集、采购、下单或付款。 ## 怎么做 - 发布基线固定为执行部署时 `main` 的已提交 HEAD;从隔离 Git worktree 的 `admin/` 构建,避免带入当前工作区未提交文件。 - 服务器发布到 `/opt/cmautobuy/releases/<提交短哈希>/cmautobuy-admin`,复用 release 外的配置、密钥和数据目录。 - 切换前用 `mysqldump --no-defaults --no-tablespaces` 创建 gzip 逻辑备份并校验;确认 SYB、目录导入、AI 匹配、档口回写等后台活动任务不存在。 - 新二进制先监听 `127.0.0.1:18083` 预检启动和迁移,再原子切换 `/opt/cmautobuy/cmautobuy-admin` 并重启 `cmautobuy-admin.service`。 预计修改范围:生产 release 目录、稳定二进制链接和数据库 schema_migrations v30;不修改仓库业务代码。 ## 验收标准 - [x] 发布物来自固定提交,本地、上传和服务器安装 SHA-256 一致。 - [x] Go 1.23.0 的 `go build ./...`、`go test ./... -count=1`、`go vet ./...` 通过。 - [x] 部署前数据库逻辑备份通过 gzip 校验,权限为 0600。 - [x] 独立端口预检通过,生产 schema 从 v29 安全迁移并自检为 v30。 - [x] systemd active/enabled,127.0.0.1:18080、Nginx 和公网 HTTPS 正常。 - [x] 配置、密钥和业务数据未被替换,未触发真实业务操作。 - [x] 上一 release 保留并记录,可快速回退二进制。 ## 怎么验证 ```powershell cd D:\chengma\cmautobuy\admin $env:GOTOOLCHAIN="go1.23.0" go build ./... go test ./... -count=1 go vet ./... Remove-Item Env:GOTOOLCHAIN ``` 服务器检查发布物 SHA-256、备份 gzip、`schema_migrations`、后台任务、独立端口、`systemctl`、`ss`、`nginx -t` 和近期日志;本地检查 `https://buy.833729.com/`、登录页和静态资源状态码。 ## 风险和回退 - schema v30 为新增表和索引的追加迁移;启动迁移前必须备份。二进制回退不会自动删除 v30 表,旧版本应忽略新增表。 - 独立端口预检或正式启动失败时,不继续暴露新版本,稳定链接切回上一 release 并重启服务。 - 只有数据库确认损坏且用户明确授权时才执行逻辑备份恢复,本次部署不自动恢复或删除生产数据。
Author
Owner

实施记录:固定提交 7d5f4e9 已通过 Go 1.23.0 build/test/vet,Linux amd64 发布物 SHA-256 为 5f46dadbd7c3767fc167112f36b748f4b891c2b419d36e6ac90326ccf5992dcf。部署前 schema v29,SYB、目录导入、AI、档口回写活动任务均为 0;cg26 是 2026-08-13 起未更新的遗留 claimed 任务。数据库备份已完成并通过 gzip 校验。

第一次独立端口预检失败:服务器 nps 进程已监听 IPv6 通配 :18081,原检查仅匹配 127.0.0.1:18081,curl 因此访问到 nps 并得到 404,新 Admin 随后明确报 address already in use。生产 systemd 未切换且仍正常。已把工单预检端口修订为确认空闲的 127.0.0.1:18082,并将在重试前补齐新 release 指向稳定配置和数据目录的软链接。

实施记录:固定提交 `7d5f4e9` 已通过 Go 1.23.0 build/test/vet,Linux amd64 发布物 SHA-256 为 `5f46dadbd7c3767fc167112f36b748f4b891c2b419d36e6ac90326ccf5992dcf`。部署前 schema v29,SYB、目录导入、AI、档口回写活动任务均为 0;`cg26` 是 2026-08-13 起未更新的遗留 claimed 任务。数据库备份已完成并通过 gzip 校验。 第一次独立端口预检失败:服务器 `nps` 进程已监听 IPv6 通配 `:18081`,原检查仅匹配 `127.0.0.1:18081`,curl 因此访问到 nps 并得到 404,新 Admin 随后明确报 `address already in use`。生产 systemd 未切换且仍正常。已把工单预检端口修订为确认空闲的 `127.0.0.1:18082`,并将在重试前补齐新 release 指向稳定配置和数据目录的软链接。
Author
Owner

补充端口核对:nps 同时占用 IPv6 通配 :18081 与 :18082;尚未在 18082 启动 Admin。已逐端口检查并把预检端口改为当前未监听的 127.0.0.1:18083。第一次失败进程在绑定前已完成 v30 追加迁移并通过自检,当前两张 v30 表存在;旧生产进程仍正常运行,后续预检会再次验证迁移幂等。

补充端口核对:`nps` 同时占用 IPv6 通配 `:18081` 与 `:18082`;尚未在 18082 启动 Admin。已逐端口检查并把预检端口改为当前未监听的 `127.0.0.1:18083`。第一次失败进程在绑定前已完成 v30 追加迁移并通过自检,当前两张 v30 表存在;旧生产进程仍正常运行,后续预检会再次验证迁移幂等。
Author
Owner

部署完成,状态待用户验收:

  • 固定提交:7d5f4e9fd1ec4a1cf2a51d8817ded05deff0d82d。
  • Go 1.23.0:go build ./...、go test ./... -count=1、go vet ./... 全部通过。
  • Linux amd64 发布物:28,283,032 字节;本地、上传和生产 SHA-256 均为 5f46dadbd7c3767fc167112f36b748f4b891c2b419d36e6ac90326ccf5992dcf。
  • 部署前备份:/opt/cmautobuy/backups/autobuy-before-296-20260824T072402Z-notablespaces.sql.gz,83,499,032 字节、权限 0600、32 个建表段,SHA-256 d6086a41b98061d34ae24dba84eac8dc479347ddc71676b95be8d576649657ff。
  • 第一次 18081 预检因 nps 占用 IPv6 通配端口而失败;正式服务未切换。补齐 release 的 config.yaml / data 软链接,并改用确认空闲的 18083 后预检通过。第一次进程已完成 v30 迁移,18083 重试证明迁移可重放且自检正常。
  • 当前稳定链接和进程实际执行 /opt/cmautobuy/releases/7d5f4e9/cmautobuy-admin;上一 release a61d97b 保留。
  • schema v30,两张颜色映射新表存在且初始记录数均为 0;SYB、目录导入、AI 和档口回写活动任务均为 0;遗留 claimed 任务仍只有 cg26。
  • systemd active/enabled,监听 127.0.0.1:18080,Nginx 配置通过;本机根路径/登录页/颜色路由/颜色脚本为 303/200/303/200,公网 HTTPS 检查结果相同,新静态脚本为 200。
  • 未修改生产配置、AI 密钥和业务数据,未触发顺运宝同步、AI 匹配、采集、采购、下单或付款。

未验证:未使用生产账号进入颜色匹配页面做视觉验收;未创建真实颜色映射;未实际执行二进制回退或数据库恢复。

部署完成,状态待用户验收: - 固定提交:`7d5f4e9fd1ec4a1cf2a51d8817ded05deff0d82d`。 - Go 1.23.0:`go build ./...`、`go test ./... -count=1`、`go vet ./...` 全部通过。 - Linux amd64 发布物:28,283,032 字节;本地、上传和生产 SHA-256 均为 `5f46dadbd7c3767fc167112f36b748f4b891c2b419d36e6ac90326ccf5992dcf`。 - 部署前备份:`/opt/cmautobuy/backups/autobuy-before-296-20260824T072402Z-notablespaces.sql.gz`,83,499,032 字节、权限 0600、32 个建表段,SHA-256 `d6086a41b98061d34ae24dba84eac8dc479347ddc71676b95be8d576649657ff`。 - 第一次 18081 预检因 `nps` 占用 IPv6 通配端口而失败;正式服务未切换。补齐 release 的 `config.yaml` / `data` 软链接,并改用确认空闲的 18083 后预检通过。第一次进程已完成 v30 迁移,18083 重试证明迁移可重放且自检正常。 - 当前稳定链接和进程实际执行 `/opt/cmautobuy/releases/7d5f4e9/cmautobuy-admin`;上一 release `a61d97b` 保留。 - schema v30,两张颜色映射新表存在且初始记录数均为 0;SYB、目录导入、AI 和档口回写活动任务均为 0;遗留 claimed 任务仍只有 `cg26`。 - systemd active/enabled,监听 `127.0.0.1:18080`,Nginx 配置通过;本机根路径/登录页/颜色路由/颜色脚本为 303/200/303/200,公网 HTTPS 检查结果相同,新静态脚本为 200。 - 未修改生产配置、AI 密钥和业务数据,未触发顺运宝同步、AI 匹配、采集、采购、下单或付款。 未验证:未使用生产账号进入颜色匹配页面做视觉验收;未创建真实颜色映射;未实际执行二进制回退或数据库恢复。
Author
Owner

本地归档已提交并推送:4d56236ec097f977792c48a24d1dab7b9e5720ea(docs: 归档生产部署任务 #296),路径:docs/task/296-admin部署商品级颜色映射版本到生产.md。工单保持打开,等待用户验收。

本地归档已提交并推送:`4d56236ec097f977792c48a24d1dab7b9e5720ea`(`docs: 归档生产部署任务 #296`),路径:`docs/task/296-admin部署商品级颜色映射版本到生产.md`。工单保持打开,等待用户验收。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/cmautobuy#296