diff --git a/docs/task/301-admin部署顺运宝分页超时重试版本到生产.md b/docs/task/301-admin部署顺运宝分页超时重试版本到生产.md new file mode 100644 index 0000000..81004b7 --- /dev/null +++ b/docs/task/301-admin部署顺运宝分页超时重试版本到生产.md @@ -0,0 +1,89 @@ +# 301 Admin:部署顺运宝只读分页超时重试版本到生产 + +- 类型:部署 +- 父级大工单:#14 +- 所属 MVP / 版本:#15 / 当前生产版本 +- 状态:已完成,待用户验收 +- 日期:2026-08-24 +- Gitea 工单:https://git.ilapage.cn/OPC/cmautobuy/issues/301 + +## 背景与目标 + +生产原来运行 `96d9e30`,还没有 #300 为顺运宝只读分页请求增加的同页有限重试和 +60 秒单次 HTTP 超时。本任务将包含 #300 的固定提交 `f7c2ce3` 发布到生产,不修改 +数据库结构、生产配置、密钥或业务数据。 + +## 最终方案 + +- 从固定提交 `f7c2ce375614cd6494a5043d0c65f968856a293c` 导出完整 Git 归档,未带入 + 当前工作区未提交的 Client 文件、本地配置、环境文件或密钥。 +- 使用 Go 1.23.0 完成 test、build 和 vet,再以 Linux amd64、`CGO_ENABLED=0`、 + `-trimpath -ldflags="-s -w"` 生成静态发布物。二进制大小为 28,328,088 字节, + 本地、上传、release 和生产 SHA-256 均为 + `37e29be31c8615b6fc9fa1bf370e66ccba8cf45cf1bb3e2f4dd8acc676fea7bc`。 +- 切换前确认 schema 为 v30,顺运宝同步、商品目录导入、AI 批量匹配和档口入库码 + 后台活动任务均为 0。 +- 使用 `mysqldump --no-defaults --no-tablespaces --single-transaction` 创建 gzip + 逻辑备份,并验证 gzip、0600 权限、文件大小、SHA-256 和 34 个建表段。 +- 发布到 `/opt/cmautobuy/releases/f7c2ce3/`,其中 `config.yaml` 和 `data` 分别链接 + 到稳定 `/opt/cmautobuy/config.yaml` 与 `/opt/cmautobuy/data`,未复制或替换配置、 + 数据目录和密钥环境。 +- 在空闲端口 18083 以生产账号、配置和环境变量完成启动预检;根路径、登录页和顺运宝 + 受保护页面分别返回 303、200、303,日志没有启动、迁移或 panic 错误。首次预检命令已 + 完成上述检查,但 PowerShell 经标准输入发送脚本时给最后一条 `tail` 命令附带回车, + 使包装命令返回非零;预检进程由 trap 正常停止,确认端口释放后单独读取同一日志完成 + 复核,线上 18080 服务未受影响。 +- 原子切换稳定二进制链接并重启 systemd。切换脚本中的首次 journal 时间范围使用了该 + 服务器旧版 systemd 不接受的 ISO 写法;切换后的服务、进程、HTTP、schema 和活动任务 + 检查均已通过,随后立即改用 `5 minutes ago` 重新执行日志检查,结果无 fatal、panic、 + 数据库迁移或 schema 自检错误。 +- 上一 release `96d9e30` 保留,可直接执行二进制回退。本版本没有数据库迁移,schema + 始终保持 v30;没有主动触发真实顺运宝同步或其他业务写入。 + +## 改了哪些 + +- `/opt/cmautobuy/releases/f7c2ce3/cmautobuy-admin`:新增并启用生产二进制,权限 + 0750,属主 `cmautobuy:cmautobuy`。 +- `/opt/cmautobuy/releases/f7c2ce3/config.yaml`、`data`:分别链接到稳定配置文件和 + 数据目录。 +- `/opt/cmautobuy/cmautobuy-admin`:稳定链接从 `96d9e30` 原子切换到 `f7c2ce3`。 +- `/opt/cmautobuy/backups/autobuy-before-301-20260824T094856Z-notablespaces.sql.gz`: + 部署前逻辑备份,83,499,964 字节、权限 0600、34 个建表段,SHA-256 为 + `6c01455c9cb2731c0e242339a8964f885ded8c7e8b47a4ddc0068831cadd481f`。 +- 生产 MySQL:未执行迁移,`schema_migrations` 保持 v30,业务数据未主动改动。 +- `docs/task/301-admin部署顺运宝分页超时重试版本到生产.md`:记录本次部署结果。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 发布物仅来自固定提交 `f7c2ce3`,未包含本地未提交文件或凭据 | 通过 | +| Go 1.23.0 完整 test、build、vet 通过 | 通过 | +| 发布前生产 schema v30,四类后台活动任务均为 0 | 通过 | +| MySQL 备份通过 gzip、权限、大小和 34 个建表段检查 | 通过 | +| 新 release 在独立端口 18083 预检通过 | 通过 | +| systemd active/enabled,稳定链接和进程均指向 `f7c2ce3` | 通过 | +| Nginx、本机与公网 HTTP 状态符合预期 | 通过 | +| 发布后 schema v30、四类后台活动任务仍为 0,近期日志无关键错误 | 通过 | +| 上一 release `96d9e30` 保留,可执行二进制回退 | 通过 | +| 未触发同步、AI 调用、采集、采购、下单或付款 | 通过 | + +## 测试 + +- 执行的命令:在固定提交的完整隔离源码 `admin/` 下以 Go 1.23.0 执行 + `go test ./... -count=1`、`go build ./...`、`go vet ./...`,再以 + `GOOS=linux GOARCH=amd64 CGO_ENABLED=0` 构建发布物;服务器执行 SHA-256、 + `mysqldump`、`gzip -t`、schema 与活动任务查询、18083 独立端口预检、`systemctl`、 + `ss`、`nginx -t` 和近期日志检查;本机执行公网 HTTPS 检查。 +- 结果:生产稳定链接和实际进程均指向 `f7c2ce3`;schema 为 v30;systemd + active/enabled;本机与公网根路径、登录页和顺运宝受保护页面分别为 303、200、303; + 发布前后四类后台活动任务均为 0;近期日志没有 fatal、panic、数据库迁移失败或 + schema 自检失败。 +- **没验证到的部分**:没有主动执行生产顺运宝同步,因此未用真实第 45 页慢请求验证 + 60 秒超时和三次同页重试;未使用生产账号登录后做页面视觉验收;未实际执行二进制 + 回退或数据库备份恢复。 + +## 相关提交 + +- `439639c` fix: 增加顺运宝只读分页有限重试 (#300) +- `f7c2ce3` docs: 归档任务 #300(本次固定发布基线)