feat: 支持从 config.yaml 读取 MySQL 配置 (#83)

This commit is contained in:
chengma
2026-08-10 09:24:04 +08:00
parent ad44c3ee86
commit 04a777dc8e
9 changed files with 222 additions and 35 deletions
+26 -6
View File
@@ -90,7 +90,7 @@ go run .
**这个命令是安全的**:Admin 只管理数据,不会连手机、不会下单。放心随便跑。
### 配置顺运宝账号(同步货运单需要,其余四个模块不需要)
### 配置 MySQL 和顺运宝账号
顺运宝数据页的「同步」需要读 `admin/config.yaml`。第一次用要自己建这个文件
(已在 `.gitignore` 里,不会被提交):
@@ -100,7 +100,13 @@ cd D:\chengma\cmautobuy\admin
copy config.example.yaml config.yaml
```
用编辑器打开 `config.yaml`,把 `username` / `password` 改成真实的顺运宝账号密码。
用编辑器打开 `config.yaml`:
- `database:` 填 MySQL 8 的地址、数据库名、账号和密码,Admin 启动必须使用;
- `syb:` 填顺运宝账号密码,只在同步货运单时使用。
两个密码都是明文,只允许保存在这份被 Git 忽略的本机文件里,不得提交、打包、
截图或粘贴到日志和工单。
`[必须]` 密码要加引号,纯数字密码不加引号会被 YAML 解析成整数,前导 0 也会丢:
@@ -159,18 +165,32 @@ syb:
## 6. 数据库在哪里、怎样配置
生产数据在 MySQL 8.4 中。Admin 从环境变量读取连接信息:
生产数据在 MySQL 8.4 中。Windows 本地运行可以直接在被 Git 忽略的
`admin/config.yaml` 中配置:
```yaml
database:
host: 127.0.0.1
port: "3307"
name: autobuy
user: buy
password: "从安全渠道取得"
```
连接线上 MySQL 时仍通过 SSH 隧道,把 `port` 改为隧道的本地端口;禁止开放线上
MySQL 公网端口。线上 systemd 部署继续使用环境变量:
```text
CMAUTOBUY_DB_HOST=127.0.0.1
CMAUTOBUY_DB_PORT=3307
CMAUTOBUY_DB_NAME=<独立数据库名>
CMAUTOBUY_DB_USER=<最小权限账号>
CMAUTOBUY_DB_PASSWORD=<只保存在服务器环境文件中的密码>
CMAUTOBUY_DB_PASSWORD=<从安全渠道取得>
```
密码不得写入 `config.yaml`、仓库、日志或工单。线上 MySQL 只监听本机,
本地开发通过 SSH 隧道连接独立的 `_test` 数据库。
环境变量按字段覆盖 `config.yaml`,所以现有线上部署方式不受影响。生产环境文件和
本地 `config.yaml` 都不得进入仓库、日志或工单;线上 MySQL 只监听本机,本地开发
通过 SSH 隧道连接独立的 `_test` 数据库。
程序旁边的 `data/` 只保留日志、上传文件和迁移前的 SQLite 只读备份:
+4
View File
@@ -165,6 +165,10 @@
`[必须]` **不得记录** token、密码、Cookie,也不要把完整请求体无脑打进日志。
`[必须]` 本机 `admin/config.yaml` 可以保存 MySQL 和顺运宝明文密码,但必须保持
Git 忽略且不得随程序打包、截图或粘贴到工单和日志;线上优先使用权限 `600` 的
环境文件,环境变量按字段覆盖 YAML。
## 7. 性能
规模很小(个位数操作员、集中部署),不要提前优化。但下面几条是基本功:
+2 -1
View File
@@ -7,7 +7,8 @@
- 源 `admin.db` 必须是 schema v8;工具使用操作系统只读模式和 SQLite `query_only` 打开。
- 目标必须是本程序刚建立且业务表为空的独立 MySQL 数据库;任何业务表非空都会拒绝执行。
- 不支持覆盖、合并、双写和重复导入。重新演练时新建另一个空测试库。
- 数据库密码只放环境变量,不要写入命令历史、仓库、日志或工单。
- 迁移命令优先使用环境变量传入数据库密码;Windows 本地也可读取被 Git 忽略的
`admin/config.yaml`。两种方式都不得把密码写入命令历史、仓库、日志或工单。
- 输出只包含表名和数量,不包含账号、Cookie、Session、订单号或商品明细。
## 2. 迁移前准备