docs: 归档任务 #128

This commit is contained in:
chengma
2026-08-11 08:52:55 +08:00
parent 9c670995ae
commit faf7a5c83a
@@ -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)