5ddad0c5e5
目标:git clone 后 docker compose up -d 直接可用,无需任何手工准备。
变更:
- config.example/ → config/,config.example.yaml → config.yaml
不再需要 cp -r 与逐份修改
- 删除 .env / .env.example,值全部内置到 docker-compose.yml
(GoFrame 不展开配置文件中的 ${VAR},环境变量方案在 Go 侧不可用)
- 配置文件里的 ${VAR} 全部替换为字面默认值
- schema/04-users.sh 与 05-reset-passwords.sh 改为脚本内字面口令,
不再读取环境变量
- 新增 schema/13-seed-flow-package.sql 占位文件,说明套餐表为空的原因与补齐方式
- .gitignore 不再排除 config/ 与 .env(已无 .env)
- README 改为「一键启动」+「上线前必改」两张表
已验证:docker compose config 通过;compose 口令、各配置文件 DSN、
初始化脚本三处口令哈希一致;库名与 schema 中一致。
91 lines
4.1 KiB
Markdown
91 lines
4.1 KiB
Markdown
# 数据库初始化脚本
|
||
|
||
MySQL 容器**首次以空数据卷启动**时,`docker-entrypoint-initdb.d` 会按**文件名顺序**自动执行本目录下的脚本。
|
||
|
||
改了这些文件必须清空数据卷才会重跑:
|
||
|
||
```bash
|
||
docker compose stop mysql
|
||
sudo rm -rf ./data/mysql
|
||
docker compose up -d mysql
|
||
```
|
||
|
||
> ⚠️ 清空 `./data/mysql` 会**删除全部数据**,生产环境不要执行。
|
||
|
||
## 执行顺序
|
||
|
||
| 序号 | 文件 | 内容 |
|
||
| --- | --- | --- |
|
||
| 01 | `01-schema.sql` | 建库 + 全部表结构 + 基础数据(菜单、字典、角色、租户、演示账号)。自包含:`DROP DATABASE` → `CREATE` → `USE` |
|
||
| 02 | `02-schema-fix-preview1.sql` | 补 `card_channel_assoc` 表 + 27 列。用存储过程按 `information_schema` 判断,规避 MySQL 8 无 `ADD COLUMN IF NOT EXISTS` |
|
||
| 03 | `03-schema-align-prod.sql` | 补 `t_sms_template_config` 表 + 修正 `batch_no` 默认值 |
|
||
| 04 | `04-users.sh` | 建应用账号 `iotlcm_app` + 可选库 `iotdb` |
|
||
| 05 | `05-reset-passwords.sh` | 把所有种子账号口令重置为脚本内设定的口令(按各账号自身 salt 重算哈希) |
|
||
| 06 | `06-seed-channel-templates.sql` | 通道模板 23 条(上游密钥已置空) |
|
||
| 07 | `07-seed-dict.sql` | 数据字典:`sys_dict_type` 86 类 + `sys_dict_data` 435 条 |
|
||
| 08 | `08-seed-mock-channel.sql` | **Mock 通道 `channel_yd_mock`**。演示卡全部挂在该通道上,缺则卡片管理的通道列、筛选、开停复机均不可用 |
|
||
| 09 | `09-seed-role-chain.sql` | 代理下发模板参数 + 角色下发标记 |
|
||
| 10 | `10-seed-jobs.sql` | 定时任务 19 条,**默认全部停用**(避免自动全量同步压满机器) |
|
||
| 11 | `11-seed-menu-align-prod.sql` | 菜单增量 27 条(含达量断网按钮权限、全量同步页) |
|
||
| 12 | `12-repair-dept-ancestors.sql` | `sys_dept.ancestors` 尾逗号归一化。全新库为空操作 |
|
||
| 13 | `13-seed-flow-package.sql` | **占位文件**,流量套餐为空。需在管理端「套餐定价」中创建 |
|
||
|
||
## 口令说明
|
||
|
||
`04-users.sh` 与 `05-reset-passwords.sh` 里的口令是**字面值**(不使用环境变量),必须与以下位置保持一致:
|
||
|
||
| 口令 | 需同步的位置 |
|
||
| --- | --- |
|
||
| 应用账号 `iotlcm_app` | `docker-compose.yml` 的 `MYSQL_ROOT_PASSWORD`(root)与 `config/*/config.yaml` 里 database link 的口令 |
|
||
| 种子账号 | `docker-compose.yml` 里 admin 的初始化口令说明、`05-reset-passwords.sh` 的 `ADMIN_PASSWORD` |
|
||
|
||
改口令时三处一起改,漏改会导致服务连不上库或登录失败。
|
||
|
||
## 种子数据说明
|
||
|
||
### 保留的内容(业务必需)
|
||
|
||
- **菜单** `sys_menu`:系统导航与按钮权限
|
||
- **字典** `sys_dict_type` / `sys_dict_data`:全部业务枚举
|
||
- **角色** `sys_role` / `sys_role_menu` / `sys_role_dept`:超级管理员、M管理员、M用户、终端用户
|
||
- **租户与部门** `sys_tenant` / `sys_dept`:企业-代理-部门三层结构
|
||
- **接口权限** `t_api` / `t_api_group` / `t_api_resource`:OpenAPI 权限模型
|
||
- **通道模板** `t_sim_channel_template`:运营商通道配置模板
|
||
- **行政区划** `t_division_code`:省市级
|
||
- **演示账号** `sys_user` 18 个:覆盖管理员、代理、终端用户等角色,出库与划拨流程依赖这张表与部门树的关联
|
||
|
||
### 已脱敏的内容
|
||
|
||
| 项 | 处理 |
|
||
| --- | --- |
|
||
| 账号昵称 | `示例用户01` ~ `示例用户18` |
|
||
| 邮箱 | `user01@example.com` ~ `user18@example.com` |
|
||
| 手机号 | 合法 11 位编造号(保持互异) |
|
||
| 登录 IP | 清空 |
|
||
| 头像地址 | 清空 |
|
||
| 公司名 / 组织名 | `示例企业` / `示例代理` |
|
||
| 通道密钥 | 置空 |
|
||
|
||
### 空表(正常)
|
||
|
||
| 表 | 说明 |
|
||
| --- | --- |
|
||
| `t_sim_flow_package_info` | 流量套餐,见 `13-seed-flow-package.sql` 说明 |
|
||
| `t_sim_card` | 卡数据,可通过挡板服务造卡或自行入库 |
|
||
| 其余 `t_*` 业务表 | 随业务操作产生数据 |
|
||
|
||
## 手动执行
|
||
|
||
容器已启动后单独执行某个脚本:
|
||
|
||
```bash
|
||
docker compose exec -T mysql sh -c \
|
||
'exec mysql -uroot -p"<root口令>" db_iotlcm' < schema/07-seed-dict.sql
|
||
```
|
||
|
||
`.sh` 脚本:
|
||
|
||
```bash
|
||
docker compose exec mysql bash /docker-entrypoint-initdb.d/04-users.sh
|
||
```
|