Admin:部署线上 MySQL 8 并完成生产切换 #81

Closed
opened 2026-08-10 01:09:16 +08:00 by ila · 7 comments
Owner

基本信息

  • 类型:需求
  • 父级大工单:#76
  • 所属 MVP / 版本:#77
  • 阶段:4 上线切换

要解决什么

完成代码和迁移工具后,需要在 185.216.248.75 的 MySQL 8.4.8 实例建立安全生产库、部署 Admin、迁移数据并验证,最终移除正常运行路径中的 SQLite。

做什么 / 不做什么

  • 做:只读审计 MySQL 8 实例;创建独立数据库和最小权限账号;配置备份/自启动;部署 Admin;冻结旧库写入、迁移、核对、切换和回退演练;稳定后移除 SQLite 运行路径。
  • 不做:不开放 3307 公网端口;不把密码写入仓库、日志、工单或归档;不启动真实下单。

怎么做

  • 确认 8.4.8 数据目录持久化、服务自启动、磁盘空间、时区和备份恢复路径。
  • 生成随机数据库密码,只写服务器权限受控的环境文件;Admin 通过 127.0.0.1:3307 连接。
  • 部署前备份 SQLite 并记录校验摘要,停止旧 Admin 写入后执行最终迁移。
  • 启动新 Admin,回归网页登录、五个模块、顺运宝同步和 Client 四接�����。
  • 并发验证任务领取与结果提交;真实下单开关保持关闭。
  • 完成一次受控回退演练;稳定验收后删除 Admin 正常启动对 SQLite 的选择,但保留迁移命令和备份。

预计修改:部署脚本/说明、Admin 启动配置、基线文档;服务器 systemd/环境文件和 MySQL 库/账号。

验收标准

  • MySQL 8.4.8 仍仅监听 127.0.0.1:3307,生产库使用独立最小权限账号。
  • Admin 作为受控服务自启动并只连接线上 MySQL 8。
  • SQLite 最终备份可恢复,迁移与关键业务核对全部通过。
  • 五个模块、登录权限、顺运宝同步和 Client 四接口回归通过。
  • 并发领取不重复,迟到结果仍被接受。
  • 真实下单开关保持关闭,未执行真实订单或付款。
  • 完成停止新服务并恢复旧 SQLite 版的回退演练。
  • 稳定验收后 Admin 运行时不再依赖 SQLite。

怎么验证

服务器只读状态检查、数据库备份/恢复演练、迁移核对、HTTP/API 回归和并发测试。涉及真实生产切换前在工单记录冻结窗口。

风险和回退

这是生产外部变更。切换前必须完成备份和冻结;任一核对失败立即停止新服务,恢复旧 Admin 与原 SQLite,不做反向覆盖。

  • #83 Admin:允许从 config.yaml 读取 MySQL 8 配置

  • #86 Admin:支持校验 CA 的 MySQL 公网 TLS 连接

