Admin:重新打包并增量部署最新版本到生产服务器 #128

Closed
opened 2026-08-11 08:42:02 +08:00 by ila · 2 comments
Owner

基本信息

  • 类型:部署 / 发布
  • 父级大工单:#76
  • 所属 MVP / 版本:#77
  • 阶段:生产增量发布
  • 状态:待验收
  • 依赖:#127 已实现并验收;现网 buy.833729.com、systemd、Nginx、MySQL 8.4 正常

要解决什么

线上 Admin 当前发布版本早于最新代码,尚未包含近期已验收的 Admin 功能和 MySQL v6 任务创建人迁移。需要从当前已提交代码重新构建 Linux amd64 产物,安全发布到 185.216.248.75,并验证公网服务和数据库迁移。

做什么 / 不做什么

  • 做:发布前执行 Go 1.23.0 build/test/vet;只读检查现网版本、服务、磁盘、当前链接和 MySQL schema 版本;备份生产 autobuy;构建并校验 Linux amd64 二进制;建立新发布目录和配置、数据符号链接;原子切换服务二进制链接;重启 Admin;核对 MySQL v6、systemd、监听端口、公网 HTTPS 与近期日志。
  • 做:保留旧发布目录和部署前数据库备份。应用回退只能使用兼容 schema v6 的构建。
  • 不做:不改 Nginx 域名、证书、Client、cmhub、MySQL 账号密码和业务数据;不执行采购、下单或付款;不把配置或凭据打包、输出或提交。

怎么做

  1. 确认工作树中 Admin 相关文件已提交,记录发布提交和旧二进制链接目标。
  2. Go 1.23.0 执行 go test ./... -count=1、go vet ./...、go build ./...。
  3. 只读检查服务器服务、磁盘、端口和生产 schema version,执行生产数据库备份。
  4. GOOS=linux GOARCH=amd64 CGO_ENABLED=0 构建 Admin,计算 SHA-256,上传到新 release 目录;配置和 data 使用稳定目录的符号链接。
  5. 服务器校验摘要和权限,原子切换 /opt/cmautobuy/cmautobuy-admin,重启服务。
  6. 验证服务 active/enabled、只监听 127.0.0.1:18080、schema v6、HTTPS 登录页、当前进程错误日志和同机依赖服务状态。

验收标准

  • 发布产物来自当前已提交 Admin 代码,Go 1.23.0 build/test/vet 通过。
  • 生产数据库发布前有可恢复备份,业务数据未被清空或重建。
  • 新 release 摘要与本地一致,真实配置未复制进发布包。
  • 服务二进制链接指向新 release,旧 release 和部署前数据库备份均保留。
  • MySQL schema_migrations 最新版本为 v6,tasks.created_by_user_id、外键和索引自检通过。
  • Admin active/enabled 且只监听 127.0.0.1:18080。
  • https://buy.833729.com/login 正常,当前进程启动后无迁移、自检、fatal 或 panic 错误。
  • Nginx、MySQL 和 cmhub 服务无回归。

怎么验证

本地在 admin/ 执行 Go 1.23.0 全量验证;服务器执行 systemd、进程路径、端口、SHA-256、数据库 information_schema、HTTP/HTTPS 和当前进程日志检查。禁止使用生产库运行测试清理。

风险和回退

  • 数据库迁移属于生产变更:部署前备份位于 /opt/cmautobuy/backups/autobuy-before-9c67099-20260811T084419.sql.gz。
  • 实施中确认旧发布 3600d0c 只支持到 schema v5,不能在当前 v6 数据库上启动;原“旧代码会忽略新增列”的判断不成立。应用回退必须使用兼容 v6 的构建,数据库级回退使用部署前备份。
  • 不删除失败发布和旧发布,保留诊断证据。

实施记录

  • 代码基线:9c67099;Linux amd64 产物 SHA256:d2abfa824acea53ee0d572446d5c014f97926db291e1767026f82c87bb5100ca。
  • 发布目录:/opt/cmautobuy/releases/9c67099。
  • 首次切换因新发布目录缺少 data 软链接而失败并自动回切;补齐后再次启动。
  • 再次启动发现生产库已���录 v6,却缺少 fk_tasks_created_by。确认列、复合索引正确且孤立创建人数量为 0 后补齐外键,未修改业务数据。
  • 最终服务 active/running,实际进程指向新 release;公网根路径返回 303 并跳转登录页,登录页返回 200。
  • 本地归档:docs/task/128-admin重新打包部署最新版本.md,提交 faf7a5c。
