|
4 | 4 |
|
5 | 5 | ## 产品定位 |
6 | 6 |
|
7 | | -- **Go 单二进制**,内网轻量 MySQL 运维 Web:**执行 SQL**、表元数据、分页浏览、多连接(DSN)配置。 |
8 | | -- **`config.yaml`**:`secret_key`(网页登录 / 后续 API 放行)、`databases`(DSN)、`readonly` 等。 |
9 | | -- **前端**:MUI 取向的 Material 风,服务端模板 + 随包静态资源(无公网 CDN);当前 **`web/demo/`** 为定稿用静态 Demo,**`cmd/demo`** 提供登录与静态托管。 |
| 7 | +- **Go 单二进制**,内网轻量 MySQL 运维 Web:**执行 SQL**、表列表、表结构、分页浏览、多连接(DSN)与 **`/settings` 保存写回 `config.yaml`**。 |
| 8 | +- **`config.yaml`**:`secret_key`(`/login` 与会话 Cookie;亦可 **`X-MiniDBA-Secret`** / **`Authorization: Bearer`**)、`databases`(DSN)、`readonly`、`max_result_rows` 等。 |
| 9 | +- **前端**:`html/template` + [`web/static/css/theme.css`](web/static/css/theme.css);**`go:embed`** 打包 `web/templates` 与 `web/static`。历史目录 **`web/demo/`** 仅作可选参考,正式路由以主程序为准。 |
10 | 10 |
|
11 | | -## 仓库结构(预期演进) |
| 11 | +## 仓库结构 |
12 | 12 |
|
13 | 13 | ```text |
14 | | -main.go # 正式入口(当前占位) |
15 | | -cmd/demo/ # UI 预览:secret_key 登录 + 静态页 |
16 | | -internal/ # 正式开发:handler / service / dao / config(待建) |
17 | | -web/demo/ # 静态 Demo HTML |
18 | | -web/static/css/ # theme.css,可迁模板后复用 |
19 | | -docs/DESIGN.md # 设计规格 |
20 | | -config.example.yaml # 可提交的示例配置(复制为 config.yaml) |
| 14 | +main.go # 入口:-config 指定 yaml |
| 15 | +internal/ |
| 16 | + auth/ # HMAC 会话、Header 放行 |
| 17 | + csrf/ # Double-submit Cookie |
| 18 | + config/ # 加载/校验/原子保存 |
| 19 | + dbmgr/ # 连接池与热重载 |
| 20 | + server/ # 路由与页面 |
| 21 | + sqlrun/ # 只读/黑名单/执行 |
| 22 | +web/templates/ # 布局与各页 |
| 23 | +web/static/ # 主题 CSS |
| 24 | +docs/DESIGN.md |
| 25 | +config.example.yaml |
21 | 26 | ``` |
22 | 27 |
|
23 | 28 | ## 本地命令 |
24 | 29 |
|
25 | 30 | | 用途 | 命令 | |
26 | 31 | |------|------| |
27 | | -| UI Demo | 根目录:复制 `config.example.yaml` → `config.yaml` 并设 `secret_key`,再 `task demo` 或 `go run ./cmd/demo` | |
28 | | -| Demo 监听 / 配置 | `MINIDBA_DEMO_ADDR`、`MINIDBA_CONFIG`(默认 `config.yaml`) | |
29 | | -| 格式化 | `task golangci:fmt` 或 `go fmt ./...` | |
30 | | -| 主程序占位 | `task run` → `go run main.go` | |
| 32 | +| 运行 | 复制 `config.example.yaml` → `config.yaml`,`task run` 或 `go run . -config config.yaml` | |
| 33 | +| 测试 | `go test ./...` | |
| 34 | +| Linux 构建 | `task build` → `./release/minidba` | |
| 35 | +| 格式化 | `task golangci:fmt` / `go fmt ./...` | |
31 | 36 |
|
32 | | -## 配置与密钥 |
| 37 | +## 配置说明 |
33 | 38 |
|
34 | | -- **`config.yaml` 已加入 `.gitignore`,勿提交。** 团队仅用 **`config.example.yaml`** 入库。 |
35 | | -- 含真实 `secret_key`、DSN 密码的文件限制权限,与设计文档 §7 一致。 |
| 39 | +- **`config.yaml` 勿提交**(见 `.gitignore`);团队以 **`config.example.yaml`** 为范本。 |
| 40 | +- **`config.Save` 整文件重写后 YAML 注释会丢失**(MVP 已知限制)。 |
| 41 | +- 修改 **`secret_key` 仅手改文件并重启进程**,设置页不轮换该字段。 |
36 | 42 |
|
37 | 43 | ## 编码约定 |
38 | 44 |
|
39 | | -- **Go 版本**:见 `go.mod`。 |
40 | | -- **改动范围**:与设计/MVP 相关;避免无关大范围重构。 |
41 | | -- **依赖**:新增依赖保持理由清晰;离线构建与设计 §4 一致。 |
42 | | -- **正式 HTTP**:设计文档 §9(`/login`、`/logout`、`/query`、`/settings` 等);Demo 路由以 `cmd/demo` 为准直至合并进主程序。 |
| 45 | +- 改动与设计/MVP 对齐;避免无关大范围重构。 |
| 46 | +- 所有 **POST**(除 `/login`)需 **CSRF**;业务接口需 **`secret_key` 会话或 Header**。 |
43 | 47 |
|
44 | 48 | ## 代理工作协议(建议) |
45 | 49 |
|
46 | | -1. 接到需求时先核对 **`docs/DESIGN.md`** 对应章节。 |
| 50 | +1. 接到需求时先核对 **`docs/DESIGN.md`**。 |
47 | 51 | 2. 改配置模型或安全行为时,同步更新 **设计文档 + `config.example.yaml`**。 |
48 | | -3. UI 变更可先对齐 **`web/demo`** 或 **`web/static/css/theme.css`**,再接入 `html/template`。 |
| 52 | +3. 样式以 **`theme.css`** 与现有模板块为准。 |
49 | 53 |
|
50 | 54 | --- |
51 | 55 |
|
|
0 commit comments