docs: 归档任务 #83

This commit is contained in:
chengma
2026-08-10 09:24:41 +08:00
parent 04a777dc8e
commit dee9f34035
+71
View File
@@ -0,0 +1,71 @@
# 83 Admin:允许从 config.yaml 读取 MySQL 8 配置
- 类型:需求
- 父级大工单:#76
- 所属 MVP / 版本:#77 / 线上 MySQL 8 部署
- 状态:已完成
- 日期:2026-08-10
- Gitea 工单:<http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/83>
## 背景与目标
Admin 运行时原来只读取 `CMAUTOBUY_DB_*` 环境变量,本地使用
`run_admin.bat` 前必须手工设置五个变量。项目负责人确认本机 MySQL 密码可以写入
被 Git 忽略的 `admin/config.yaml`,目标是让本地配置直接生效,同时保留线上环境变量
部署方式。
## 最终方案
- `config.yaml` 新增 `database:`,包含 host、port、name、user、password。
- Admin 主程序和 SQLite → MySQL 迁移命令读取 YAML 数据库配置。
- 非空的 `CMAUTOBUY_DB_*` 环境变量按字段覆盖 YAML;线上 systemd 无需改变。
- 没有 `config.yaml` 时,只要环境变量完整仍可启动。
- 数据库配置的字符串表示继续隐藏密码,错误信息只列配置项名称。
- 真实 `admin/config.yaml` 继续由 `.gitignore` 排除;示例和文档明确说明明文风险。
与建单方案一致,没有修改数据库结构、Client API 或 MySQL 公网监听策略。
## 改了哪些
- `admin/config/config.go`:增加 YAML 数据库结构、文件读取和环境变量覆盖。
- `admin/config/config_test.go`:覆盖纯 YAML、按字段覆盖和纯环境变量兼容。
- `admin/main.go`:主程序改用合并后的数据库配置。
- `admin/cmd/migrate-sqlite-to-mysql/main.go`:迁移命令支持同一配置入口。
- `admin/config.example.yaml`:增加完整 `database:` 示例及安全说明。
- `admin/AGENTS.md`:记录本机 YAML 与线上环境文件的边界。
- `docs/admin/00-getting-started.md`:更新本地启动和 MySQL 配置方法。
- `docs/admin/06-quality-security.md`:增加本机明文配置保护规则。
- `docs/admin/09-sqlite迁移到mysql.md`:同步迁移命令的配置来源。
## 验收结果
| 验收标准 | 结果 |
|---|---|
| 未设置数据库环境变量时可读取完整 `database:` YAML | 通过 |
| 环境变量按字段覆盖 YAML,纯环境变量启动保持兼容 | 通过 |
| 示例包含五个 MySQL 字段和明文风险说明 | 通过 |
| 配置字符串和错误不泄露明文密码 | 通过 |
| 真实 `admin/config.yaml` 保持 Git 忽略 | 通过 |
| Go 1.23.0 静态检查、构建和全部测试通过 | 通过 |
## 测试
- 执行的命令:
```powershell
cd D:\chengma\cmautobuy\admin
$env:GOTOOLCHAIN="go1.23.0"
go vet ./...
go build ./...
go test ./... -count=1
Remove-Item Env:GOTOOLCHAIN
```
- 结果:全部通过;`admin/config`、`repository`、`service`、`syb` 等测试包均为 `ok`。
- **没验证到的部分**:本机执行策略阻止自动后台启动 SSH 隧道,因此未完成
`run_admin.bat` 连接线上 MySQL 的页面冒烟;线上 schema 初始化、数据迁移和服务启动
继续在部署工单 #81 验证。未开放 MySQL 公网端口。
## 相关提交
- `04a777d` feat: 支持从 config.yaml 读取 MySQL 配置 (#83)