Files
cmautobuy/docs/task/128-admin重新打包部署最新版本.md
T

69 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)