Admin:部署档口入库码后台回写版本到生产服务器 #247

Open
opened 2026-08-15 17:26:23 +08:00 by ila · 2 comments
Owner

基本信息

  • 类型:部署
  • 父级大工单:#14
  • 所属 MVP / 版本:#15 / Admin 生产部署
  • 阶段:档口入库码后台回写生产发布
  • 状态:待验收

要解决什么

把包含 #245、#246 的固定提交 7736ab7 构建为 Linux amd64 发布物,部署到 185.216.248.75,通过 https://buy.833729.com 提供服务,并确认生产 MySQL 已存在的 schema v25 与目标二进制一致。

部署预检确认:生产数据库已经在 2026-08-15T08:53:04Z 记录 v25,新增字段、索引和约束均已存在,但当时仍运行只支持 v24 的旧二进制 17c2d45。本次部署同时消除应用与数据库版本不一致的风险。

做什么 / 不做什么

  • 做:
    • 从固定提交 7736ab7 的隔离 worktree 构建,不包含主工作区未提交文件。
    • 使用固定 Go 1.23.0 执行 vet、build、test 和 Linux amd64 静态构建。
    • 切换前检查 SYB 同步、AI 匹配、档口入库码回写均无运行中任务。
    • 完整备份生产 autobuy 数据库,校验权限、gzip、建表段和 SHA-256。
    • 安装不可变 release,复用 release 外的稳定配置、数据和密钥文件。
    • 在仅监听 127.0.0.1:18081 的隔离端口使用生产环境启动目标二进制,确认现有 v25 自检通过后再切换。
    • 核对 schema、约束、字段、索引、服务、监听、Nginx、公网页面和最新静态资源。
  • 不做:
    • 不修改生产凭据、Nginx 业务配置或 Client。
    • 不触发顺运宝同步、档口入库码匹配/回写、AI 匹配、采集、采购、下单或付款。
    • 不使用生产数据库代替自动化测试库执行清理型测试。

已确认的实现方案

  1. 只读检查当前 release、schema、运行中任务和磁盘空间。
  2. 在隔离 detached worktree 对 7736ab7 完成固定 Go 1.23.0 验证和 Linux amd64 构建,记录 SHA-256。
  3. 再次检查运行中任务为 0,使用现有生产业务账号执行 mysqldump --no-tablespaces --single-transaction,压缩并校验。
  4. 上传暂存文件,核对本地、暂存和最终 release 哈希;安装到 /opt/cmautobuy/releases/7736ab7/ 并建立稳定配置与数据链接。
  5. 在隔离端口完成 v25 启动预检后,停止 systemd,原子切换 /opt/cmautobuy/cmautobuy-admin,启动并检查就绪日志。
  6. 核对 schema v25 的 apply_batch_id、apply_queued_at、idx_inner_code_apply_batch 和含 queued 的状态约束。
  7. 核对 systemd、端口、Nginx、本机和公网登录页及静态资源。

回退边界:生产库在切换前已是 v25,本次备份也是 v25;旧 17c2d45 只支持 v24,不能单独回切。发生故障时优先修复前进;只有确认没有需要保留的新业务写入且具备匹配的 v24 备份时,才能同步恢复数据库并切回旧 release。

验收标准

  • 发布物只来自固定提交 7736ab7,固定 Go 1.23.0 验证通过。
  • 切换前运行中的 SYB、AI 和档口入库码任务均为 0。
  • 生产数据库备份权限、gzip、建表段和 SHA-256 校验通过。
  • 本地、上传暂存和最终 release 的 SHA-256 一致。
  • systemd active/enabled,Admin 只监听 127.0.0.1:18080。
  • schema 为 v25,新增字段、索引和状态约束自检通过。
  • 本机与公网根路径、登录页和静态资源正常。
  • 配置、密钥和业务数据未被非预期修改,未触发任何真实业务动作。
  • 部署结果、未验证项和回退边界写入工单及本地归档。