## 基本信息 - 类型:部署 / 发布 - 父级大工单:#76 - 所属 MVP / 版本:#77 - 阶段:生产增量发布 - 状态:待验收 - 依赖:#127 已实现并验收;现网 `buy.833729.com`、systemd、Nginx、MySQL 8.4 正常 ## 要解决什么 线上 Admin 当前发布版本早于最新代码,尚未包含近期已验收的 Admin 功能和 MySQL v6 任务创建人迁移。需要从当前已提交代码重新构建 Linux amd64 产物,安全发布到 185.216.248.75,并验证公网服务和数据库迁移。 ## 做什么 / 不做什么 - 做:发布前执行 Go 1.23.0 build/test/vet;只读检查现网版本、服务、磁盘、当前链接和 MySQL schema 版本;备份生产 `autobuy`;构建并校验 Linux amd64 二进制;建立新发布目录和配置、数据符号链接;原子切换服务二进制链接;重启 Admin;核对 MySQL v6、systemd、监听端口、公网 HTTPS 与近期日志。 - 做:保留旧发布目录和部署前数据库备份。应用回退只能使用兼容 schema v6 的构建。 - 不做:不改 Nginx 域名、证书、Client、cmhub、MySQL 账号密码和业务数据;不执行采购、下单或付款;不把配置或凭据打包、输出或提交。 ## 怎么做 1. 确认工作树中 Admin 相关文件已提交,记录发布提交和旧二进制链接目标。 2. Go 1.23.0 执行 `go test ./... -count=1`、`go vet ./...`、`go build ./...`。 3. 只读检查服务器服务、磁盘、端口和生产 schema version,执行生产数据库备份。 4. `GOOS=linux GOARCH=amd64 CGO_ENABLED=0` 构建 Admin,计算 SHA-256,上传到新 release 目录;配置和 data 使用稳定目录的符号链接。 5. 服务器校验摘要和权限,原子切换 `/opt/cmautobuy/cmautobuy-admin`,重启服务。 6. 验证服务 active/enabled、只监听 `127.0.0.1:18080`、schema v6、HTTPS 登录页、当前进程错误日志和同机依赖服务状态。 ## 验收标准 - [x] 发布产物来自当前已提交 Admin 代码,Go 1.23.0 build/test/vet 通过。 - [x] 生产数据库发布前有可恢复备份,业务数据未被清空或重建。 - [x] 新 release 摘要与本地一致,真实配置未复制进发布包。 - [x] 服务二进制链接指向新 release,旧 release 和部署前数据库备份均保留。 - [x] MySQL schema_migrations 最新版本为 v6,`tasks.created_by_user_id`、外键和索引自检通过。 - [x] Admin active/enabled 且只监听 `127.0.0.1:18080`。 - [x] `https://buy.833729.com/login` 正常,当前进程启动后无迁移、自检、fatal 或 panic 错误。 - [x] Nginx、MySQL 和 cmhub 服务无回归。 ## 怎么验证 本地在 `admin/` 执行 Go 1.23.0 全量验证;服务器执行 systemd、进程路径、端口、SHA-256、数据库 `information_schema`、HTTP/HTTPS 和当前进程日志检查。禁止使用生产库运行测试清理。 ## 风险和回退 - 数据库迁移属于生产变更:部署前备份位于 `/opt/cmautobuy/backups/autobuy-before-9c67099-20260811T084419.sql.gz`。 - 实施中确认旧发布 `3600d0c` 只支持到 schema v5,不能在当前 v6 数据库上启动;原“旧代码会忽略新增列”的判断不成立。应用回退必须使用兼容 v6 的构建,数据库级回退使用部署前备份。 - 不删除失败发布和旧发布,保留诊断证据。 ## 实施记录 - 代码基线:`9c67099`;Linux amd64 产物 SHA256:`d2abfa824acea53ee0d572446d5c014f97926db291e1767026f82c87bb5100ca`。 - 发布目录:`/opt/cmautobuy/releases/9c67099`。 - 首次切换因新发布目录缺少 `data` 软链接而失败并自动回切;补齐后再次启动。 - 再次启动发现生产库已���录 v6,却缺少 `fk_tasks_created_by`。确认列、复合索引正确且孤立创建人数量为 0 后补齐外键,未修改业务数据。 - 最终服务 active/running,实际进程指向新 release;公网根路径返回 303 并跳转登录页,登录页返回 200。 - 本地归档:`docs/task/128-admin重新打包部署最新版本.md`,提交 `faf7a5c`。
Author
Owner

部署已完成并进入待验收。新版本已恢复上线,schema v6 缺失的任务创建人外键已按既有迁移定义补齐;完整故障恢复、验证结果、回退限制和归档提交见更新后的工单正文。归档提交:faf7a5c。

部署已完成并进入待验收。新版本已恢复上线,schema v6 缺失的任务创建人外键已按既有迁移定义补齐;完整故障恢复、验证结果、回退限制和归档提交见更新后的工单正文。归档提交:faf7a5c。
Author
Owner

用户已于 2026-08-11 明确验收通过。

  • 本地归档状态已更新为“已完成,用户验收通过”
  • 验收记录提交:6386d76
  • 本工单按项目流程关闭
用户已于 2026-08-11 明确验收通过。 - 本地归档状态已更新为“已完成,用户验收通过” - 验收记录提交:`6386d76` - 本工单按项目流程关闭
ila closed this issue 2026-08-11 11:00:38 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#128