3.1 KiB
3.1 KiB
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 静态检查、构建和全部测试通过 | 通过 |
测试
-
执行的命令:
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 公网端口。
相关提交
04a777dfeat: 支持从 config.yaml 读取 MySQL 配置 (#83)