验证方式

在隔离 worktree 的 admin/ 执行:

$env:GOTOOLCHAIN='go1.23.0'
go vet ./...
go build ./...
go test ./... -count=1

服务器执行只读状态查询、备份校验、独立端口启动预检、systemctl、ss、nginx -t、journalctl、MySQL schema 查询以及本机/公网 curl。

风险和回退

  • 生产库在本次切换前已经是 v25,旧 v24 二进制会因版本过高拒绝启动;保留原 release 仅用于取证,当前生产故障必须优先修复前进。
  • 后台真实写入不能在切换时中断;因此三次检查运行中任务为 0 后才停止服务。
  • 本次备份为 v25,不能用于让旧 v24 二进制重新运行。只有确认没有需保留的新业务数据并具备匹配的 v24 备份时,才允许同步恢复数据库与旧 release;否则禁止覆盖恢复。
## 基本信息 - 类型:部署 - 父级大工单:#14 - 所属 MVP / 版本:#15 / Admin 生产部署 - 阶段:档口入库码后台回写生产发布 - 状态:待验收 ## 要解决什么 把包含 #245、#246 的固定提交 `7736ab7` 构建为 Linux amd64 发布物,部署到 `185.216.248.75`,通过 `https://buy.833729.com` 提供服务,并确认生产 MySQL 已存在的 schema v25 与目标二进制一致。 部署预检确认:生产数据库已经在 `2026-08-15T08:53:04Z` 记录 v25,新增字段、索引和约束均已存在,但当时仍运行只支持 v24 的旧二进制 `17c2d45`。本次部署同时消除应用与数据库版本不一致的风险。 ## 做什么 / 不做什么 - 做: - 从固定提交 `7736ab7` 的隔离 worktree 构建,不包含主工作区未提交文件。 - 使用固定 Go 1.23.0 执行 vet、build、test 和 Linux amd64 静态构建。 - 切换前检查 SYB 同步、AI 匹配、档口入库码回写均无运行中任务。 - 完整备份生产 `autobuy` 数据库,校验权限、gzip、建表段和 SHA-256。 - 安装不可变 release,复用 release 外的稳定配置、数据和密钥文件。 - 在仅监听 `127.0.0.1:18081` 的隔离端口使用生产环境启动目标二进制,确认现有 v25 自检通过后再切换。 - 核对 schema、约束、字段、索引、服务、监听、Nginx、公网页面和最新静态资源。 - 不做: - 不修改生产凭据、Nginx 业务配置或 Client。 - 不触发顺运宝同步、档口入库码匹配/回写、AI 匹配、采集、采购、下单或付款。 - 不使用生产数据库代替自动化测试库执行清理型测试。 ## 已确认的实现方案 1. 只读检查当前 release、schema、运行中任务和磁盘空间。 2. 在隔离 detached worktree 对 `7736ab7` 完成固定 Go 1.23.0 验证和 Linux amd64 构建,记录 SHA-256。 3. 再次检查运行中任务为 0,使用现有生产业务账号执行 `mysqldump --no-tablespaces --single-transaction`,压缩并校验。 4. 上传暂存文件,核对本地、暂存和最终 release 哈希;安装到 `/opt/cmautobuy/releases/7736ab7/` 并建立稳定配置与数据链接。 5. 在隔离端口完成 v25 启动预检后,停止 systemd,原子切换 `/opt/cmautobuy/cmautobuy-admin`,启动并检查就绪日志。 6. 核对 schema v25 的 `apply_batch_id`、`apply_queued_at`、`idx_inner_code_apply_batch` 和含 `queued` 的状态约束。 7. 核对 systemd、端口、Nginx、本机和公网登录页及静态资源。 回退边界:生产库在切换前已是 v25,本次备份也是 v25;旧 `17c2d45` 只支持 v24,不能单独回切。发生故障时优先修复前进;只有确认没有需要保留的新业务写入且具备匹配的 v24 备份时,才能同步恢复数据库并切回旧 release。 ## 验收标准 - [x] 发布物只来自固定提交 `7736ab7`,固定 Go 1.23.0 验证通过。 - [x] 切换前运行中的 SYB、AI 和档口入库码任务均为 0。 - [x] 生产数据库备份权限、gzip、建表段和 SHA-256 校验通过。 - [x] 本地、上传暂存和最终 release 的 SHA-256 一致。 - [x] systemd active/enabled,Admin 只监听 `127.0.0.1:18080`。 - [x] schema 为 v25,新增字段、索引和状态约束自检通过。 - [x] 本机与公网根路径、登录页和静态资源正常。 - [x] 配置、密钥和业务数据未被非预期修改,未触发任何真实业务动作。 - [x] 部署结果、未验证项和回退边界写入工单及本地归档。 ## 验证方式 在隔离 worktree 的 `admin/` 执行: ```powershell $env:GOTOOLCHAIN='go1.23.0' go vet ./... go build ./... go test ./... -count=1 ``` 服务器执行只读状态查询、备份校验、独立端口启动预检、`systemctl`、`ss`、`nginx -t`、`journalctl`、MySQL schema 查询以及本机/公网 `curl`。 ## 风险和回退 - 生产库在本次切换前已经是 v25,旧 v24 二进制会因版本过高拒绝启动;保留原 release 仅用于取证,当前生产故障必须优先修复前进。 - 后台真实写入不能在切换时中断;因此三次检查运行中任务为 0 后才停止服务。 - 本次备份为 v25,不能用于让旧 v24 二进制重新运行。只有确认没有需保留的新业务数据并具备匹配的 v24 备份时,才允许同步恢复数据库与旧 release;否则禁止覆盖恢复。
Author
Owner