## 基本信息 - 类型:需求 - 父级大工单:#76 - 所属 MVP / 版本:#77 - 阶段:4 上线切换 ## 要解决什么 完成代码和迁移工具后,需要在 185.216.248.75 的 MySQL 8.4.8 实例建立安全生产库、部署 Admin、迁移数据并验证,最终移除正常运行路径中的 SQLite。 ## 做什么 / 不做什么 - 做:只读审计 MySQL 8 实例;创建独立数据库和最小权限账号;配置备份/自启动;部署 Admin;冻结旧库写入、迁移、核对、切换和回退演练;稳定后移除 SQLite 运行路径。 - 不做:不开放 3307 公网端口;不把密码写入仓库、日志、工单或归档;不启动真实下单。 ## 怎么做 - 确认 8.4.8 数据目录持久化、服务自启动、磁盘空间、时区和备份恢复路径。 - 生成随机数据库密码,只写服务器权限受控的环境文件;Admin 通过 127.0.0.1:3307 连接。 - 部署前备份 SQLite 并记录校验摘要,停止旧 Admin 写入后执行最终迁移。 - 启动新 Admin,回归网页登录、五个模块、顺运宝同步和 Client 四接�����。 - 并发验证任务领取与结果提交;真实下单开关保持关闭。 - 完成一次受控回退演练;稳定验收后删除 Admin 正常启动对 SQLite 的选择,但保留迁移命令和备份。 预计修改:部署脚本/说明、Admin 启动配置、基线文档;服务器 systemd/环境文件和 MySQL 库/账号。 ## 验收标准 - [x] MySQL 8.4.8 仍仅监听 127.0.0.1:3307,生产库使用独立最小权限账号。 - [x] Admin 作为受控服务自启动并只连接线上 MySQL 8。 - [x] SQLite 最终备份可恢复,迁移与关键业务核对全部通过。 - [x] 五个模块、登录权限、顺运宝同步和 Client 四接口回归通过。 - [x] 并发领取不重复,迟到结果仍被接受。 - [x] 真实下单开关保持关闭,未执行真实订单或付款。 - [x] 完成停止新服务并恢复旧 SQLite 版的回退演练。 - [x] 稳定验收后 Admin 运行时不再依赖 SQLite。 ## 怎么验证 服务器只读状态检查、数据库备份/恢复演练、迁移核对、HTTP/API 回归和并发测试。涉及真实生产切换前在工单记录冻结窗口。 ## 风险和回退 这是生产外部变更。切换前必须完成备份和冻结;任一核对失败立即停止新服务,恢复旧 Admin 与原 SQLite,不做反向覆盖。 - [x] #83 Admin:允许从 config.yaml 读取 MySQL 8 配置 - [x] #86 Admin:支持校验 CA 的 MySQL 公网 TLS 连接
Author
Owner

进度(2026-08-10):

  • 线上只读审计:MySQL 8.4.8/mysql84 正常且 enabled,只监听 127.0.0.1:3307;磁盘 50G、可用约 7.9G。
  • root socket 登录不可用;现有 cmhub 账号无权创建独立数据库和最小权限账号。未重启 MySQL、未重置密码、未修改 cmhub。
  • 已提交反向代理 HTTPS Cookie 支持、systemd 与 Nginx 模板:8cc8574。
  • Linux amd64 二进制已预部署到 /opt/cmautobuy/releases/8cc8574,SHA-256 校验一致;服务保持 disabled/inactive,未连接数据库。
  • 待外部条件:提供 MySQL 8 管理凭据(或安排影响 cmhub 的维护窗口并明确授权重置 root),并指定 Admin 使用的 HTTPS 域名/证书。
进度(2026-08-10): - 线上只读审计:MySQL 8.4.8/mysql84 正常且 enabled,只监听 127.0.0.1:3307;磁盘 50G、可用约 7.9G。 - root socket 登录不可用;现有 cmhub 账号无权创建独立数据库和最小权限账号。未重启 MySQL、未重置密码、未修改 cmhub。 - 已提交反向代理 HTTPS Cookie 支持、systemd 与 Nginx 模板:8cc8574。 - Linux amd64 二进制已预部署到 /opt/cmautobuy/releases/8cc8574,SHA-256 校验一致;服务保持 disabled/inactive,未连接数据库。 - 待外部条件:提供 MySQL 8 管理凭据(或安排影响 cmhub 的维护窗口并明确授权重置 root),并指定 Admin 使用的 HTTPS 域名/证书。
Author
Owner

2026-08-10 ?? MySQL ????

  • MySQL 8.4.8 ??????????????? /root/mysql84-recovery-backup-20260810_090235(? 962 MB)?
  • ? MySQL root ????? cmhub ???????????????systemd???????????????????;????????????
  • root ???????????? /root/.mysql84-root.cnf,?? 600???? root:root;????????
  • ???????? autobuy(utf8mb4 / utf8mb4_0900_ai_ci)?
  • ??? buy@127.0.0.1,???? autobuy.*;??????????
  • Admin ???????? /etc/cmautobuy/admin.env,?? 600???? root:root;????????? admin/config.yaml?
  • MySQL ??? active;cmhub ???????? cmhub ????
  • ??????? cmhub ?????:Web HTTP 200?Generate HTTP 200?66/66 ?? worker ???0 failed?

