diff --git a/docs/task/218-admin部署最新版本5bf6764.md b/docs/task/218-admin部署最新版本5bf6764.md new file mode 100644 index 0000000..c531600 --- /dev/null +++ b/docs/task/218-admin部署最新版本5bf6764.md @@ -0,0 +1,80 @@ +# 218 Admin:打包部署最新版本 5bf6764 到生产服务器 + +- 工单号:#218 +- 标题:Admin:打包部署最新版本 5bf6764 到生产服务器 +- 类型:部署 +- 父级大工单:#14 +- 所属 MVP / 版本:#15 / Admin MVP 后续优化 +- 状态:已完成 +- 日期:2026-08-13 +- Gitea 工单: + +## 背景与目标 + +把包含顺运宝多订单号精确搜索及此前已提交 Admin 变更的最新基线 `5bf6764` 打包并 +部署到生产服务器,通过 `https://buy.833729.com` 提供服务。发布需要保留生产配置、 +数据、发布前备份及与当前数据库结构兼容的快速回退能力。 + +## 最终方案 + +- 主工作区有其他未提交文件,因此分别从固定提交 `5bf6764` 和 `2ebe6bf` 建立 detached + 隔离工作树。两者均使用 Go 1.23.0 完成测试、静态检查和 Linux amd64 静态构建。 +- 生产预检确认当前进程仍运行 `e8c5293`,但数据库已经是 schema v19。`e8c5293` + 只支持到 v14,重启后无法作为回退版本,因此额外上传 #217 之前、兼容 v19 的 + `2ebe6bf` 作为快速回退 release。 +- 发布前连续三次确认没有 `running` 状态的顺运宝同步。使用生产业务账号完成单事务 + 逻辑备份,权限设为 600,并通过 gzip 和 SHA-256 校验。 +- 上传目标及回退二进制,核对本地与远端 SHA-256;两个 release 都复用稳定的 + `config.yaml` 和 `data` 软链接。 +- 切换前再次确认没有运行中同步,停止 systemd 后原子切换稳定执行链接。目标版本启动 + 或本机登录页探测失败时,部署脚本会自动切到 `2ebe6bf` 并重启。 +- 生产 schema 在部署前已是 v19,因此本次启动没有新增数据库迁移。 + +## 改了哪些 + +- 本地忽略构建产物: + - `admin/.deploy/cmautobuy-admin-5bf6764` + - `admin/.deploy/cmautobuy-admin-2ebe6bf` +- 生产目标发布:`/opt/cmautobuy/releases/5bf6764/`。 +- 生产快速回退发布:`/opt/cmautobuy/releases/2ebe6bf/`。 +- 稳定执行链接:`/opt/cmautobuy/cmautobuy-admin` 已指向目标 release。 +- 生产备份:`/opt/cmautobuy/backups/autobuy-before-218-20260813T070906Z.sql.gz`。 +- 本归档文档:`docs/task/218-admin部署最新版本5bf6764.md`。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 构建只来自固定提交,不包含主工作区未提交文件 | 通过:两个 detached 隔离工作树 | +| Go 1.23.0 测试、vet 和 Linux amd64 构建 | 通过 | +| 发布前没有运行中的顺运宝同步 | 通过:切换前共四次检查均为 0 | +| 数据库备份权限 600,gzip 和 SHA-256 校验通过 | 通过:4,489,066 字节 | +| 目标二进制本地与远端 SHA-256 一致 | 通过:`49ba578d74c46084f913b7d2eefc5d4aa7ff897eb53466bf6026ecf50f2ae07f` | +| schema v19 兼容的快速回退版本就绪 | 通过:`2ebe6bf`,SHA-256 `8d32d01f2d20e4e8cfeebacc5a027e07720b8582dacd1534cc1cb449725bee17` | +| systemd、监听、schema 和启动日志正常 | 通过:active/enabled,`127.0.0.1:18080`,schema v19,错误计数 0 | +| 本机和公网健康检查通过 | 通过:本机根路径 303、登录页 200,公网根路径 303、登录页 200 | +| 公网静态资源来自最新版本 | 通过:CSS 包含 `syb-order-search-input` 标记 | +| 未输出凭据,未触发同步、采集、采购或下单 | 通过 | + +## 测试 + +- 执行的命令: + - 两个隔离工作树分别使用 Go 1.23.0 执行 `go test ./... -count=1`、`go vet ./...`。 + - 使用 `GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w"` 构建。 + - 生产执行同步状态查询、`mysqldump`、`gzip -t`、`sha256sum`、`systemctl`、 + `readlink`、`ss`、schema 查询、`journalctl` 及 HTTP/HTTPS 健康检查。 +- 结果:Admin 全部 Go 包通过;目标及回退二进制哈希一致;当前 release 为 `5bf6764`; + 服务 active/enabled,schema v19,最近启动日志错误计数为 0;公网登录页返回 200。 +- **没验证到的部分**:未使用生产账号登录后人工粘贴 Excel 多订单号并检查筛选结果; + 未执行备份恢复演练;未发起真实顺运宝同步、采集、采购或 Android 下单。 + +## 遗留问题 + +原生产 release `e8c5293` 与当前 schema v19 不兼容,不能直接重启回退。应用快速回退必须 +使用本次准备的 `2ebe6bf`。只有需要连数据库结构一起恢复时,才停机恢复本次备份并切回 +`e8c5293`;该操作会覆盖备份时间点之后的生产变更。 + +## 相关提交 + +- `5bf6764`:本次生产目标代码基线。 +- `2ebe6bf`:兼容 schema v19 的快速回退代码基线。