Admin:部署档口入库码自动替换版本到生产 #307

Open
opened 2026-08-26 14:39:39 +08:00 by ila · 0 comments
Owner

基本信息

  • 类型:部署
  • 父级大工单:#14
  • 所属 MVP / 版本:#224 / 档口入库码回写 MVP
  • 阶段:阶段 16:自动替换版本生产发布
  • 依赖:#306
  • 状态:待验收

要解决什么

生产当前运行提交 80a2167,仍显示 #304 的“替换当日已删除旧数据”复选框。把已经完成并推送的 #306 固定提交 a9fce78 打包部署到 185.216.248.75,使 https://buy.833729.com 使用自动安全替换逻辑。

做什么 / 不做什么

做什么

  • 只从固定 Git 提交 a9fce78 导出隔离源码并使用 Go 1.23.0 验证、构建 Linux amd64 二进制。
  • 发布前只读确认生产版本、schema 和后台任务空闲状态。
  • 发布前创建生产 MySQL 逻辑备份并验证 gzip、权限、大小和建表段。
  • 上传到独立 release 目录,复用稳定配置、数据目录和现有密钥环境。
  • 在独立端口预检后原子切换 systemd,异常时自动回退到上一 release。
  • 验证 systemd、监听、Nginx、公网 HTTPS、静态文件标识、schema 和后台任务状态。

不做什么

  • 不打包本地未提交文件、业务 Excel、配置、Cookie、密码或密钥。
  • 不执行数据库 schema 迁移,不主动导入、删除或替换生产业务数据。
  • 不触发顺运宝同步、AI 匹配、采集、采购、下单或付款。
  • 不关闭 #306;部署通过后仍等待用户进行登录态业务验收。

怎么做

  1. 从 a9fce78 创建隔离 Git 归档,固定 GOTOOLCHAIN=go1.23.0 执行全量 test、build、vet。
  2. 交叉编译 linux/amd64 静态二进制并记录 SHA-256。
  3. 通过 SSH 21638 只读检查生产当前 release、schema、活动后台任务和服务状态。
  4. 使用生产环境既有数据库凭据在服务器创建最小权限逻辑备份;备份文件设为 0600 并执行完整性检查。
  5. 上传二进制到 /opt/cmautobuy/releases/a9fce78/,只建立指向稳定配置与数据目录的符号链接。
  6. 先在 18083 独立端口启动预检,再次确认任务空闲后原子切换稳定链接并重启 systemd;失败立即回退。
  7. 验证本机 HTTP、公网 HTTPS、页面及静态资源、schema、任务状态和近期日志。
  8. 回填本工单,提交 docs/task/307-admin部署档口入库码自动替换版本到生产.md。

验收标准

  • 发布物只来自固定提交 a9fce78,不包含工作区未提交文件和凭据。
  • Go 1.23.0 全量 test、build、vet 通过。
  • Linux 二进制本地、上传、release 和生产 SHA-256 一致。
  • 发布前生产版本、schema 和后台任务状态已记录且允许安全切换。
  • 部署前数据库备份通过 gzip、0600、大小和建表段检查。
  • 新 release 在独立端口预检通过,无迁移、schema、panic 或 fatal 错误。
  • systemd active/enabled,稳定链接和进程指向 a9fce78。
  • Nginx、本机 HTTP 与公网 HTTPS 状态符合预期,近期日志无关键错误。
  • 公网页面不再包含 replace_unprocessed_snapshot 或专门替换确认逻辑,仍包含“导入中…”反馈。
  • 发布后 schema 和后台任务状态保持正常。
  • 上一 release 80a2167 保留并可执行二进制回退。
  • 未触发同步、AI、采集、采购、下单或付款。
  • 完成生产部署归档、提交和工单回填。

怎么验证

本地隔离源码的 admin/:

$env:GOTOOLCHAIN = "go1.23.0"
go test ./... -count=1
go build ./...
go vet ./...
$env:GOOS = "linux"
$env:GOARCH = "amd64"
$env:CGO_ENABLED = "0"
go build -trimpath -ldflags="-s -w" -o cmautobuy-admin .

服务器执行只读版本、SHA-256、备份、18083 预检、systemd、ss、nginx -t、日志、schema 和活动任务检查;开发机检查 https://buy.833729.com 及静态资源。