???:?? /etc/cmautobuy/admin.env ?? Admin schema ???? SQLite ??????,???? Admin ????? HTTPS ???

## 2026-08-10 ?? MySQL ???? - MySQL 8.4.8 ??????????????? `/root/mysql84-recovery-backup-20260810_090235`(? 962 MB)? - ? MySQL root ????? cmhub ???????????????systemd???????????????????;???????????? - root ???????????? `/root/.mysql84-root.cnf`,?? `600`???? `root:root`;???????? - ???????? `autobuy`(`utf8mb4` / `utf8mb4_0900_ai_ci`)? - ??? `buy@127.0.0.1`,???? `autobuy.*`;?????????? - Admin ???????? `/etc/cmautobuy/admin.env`,?? `600`???? `root:root`;????????? `admin/config.yaml`? - MySQL ??? `active`;cmhub ???????? `cmhub` ???? - ??????? cmhub ?????:Web HTTP 200?Generate HTTP 200?66/66 ?? worker ???0 failed? ???:?? `/etc/cmautobuy/admin.env` ?? Admin schema ???? SQLite ??????,???? Admin ????? HTTPS ???
Author
Owner

????(2026-08-10)

?????????? buy.833729.com,???????? f0715ee(???? 663c5ee)??????????:?? Linux amd64 ?????? SQLite ??? MySQL??????????????systemd ??? 127.0.0.1:18080?Nginx ????????????

?????????????:

  • buy.833729.com ???? DNS A ??,?? HTTPS ???????????????;????????????????
  • autobuy ?????????????(????????????),?????????????????????????? SQLite ???,?????????
  • ???? CentOS 7 ?? systemd,?? unit ? ProtectSystem=strict ? ReadWritePaths ????;??????????????????????????

????:???;????,?? Admin ???????

## ????(2026-08-10) ?????????? `buy.833729.com`,???????? `f0715ee`(???? `663c5ee`)??????????:?? Linux amd64 ?????? SQLite ??? MySQL??????????????systemd ??? `127.0.0.1:18080`?Nginx ???????????? ?????????????: - `buy.833729.com` ???? DNS A ??,?? HTTPS ???????????????;???????????????? - `autobuy` ?????????????(????????????),?????????????????????????? SQLite ???,????????? - ???? CentOS 7 ?? systemd,?? unit ? `ProtectSystem=strict` ? `ReadWritePaths` ????;?????????????????????????? ????:???;????,?? Admin ???????
Author
Owner

部署完成,转待验收(2026-08-10)

https://buy.833729.com 已正式上线:

  • HTTP 301 跳转 HTTPS;HTTPS 根路径 303 跳转登录,/login 返回 200。
  • Let's Encrypt ECDSA 证书域名校验通过,有效期至 2026-11-08;HSTS 与 Secure Cookie 通过。
  • certbot renew --dry-run --no-random-sleep-on-renew 成功;现有每日续期任务会自动续期并 reload Nginx。
  • Admin、MySQL 8.4、Nginx、cmhub-web、cmhub-generate 均 active;Admin enabled 且仅监听 127.0.0.1:18080;66 个 cmhub 图片 worker 正常。
  • 迁移与增量合并后:2 个用户、5,195 个蝦皮商品、6,092 个蝦皮 SKU、4 个 PDD 商品、5,334 条顺运宝货运单、2 个任务;运行中同步为 0。
  • Admin 自 10:24 正式启动后未发现 panic、fatal、error 或 failed 日志。

归档:docs/task/81-Admin部署到线上服务器.md

归档提交:45032cc

状态转为待验收;按流程暂不关闭工单,等待用户验收确认。

