Files
cmautobuy/docs/task/241-admin部署最新版本17c2d45.md
T
2026-08-15 14:46:44 +08:00

6.3 KiB
Raw Blame History

241 Admin:打包部署最新版本 17c2d45 到生产服务器

背景与目标

生产 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 兼容快速回退代码基线。