Files
cmautobuy/docs/task/83-config-yaml-mysql配置.md
T

3.1 KiB

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

背景与目标

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 公网端口。

相关提交

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