风险和回退

  • 风险:发布时仍有同步、AI、目录导入或档口入库码后台任务。控制:切换前后两次查询活动任务,非零即停止发布。
  • 风险:新二进制启动失败。控制:独立端口预检,原子切换脚本保存上一链接,失败自动恢复并重启。
  • 风险:生产数据异常。控制:本版本无 schema 迁移且不主动写业务数据;切换前创建并验证逻辑备份。
  • 回退:稳定链接切回 /opt/cmautobuy/releases/80a2167/cmautobuy-admin 并重启 cmautobuy-admin.service;保留新 release 便于诊断。

实施记录(2026-08-26)

  • 固定发布基线:a9fce78dff70dcc34d4585a5e32834d723e021db。
  • 首次隔离归档遗漏根目录 testdata/contracts,契约测试失败,失败产物未发布;补齐 testdata/ 后 Go 1.23.0 全量 test、build、vet 通过。
  • Linux amd64 二进制大小 28,348,568 字节,生产 SHA-256:59ce3aa5f04d12417fb3980780fd5a4f7089c4356c9fac9469bfcc49d6f38ab6。
  • 发布前生产运行 80a2167、schema v30,四类后台任务均为 0。
  • 部署前备份:/opt/cmautobuy/backups/autobuy-before-307-20260826T064733Z-notablespaces.sql.gz;84,029,035 字节、0600、34 个建表段,gzip 校验通过。
  • 18083 预检通过后已原子切换;稳定链接和实际进程均指向 /opt/cmautobuy/releases/a9fce78/cmautobuy-admin,systemd active/enabled。
  • Nginx 配置检查通过;公网根路径、登录页、档口入库码页、JavaScript、CSS 分别为 303、200、303、200、200。
  • 公网静态资源不再包含旧复选框、确认逻辑和样式标识,仍包含“导入中…”反馈。
  • 发布后 schema v30,四类后台任务仍为 0;未触发同步、AI、采集、采购、下单或付款。
  • 归档提交:1f3743c。
  • 本地归档:docs/task/307-admin部署档口入库码自动替换版本到生产.md。
  • 未验证:生产账号登录后的导入表单人工检查、生产 Excel 自动替换、真实回退和备份恢复。