生产预检发现(2026-08-15 17:28 UTC+8)

  • 当前公网服务仍运行 release 17c2d45,systemd active/enabled,监听 127.0.0.1:18080。
  • 生产 MySQL 服务端为 8.4.8。
  • 数据库已经在 2026-08-15T08:53:04Z 记录 schema v25;实际已有 apply_batch_id、apply_queued_at、idx_inner_code_apply_batch,状态约束包含 queued,确认就是 #246 的迁移。
  • 当前 SYB 同步、AI 批次和档口入库码 applying 均为 0,最近两小时没有迁移失败、fatal 或 panic。
  • 这表示 v25 在本次线上二进制切换前已经由另一 Admin 进程执行。当前旧进程仍在线,但 17c2d45 一旦重启将因只支持 v24 而拒绝启动。

实施方案调整

数据库不再重复执行“v24→v25”动作,只由新二进制启动自检现有 v25。部署前仍重新生成 v25 完整备份。

旧 release 不再是可直接启动的应用回退目标。先在不暴露公网的 127.0.0.1:18081 对目标二进制执行生产环境启动预检,确认可连接现有 v25 后才切换;切换后若异常只修复前进,不用旧 v24 release 覆盖启动,也不覆盖恢复已有新数据。

该变化是生产现状导致的安全收敛,不改变目标提交和功能范围。