## 部署完成,转待验收(2026-08-10) `https://buy.833729.com` 已正式上线: - HTTP 301 跳转 HTTPS;HTTPS 根路径 303 跳转登录,`/login` 返回 200。 - Let's Encrypt ECDSA 证书域名校验通过,有效期至 2026-11-08;HSTS 与 Secure Cookie 通过。 - `certbot renew --dry-run --no-random-sleep-on-renew` 成功;现有每日续期任务会自动续期并 reload Nginx。 - Admin、MySQL 8.4、Nginx、cmhub-web、cmhub-generate 均 active;Admin enabled 且仅监听 `127.0.0.1:18080`;66 个 cmhub 图片 worker 正常。 - 迁移与增量合并后:2 个用户、5,195 个蝦皮商品、6,092 个蝦皮 SKU、4 个 PDD 商品、5,334 条顺运宝货运单、2 个任务;运行中同步为 0。 - Admin 自 10:24 正式启动后未发现 panic、fatal、error 或 failed 日志。 归档:`docs/task/81-Admin部署到线上服务器.md` 归档提交:`45032cc` 状态转为待验收;按流程暂不关闭工单,等待用户验收确认。
Author
Owner

验收缺陷:顺运宝配置路径不一致

线上验收发现 /syb 提示缺少 /opt/cmautobuy/releases/f0715ee/config.yaml。根因是 config.ConfigPath() 使用 os.Executable() 的真实发布目录,而部署把受限配置放在稳定路径 /opt/cmautobuy/config.yaml;数据库能由环境变量启动,但顺运宝配置必须读取 YAML。

按已确认建议修复:在当前发布目录建立 config.yaml -> /opt/cmautobuy/config.yaml 符号链接。真实配置继续保持 cmautobuy:cmautobuy、600,不复制或输出凭据。验证运行用户可读、YAML 含有效 syb 配置、Admin/Nginx/MySQL 状态和近期日志。此项属于 #81 验收修复,不改数据库结构或接口。

## 验收缺陷:顺运宝配置路径不一致 线上验收发现 `/syb` 提示缺少 `/opt/cmautobuy/releases/f0715ee/config.yaml`。根因是 `config.ConfigPath()` 使用 `os.Executable()` 的真实发布目录,而部署把受限配置放在稳定路径 `/opt/cmautobuy/config.yaml`;数据库能由环境变量启动,但顺运宝配置必须读取 YAML。 按已确认建议修复:在当前发布目录建立 `config.yaml -> /opt/cmautobuy/config.yaml` 符号链接。真实配置继续保持 `cmautobuy:cmautobuy`、`600`,不复制或输出凭据。验证运行用户可读、YAML 含有效 `syb` 配置、Admin/Nginx/MySQL 状态和近期日志。此项属于 #81 验收修复,不改数据库结构或接口。
Author
Owner

顺运宝配置路径验收缺陷已修复

已建立:

/opt/cmautobuy/releases/f0715ee/config.yaml -> /opt/cmautobuy/config.yaml

验证结果:

  • 符号链接最终目标正确;真实配置仍为 cmautobuy:cmautobuy、权限 600。
  • systemd 的 cmautobuy 运行账号可读取该路径。
  • 不输出配置值的检查确认 syb.base_url、syb.username、syb.password 均存在且非空。
  • Admin、Nginx、MySQL 8.4 均为 active;修复过程未重启服务、未修改数据库。
  • 公网未认证访问 /syb 返回预期 303 登录跳转;近 5 分钟 Admin 错误日志为 0。

归档已补充,提交:d017062。#81 继续保持待用户验收。

## 顺运宝配置路径验收缺陷已修复 已建立: `/opt/cmautobuy/releases/f0715ee/config.yaml -> /opt/cmautobuy/config.yaml` 验证结果: - 符号链接最终目标正确;真实配置仍为 `cmautobuy:cmautobuy`、权限 `600`。 - systemd 的 `cmautobuy` 运行账号可读取该路径。 - 不输出配置值的检查确认 `syb.base_url`、`syb.username`、`syb.password` 均存在且非空。 - Admin、Nginx、MySQL 8.4 均为 active;修复过程未重启服务、未修改数据库。 - 公网未认证访问 `/syb` 返回预期 303 登录跳转;近 5 分钟 Admin 错误日志为 0。 归档已补充,提交:`d017062`。#81 继续保持待用户验收。
Author
Owner

用户已明确验收通过。验收清单已回填,本工单关闭。

用户已明确验收通过。验收清单已回填,本工单关闭。
ila closed this issue 2026-08-10 23:23:11 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#81