## 基本信息 - 类型:部署 - 父级大工单:#14 - 所属 MVP / 版本:#224 / 档口入库码回写 MVP - 阶段:阶段 16:自动替换版本生产发布 - 依赖:#306 - 状态:待验收 ## 要解决什么 生产当前运行提交 `80a2167`,仍显示 #304 的“替换当日已删除旧数据”复选框。把已经完成并推送的 #306 固定提交 `a9fce78` 打包部署到 `185.216.248.75`,使 `https://buy.833729.com` 使用自动安全替换逻辑。 ## 做什么 / 不做什么 ### 做什么 - 只从固定 Git 提交 `a9fce78` 导出隔离源码并使用 Go 1.23.0 验证、构建 Linux amd64 二进制。 - 发布前只读确认生产版本、schema 和后台任务空闲状态。 - 发布前创建生产 MySQL 逻辑备份并验证 gzip、权限、大小和建表段。 - 上传到独立 release 目录,复用稳定配置、数据目录和现有密钥环境。 - 在独立端口预检后原子切换 systemd,异常时自动回退到上一 release。 - 验证 systemd、监听、Nginx、公网 HTTPS、静态文件标识、schema 和后台任务状态。 ### 不做什么 - 不打包本地未提交文件、业务 Excel、配置、Cookie、密码或密钥。 - 不执行数据库 schema 迁移,不主动导入、删除或替换生产业务数据。 - 不触发顺运宝同步、AI 匹配、采集、采购、下单或付款。 - 不关闭 #306;部署通过后仍等待用户进行登录态业务验收。 ## 怎么做 1. 从 `a9fce78` 创建隔离 Git 归档,固定 `GOTOOLCHAIN=go1.23.0` 执行全量 test、build、vet。 2. 交叉编译 `linux/amd64` 静态二进制并记录 SHA-256。 3. 通过 SSH 21638 只读检查生产当前 release、schema、活动后台任务和服务状态。 4. 使用生产环境既有数据库凭据在服务器创建最小权限逻辑备份;备份文件设为 0600 并执行完整性检查。 5. 上传二进制到 `/opt/cmautobuy/releases/a9fce78/`,只建立指向稳定配置与数据目录的符号链接。 6. 先在 18083 独立端口启动预检,再次确认任务空闲后原子切换稳定链接并重启 systemd;失败立即回退。 7. 验证本机 HTTP、公网 HTTPS、页面及静态资源、schema、任务状态和近期日志。 8. 回填本工单,提交 `docs/task/307-admin部署档口入库码自动替换版本到生产.md`。 ## 验收标准 - [x] 发布物只来自固定提交 `a9fce78`,不包含工作区未提交文件和凭据。 - [x] Go 1.23.0 全量 test、build、vet 通过。 - [x] Linux 二进制本地、上传、release 和生产 SHA-256 一致。 - [x] 发布前生产版本、schema 和后台任务状态已记录且允许安全切换。 - [x] 部署前数据库备份通过 gzip、0600、大小和建表段检查。 - [x] 新 release 在独立端口预检通过,无迁移、schema、panic 或 fatal 错误。 - [x] systemd active/enabled,稳定链接和进程指向 `a9fce78`。 - [x] Nginx、本机 HTTP 与公网 HTTPS 状态符合预期,近期日志无关键错误。 - [x] 公网页面不再包含 `replace_unprocessed_snapshot` 或专门替换确认逻辑,仍包含“导入中…”反馈。 - [x] 发布后 schema 和后台任务状态保持正常。 - [x] 上一 release `80a2167` 保留并可执行二进制回退。 - [x] 未触发同步、AI、采集、采购、下单或付款。 - [x] 完成生产部署归档、提交和工单回填。 ## 怎么验证 本地隔离源码的 `admin/`: ```powershell $env:GOTOOLCHAIN = "go1.23.0" go test ./... -count=1 go build ./... go vet ./... $env:GOOS = "linux" $env:GOARCH = "amd64" $env:CGO_ENABLED = "0" go build -trimpath -ldflags="-s -w" -o cmautobuy-admin . ``` 服务器执行只读版本、SHA-256、备份、18083 预检、systemd、`ss`、`nginx -t`、日志、schema 和活动任务检查;开发机检查 `https://buy.833729.com` 及静态资源。 ## 风险和回退 - 风险:发布时仍有同步、AI、目录导入或档口入库码后台任务。控制:切换前后两次查询活动任务,非零即停止发布。 - 风险:新二进制启动失败。控制:独立端口预检,原子切换脚本保存上一链接,失败自动恢复并重启。 - 风险:生产数据异常。控制:本版本无 schema 迁移且不主动写业务数据;切换前创建并验证逻辑备份。 - 回退:稳定链接切回 `/opt/cmautobuy/releases/80a2167/cmautobuy-admin` 并重启 `cmautobuy-admin.service`;保留新 release 便于诊断。 ## 实施记录(2026-08-26) - 固定发布基线:`a9fce78dff70dcc34d4585a5e32834d723e021db`。 - 首次隔离归档遗漏根目录 `testdata/contracts`,契约测试失败,失败产物未发布;补齐 `testdata/` 后 Go 1.23.0 全量 test、build、vet 通过。 - Linux amd64 二进制大小 28,348,568 字节,生产 SHA-256:`59ce3aa5f04d12417fb3980780fd5a4f7089c4356c9fac9469bfcc49d6f38ab6`。 - 发布前生产运行 `80a2167`、schema v30,四类后台任务均为 0。 - 部署前备份:`/opt/cmautobuy/backups/autobuy-before-307-20260826T064733Z-notablespaces.sql.gz`;84,029,035 字节、0600、34 个建表段,gzip 校验通过。 - 18083 预检通过后已原子切换;稳定链接和实际进程均指向 `/opt/cmautobuy/releases/a9fce78/cmautobuy-admin`,systemd active/enabled。 - Nginx 配置检查通过;公网根路径、登录页、档口入库码页、JavaScript、CSS 分别为 303、200、303、200、200。 - 公网静态资源不再包含旧复选框、确认逻辑和样式标识,仍包含“导入中…”反馈。 - 发布后 schema v30,四类后台任务仍为 0;未触发同步、AI、采集、采购、下单或付款。 - 归档提交:`1f3743c`。 - 本地归档:`docs/task/307-admin部署档口入库码自动替换版本到生产.md`。 - 未验证:生产账号登录后的导入表单人工检查、生产 Excel 自动替换、真实回退和备份恢复。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/cmautobuy#307