## 生产预检发现(2026-08-15 17:28 UTC+8) - 当前公网服务仍运行 release `17c2d45`,systemd active/enabled,监听 `127.0.0.1:18080`。 - 生产 MySQL 服务端为 8.4.8。 - 数据库已经在 `2026-08-15T08:53:04Z` 记录 schema v25;实际已有 `apply_batch_id`、`apply_queued_at`、`idx_inner_code_apply_batch`,状态约束包含 `queued`,确认就是 #246 的迁移。 - 当前 SYB 同步、AI 批次和档口入库码 `applying` 均为 0,最近两小时没有迁移失败、fatal 或 panic。 - 这表示 v25 在本次线上二进制切换前已经由另一 Admin 进程执行。当前旧进程仍在线,但 `17c2d45` 一旦重启将因只支持 v24 而拒绝启动。 ## 实施方案调整 数据库不再重复执行“v24→v25”动作,只由新二进制启动自检现有 v25。部署前仍重新生成 v25 完整备份。 旧 release 不再是可直接启动的应用回退目标。先在不暴露公网的 `127.0.0.1:18081` 对目标二进制执行生产环境启动预检,确认可连接现有 v25 后才切换;切换后若异常只修复前进,不用旧 v24 release 覆盖启动,也不覆盖恢复已有新数据。 该变化是生产现状导致的安全收敛,不改变目标提交和功能范围。
Author
Owner

实施完成,待用户验收

  • 生产 release 已切换到固定代码提交 7736ab7;发布物 SHA-256:a6bc35265c57942a5ffc54e7a547ca129b14f439ce1bf494c4d06eb10162cef1。
  • 固定 Go 1.23.0 的 go vet ./...、go build ./...、go test ./... -count=1 全部通过。
  • 生产库在部署前已经是 schema v25;目标二进制先在 127.0.0.1:18081 完成生产环境启动自检,再原子切换到 127.0.0.1:18080。
  • systemd active/enabled,Nginx 配置检查通过;本机登录页和公网 https://buy.833729.com/login 均返回 200,最新静态资源返回 200。
  • 部署前备份:/opt/cmautobuy/backups/autobuy-before-247-20260815T093211Z-v25-notablespaces.sql.gz,权限 0600,gzip 和建表段校验通过,SHA-256:1f0b763a4c50cffd0bfec64ea76026c6da9922f23751632a2e8870ab7532a891。
  • 部署前后均未触发顺运宝同步、档口入库码匹配/回写、AI 匹配、采集、采购、下单或付款。
  • 归档:docs/task/247-admin部署档口入库码后台回写版本.md
  • 归档提交:e55e2b59caa39382bf261d1ee697b2fe4b37e1f6

回退说明:原 release 17c2d45 仅支持 schema v24,不能在当前 v25 上单独重启;生产故障应优先修复前进。只有确认没有需要保留的新业务数据并具备匹配的 v24 备份时,才允许数据库与旧 release 同步恢复。

## 实施完成,待用户验收 - 生产 release 已切换到固定代码提交 `7736ab7`;发布物 SHA-256:`a6bc35265c57942a5ffc54e7a547ca129b14f439ce1bf494c4d06eb10162cef1`。 - 固定 Go 1.23.0 的 `go vet ./...`、`go build ./...`、`go test ./... -count=1` 全部通过。 - 生产库在部署前已经是 schema v25;目标二进制先在 `127.0.0.1:18081` 完成生产环境启动自检,再原子切换到 `127.0.0.1:18080`。 - systemd active/enabled,Nginx 配置检查通过;本机登录页和公网 `https://buy.833729.com/login` 均返回 200,最新静态资源返回 200。 - 部署前备份:`/opt/cmautobuy/backups/autobuy-before-247-20260815T093211Z-v25-notablespaces.sql.gz`,权限 `0600`,gzip 和建表段校验通过,SHA-256:`1f0b763a4c50cffd0bfec64ea76026c6da9922f23751632a2e8870ab7532a891`。 - 部署前后均未触发顺运宝同步、档口入库码匹配/回写、AI 匹配、采集、采购、下单或付款。 - 归档:`docs/task/247-admin部署档口入库码后台回写版本.md` - 归档提交:`e55e2b59caa39382bf261d1ee697b2fe4b37e1f6` 回退说明:原 release `17c2d45` 仅支持 schema v24,不能在当前 v25 上单独重启;生产故障应优先修复前进。只有确认没有需要保留的新业务数据并具备匹配的 v24 备份时,才允许数据库与旧 release 同步恢复。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#247