diff --git a/docs/task/241-admin部署最新版本17c2d45.md b/docs/task/241-admin部署最新版本17c2d45.md new file mode 100644 index 0000000..2dad8ad --- /dev/null +++ b/docs/task/241-admin部署最新版本17c2d45.md @@ -0,0 +1,98 @@ +# 241 Admin:打包部署最新版本 17c2d45 到生产服务器 + +- 类型:部署 +- 父级大工单:#14 +- 所属 MVP / 版本:#15 / Admin 生产部署 +- 状态:已完成,待用户验收 +- 日期:2026-08-15 +- Gitea 工单: + +## 背景与目标 + +生产 Admin 原来运行 `0208dc6`,生产数据库已经由本地最新代码升级到 schema v24,但线上 +尚未包含档口入库码完整闭环以及 #240 多件入库码聚合修复。本任务把固定提交 `17c2d45` +打包部署到 `185.216.248.75`,继续通过 `https://buy.833729.com` 提供服务,同时准备同样 +支持 schema v24 的 `5d72141` 作为快速回退版本。 + +## 最终方案 + +- 在 Windows 系统临时目录建立目标 `17c2d45` 和回退 `5d72141` 的 detached worktree, + 与主工作区未提交的 Client 文件完全隔离。 +- 两个版本先以 Windows 原生目标执行固定 Go 1.23.0 全量测试和 vet,再仅对正式构建设置 + `GOOS=linux`、`GOARCH=amd64`、`CGO_ENABLED=0`,生成去除本地路径和调试符号的静态二进制。 +- 发布前两次核对运行中的 SYB 同步、AI 匹配和档口入库码 `applying` 均为 0,schema 为 v24。 +- 使用现有生产业务账号生成 `--no-tablespaces` 单事务逻辑备份,权限设为 `0600`,完成 + gzip、建表段和 SHA-256 校验;没有输出数据库密码。 +- 上传目标和回退二进制,核对本地、上传暂存和最终 release 哈希;两个 release 只保存 + 二进制并复用稳定 `config.yaml`、`data` 软链接。AI 密钥继续位于 release 外的专用文件。 +- 停止 systemd 后原子切换稳定二进制链接。目标启动或本机登录页检查失败时,脚本会切换 + 到 `5d72141` 并重启;本次目标正常启动,没有触发回退。 +- 部署过程未修改配置、密钥和数据库业务数据,未触发同步、匹配、回写、采集、采购、下单或付款。 + +首次本地构建编排把 `GOOS=linux` 提前设置到了 `go test`,Windows 无法执行生成的 Linux +测试二进制,因此报 `%1 is not a valid Win32 application`。该结果未上传、未接触服务器; +工单记录后已修正环境变量顺序并重新完整执行,代码测试和构建均通过。部署后综合检查脚本 +最后一个临时文件计数命令受 PowerShell CRLF 影响,使旧版 Linux `wc` 收到异常选项;此前 +所有关键检查均已通过,随后用独立命令确认上传暂存文件为 0。 + +## 改了哪些 + +- `/opt/cmautobuy/releases/17c2d45/`:新增并启用目标 Admin release。 +- `/opt/cmautobuy/releases/5d72141/`:新增 schema v24 兼容快速回退 release。 +- `/opt/cmautobuy/cmautobuy-admin`:从 `0208dc6` 原子切换到 `17c2d45`。 +- `/opt/cmautobuy/backups/autobuy-before-241-20260815T064227Z-notablespaces.sql.gz`:新增部署前生产备份。 +- `docs/task/241-admin部署最新版本17c2d45.md`:新增本次部署归档。 + +原 `0208dc6` release 继续保留。本地 detached worktree 已移除;两个已校验的 Linux 发布 +二进制暂时保留在系统临时目录 `cmautobuy-deploy-241/artifacts`,不在仓库中,也不包含配置或数据。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 目标和回退只来自固定提交,Go 1.23.0 测试、vet、Linux 构建通过 | 通过 | +| 切换前 SYB、AI 和档口入库码回写运行数均为 0 | 通过(两次核对) | +| 数据库备份权限、gzip、表段和哈希校验通过 | 通过:`0600`、31 个建表段 | +| 本地、上传和最终 release 二进制 SHA-256 一致 | 通过 | +| 当前 release 为 `17c2d45`,回退及原 release 保留 | 通过 | +| systemd、监听、schema 和启动日志正常 | 通过:active/enabled、`127.0.0.1:18080`、v24 | +| 本机和公网 HTTP/HTTPS、Nginx 和静态资源正常 | 通过 | +| 新二进制包含 #240 聚合反馈标识 | 通过:`同业务键合并` 命中 1 次 | +| 配置、AI 密钥和档口入库码现有数据保持 | 通过:稳定链接正常、密钥 `0600`、记录仍为 48 条 | + +发布物与运行状态: + +- 目标二进制:27,951,256 字节,SHA-256 + `bb3118e6055857f1f9aabf95381a8082a20d1c89d733a013853778b4eab443b8`。 +- 回退二进制:27,943,064 字节,SHA-256 + `ed034673a98b62d859124ffa66991fb94e6133d499885c9a12a9f39db823f664`。 +- 数据库备份:4,687,575 字节,SHA-256 + `fc18c62ad4e6eddf8dc46e4e9c7b0da55bf31615fbcf8af8ec2ab45ce3557972`。 +- 部署后进程 PID 为 26848;日志显示数据库就绪并监听 `127.0.0.1:18080`。 +- 本机根路径 303、登录页 200;公网根路径 303、登录页 200、`app.js` 200。 +- 部署后 schema v24,运行中的 SYB、AI、档口入库码回写均为 0,档口入库码记录仍为 48 条。 +- AI 密钥路径仍由进程环境提供,密钥文件属主为服务账号且权限为 `0600`;未读取或输出内容。 + +## 测试 + +- 执行的命令: + - 两个隔离 worktree 分别执行 `GOTOOLCHAIN=go1.23.0 go test ./... -count=1` 和 `go vet ./...` + - 两个版本分别执行 `GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags='-s -w'` + - 生产运行态 SQL、`mysqldump --no-tablespaces --single-transaction`、`gzip -t`、`sha256sum` + - `readlink`、`file`、`stat`、`systemctl`、`ss`、`nginx -t`、`journalctl`、本机和公网 `curl` + - 二进制 UTF-8 字符串检查以及配置、数据、AI 密钥路径和权限检查 +- 结果:修正首次构建编排后,目标和回退的全量测试、vet、静态构建全部通过;生产备份、 + 哈希、切换和全部健康检查通过,未触发自动回退。 +- **没验证到的部分**:未使用生产账号登录后人工导入 2026-08-15 Excel、匹配或回写真实 + 顺运宝商品;未执行真实同步、AI 匹配、采集、采购或 Client 下单;未实际触发回退,只验证 + 回退 release、哈希和自动回退路径。没有连接独立 MySQL 8.4 `_test` 库执行并发导入。 + +## 遗留问题 + +顺运宝是否原样保存逗号连接的多个入库码,仍需用户在生产页面选择测试订单执行一次真实回写 +后验收。若远端拒绝或改写该值,现有写后复读会把记录置为“需核对”,不会自动重试。 + +## 相关提交 + +- `17c2d45`:本次生产目标代码基线。 +- `5d72141`:本次 schema v24 兼容快速回退代码基线。