docs: 归档任务 #81

This commit is contained in:
chengma
2026-08-10 10:36:09 +08:00
parent a1ecaa28a7
commit 45032ccf11
@@ -0,0 +1,80 @@
# 81 Admin:部署到线上服务器
- 类型:需求
- 父级大工单:#76
- 所属 MVP / 版本:#77
- 状态:已完成
- 日期:2026-08-10
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/81
## 背景与目标
将 Admin 从 Windows 本地运行方式迁移到 `185.216.248.75`,使用同机 MySQL 8.4,
通过 `https://buy.833729.com` 提供服务,并保证历史 SQLite 数据、迁移窗口内新产生的
顺运宝数据及服务器上原有 cmhub 服务不受损。
## 最终方案
- 使用 Go 1.23.0 交叉编译 Linux amd64 单文件,按提交 `f0715ee` 建立只读发布目录,
由固定符号链接指向当前版本;持久数据目录独立于发布目录。
- systemd 使用专用 `cmautobuy` 用户运行,数据库凭据仅保存在 root-only 环境文件,
应用只监听 `127.0.0.1:18080`,并设置为开机自启和失败重启。
- 迁移前分别备份线上 MySQL 和本地 SQLite,并建立迁移前 MySQL 独立快照库。
先把 SQLite 的 15 张业务表迁入空的 MySQL `autobuy`,完成逐表数量和全列摘要核对,
再按更新时间合并迁移窗口内已同步的数据。
- 迁移窗口内的 1,098 条顺运宝数据与 SQLite 中的订单主键全部重合,因此最终订单数
仍为 5,334 条;保留较新的订单版本,不制造重复数据。进行中的同步记录改为
`interrupted`,避免上线后误判任务仍在运行。
- Nginx 将 `buy.833729.com` 反向代理到 Admin;HTTP 仅保留 ACME challenge 并将其他
请求 301 跳转到 HTTPS。HTTPS 使用 Let's Encrypt ECDSA 证书、TLS 1.2、HSTS 和常用
安全响应头,向应用传递可信的反向代理协议头。
- 复用服务器现有每日 Certbot 续期任务;模拟续期成功后才完成交付。
与原方案相比,目标 MySQL 在正式迁移前已由本地联调产生顺运宝数据,不能直接按空库
覆盖。实际实施增加“迁移前快照库 + SQLite 完整迁移 + 按更新时间合并增量”步骤,
以同时保留旧库完整数据和联调期间的新数据。
## 改了哪些
- 服务器 `/opt/cmautobuy/releases/f0715ee/`:部署 Admin 和一次性迁移工具。
- 服务器 `/etc/systemd/system/cmautobuy-admin.service`:增加 Admin 常驻服务及开机自启。
- 服务器 `/etc/cmautobuy/admin.env`、`/opt/cmautobuy/config.yaml`:配置线上 MySQL 和
顺运宝运行参数,文件权限均为 `600`,未写入仓库、日志或工单。
- 服务器 `/www/server/panel/vhost/nginx/buy.833729.com.conf`:增加 HTTP、HTTPS、
ACME challenge、反向代理和安全响应头。
- 线上 MySQL `autobuy`:迁入历史 SQLite 数据并合并迁移窗口内的较新顺运宝数据。
- `docs/task/81-Admin部署到线上服务器.md`:记录最终部署、迁移和验收结果。
## 验收结果
| 验收标准 | 结果 |
|---|---|
| Go 1.23.0 Linux 发布包在服务器校验一致并正常运行 | 通过 |
| SQLite 15 张业务表迁移后逐表数量与全列摘要一致 | 通过 |
| 迁移窗口内新增数据不丢失、不重复 | 通过 |
| Admin 仅监听服务器回环地址并由 systemd 管理 | 通过 |
| HTTP 自动跳转 HTTPS,登录页可通过域名访问 | 通过 |
| HTTPS 证书域名、HSTS 和 Secure Cookie 正确 | 通过 |
| Certbot 模拟续期成功且每日续期任务存在 | 通过 |
| MySQL、Nginx、cmhub 和 66 个图片 worker 无回归 | 通过 |
| 敏感配置未进入 Git、工单、归档或运行日志 | 通过 |
## 测试
- 执行的命令:Go 1.23.0 Linux amd64 交叉编译及 SHA-256 核对;
`migrate-sqlite-to-mysql --execute`、`--verify-only`;MySQL 逐表数量、主键重合和同步状态
查询;`systemctl is-active/is-enabled`;`ss -lnt`;`nginx -t`;公网 HTTP/HTTPS `curl`;
证书域名校验;`certbot renew --dry-run --no-random-sleep-on-renew`;cmhub 服务及 worker
状态检查。
- 结果:Admin、MySQL 8.4、Nginx、cmhub-web、cmhub-generate 均为 active;Admin 开机
自启且只监听 `127.0.0.1:18080`;HTTP 返回 301,HTTPS 根路径返回 303,登录页返回
200,`https://cm.833729.com/` 保持 200;66 个图片 worker 正常。线上保留 2 个用户、
5,195 个蝦皮商品、6,092 个蝦皮 SKU、4 个 PDD 商品、5,334 条顺运宝货运单和 2 个
任务,运行中同步为 0。证书有效期至 2026-11-08,模拟续期通过。
- **没验证到的部分**:未使用真实浏览器人工登录并逐页点击;服务端页面、重定向、
Cookie 安全属性、数据库数据和进程状态已通过 HTTP 与数据库检查验证。
## 相关提交
- `f0715ee` 增加 MySQL 公网 TLS CA 校验(本次线上发布代码版本)