From dee9f34035b28e26ad2e30db6f44689da3745104 Mon Sep 17 00:00:00 2001 From: chengma Date: Mon, 10 Aug 2026 09:24:41 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=BD=92=E6=A1=A3=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?#83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/task/83-config-yaml-mysql配置.md | 71 +++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 docs/task/83-config-yaml-mysql配置.md diff --git a/docs/task/83-config-yaml-mysql配置.md b/docs/task/83-config-yaml-mysql配置.md new file mode 100644 index 0000000..a4ee26e --- /dev/null +++ b/docs/task/83-config-yaml-mysql配置.md @@ -0,0 +1,71 @@ +# 83 Admin:允许从 config.yaml 读取 MySQL 8 配置 + +- 类型:需求 +- 父级大工单:#76 +- 所属 MVP / 版本:#77 / 线上 MySQL 8 部署 +- 状态:已完成 +- 日期:2026-08-10 +- Gitea 工单: + +## 背景与目标 + +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)