diff --git a/docs/task/128-admin重新打包部署最新版本.md b/docs/task/128-admin重新打包部署最新版本.md new file mode 100644 index 0000000..0c7e362 --- /dev/null +++ b/docs/task/128-admin重新打包部署最新版本.md @@ -0,0 +1,68 @@ +# 128 Admin:重新打包并增量部署最新版本到生产服务器 + +- 类型:需求 +- 父级大工单:#76 +- 所属 MVP / 版本:#77 / 生产部署 +- 状态:已完成(待用户验收) +- 日期:2026-08-11 +- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/128 + +## 背景与目标 + +将 `main` 分支提交 `9c67099` 对应的最新 Admin 重新编译并增量部署到 +`buy.833729.com`,保留生产数据、顺运宝配置和可追溯的数据库备份。 + +## 最终方案 + +1. 使用 Go 1.23 完成测试、静态检查和 Linux amd64 构建;发布文件 SHA256 为 + `d2abfa824acea53ee0d572446d5c014f97926db291e1767026f82c87bb5100ca`。 +2. 部署前备份生产 `autobuy` 数据库,并验证 gzip 文件可读取;备份位于 + `/opt/cmautobuy/backups/autobuy-before-9c67099-20260811T084419.sql.gz`。 +3. 上传到独立发布目录 `/opt/cmautobuy/releases/9c67099`,复用稳定的 + `config.yaml` 和 `data` 目录软链接,再原子切换服务入口。 +4. 首次切换发现发布目录缺少 `data` 软链接,自动回切后补齐。再次启动发现生产库 + 已记录 schema v6,但缺少 v6 要求的 `fk_tasks_created_by` 外键。确认字段、索引均 + 正确且不存在孤立创建人数据后,补齐外键并重新启动。 +5. 原计划可直接回切旧版本 `3600d0c`,实际验证发现旧版本只支持到 schema v5, + 无法在 v6 数据库上启动。因此应用回退必须使用兼容 v6 的构建;数据库级回退使用 + 本次部署前备份。该差异已记录到工单。 + +## 改了哪些 + +- `/opt/cmautobuy/releases/9c67099/`:新增生产发布目录、Admin 二进制及稳定配置/数据软链接。 +- `/opt/cmautobuy/cmautobuy-admin`:切换到新版本二进制。 +- 生产 MySQL `tasks` 表:补齐 v6 已定义但线上缺失的 `fk_tasks_created_by` 外键;未改业务数据。 +- `docs/task/128-admin重新打包部署最新版本.md`:记录部署、故障恢复与验收结果。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| Go 1.23 测试、静态检查和构建通过 | 通过 | +| 部署前数据库备份完成且压缩包可读取 | 通过 | +| 服务器运行提交 `9c67099` 对应的新二进制 | 通过 | +| schema v6 字段、外键和复合索引符合代码自检 | 通过 | +| Admin 仅监听 `127.0.0.1:18080` | 通过 | +| `https://buy.833729.com/` 跳转登录页,登录页返回 HTTP 200 | 通过 | +| Admin、MySQL、Nginx 及同机相关服务保持 active | 通过 | +| 当前 Admin 进程启动后无迁移、自检、panic 或 fatal 错误 | 通过 | + +## 测试 + +- 执行的命令:`GOTOOLCHAIN=go1.23.0 go test ./... -count=1`、 + `GOTOOLCHAIN=go1.23.0 go vet ./...`、`GOTOOLCHAIN=go1.23.0 go build ./...`; + 服务器端执行 systemd 状态、进程路径、端口、MySQL `information_schema`、日志和 + HTTP 健康检查;本地通过 HTTPS 域名检查公网入口。 +- 结果:全部通过。服务进程稳定运行,`/` 返回 303 并跳转 `/login`,`/login` + 返回 200,当前进程日志显示“数据库已就绪”和“Admin 已启动”。 +- **没验证到的部分**:未使用生产账号登录后逐页执行人工业务回归;未执行数据库备份恢复演练。 + +## 遗留问题(选填) + +- 旧发布 `3600d0c` 不兼容 schema v6,不能作为当前数据库的应用回退版本。后续部署应 + 保留至少一个兼容当前 schema 的上一版构建。 + +## 相关提交 + +- `9c67099` 本次构建和部署的代码基线 +- `a9f22b9` 按创建人隔离采集采购任务(#127)