Files
iotlcm/schema/README.md
T
MiFaZhan bc2c7bcc6b init: IotLCM 开源版部署仓
内容:
- docker-compose.yml:14 个基础/业务服务 + 3 个可选 profile(with-mock 挡板、with-bot、with-nginx)
- .env.example:集中管理镜像仓库、口令、端口;必填项缺失时 compose 直接报错退出
- config.example/:10 份配置模板,全部为占位值与注释说明
- schema/:12 个初始化脚本,按文件名顺序由 MySQL initdb 自动执行

脱敏处理:
- 生产/内网 IP、镜像仓库地址、公司名、真实域名全部清除
- 演示账号保留 18 个(出库与划拨依赖账号与部门树的关联),
  昵称/邮箱/手机号/登录IP/头像改为占位或编造值
- 数据库账号与 admin 口令改为初始化时按 .env 注入计算
- 通道模板与 Mock 通道的上游密钥置空
- Mock 通道地址指向 compose 内 onelink-mock 服务

部署时用 --profile with-mock 启动运营商接口挡板,即可在无真实运营商环境时跑通全链路。
2026-10-28 13:40:12 +08:00

95 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数据库初始化脚本
MySQL 容器**首次以空数据卷启动**时,`docker-entrypoint-initdb.d` 会按**文件名顺序**自动执行本目录下的脚本。
改了这些文件必须清空数据卷才会重跑:
```bash
docker compose stop mysql
sudo rm -rf ./data/mysql
docker compose up -d mysql
```
> ⚠️ 清空 `./data/mysql` 会**删除全部数据**,生产环境不要执行。
## 执行顺序
按「结构 → 账号 → 种子数据」三阶段编号,文件名顺序即执行顺序。除 01 外全部幂等,可重复执行。
| 序号 | 文件 | 内容 |
| --- | --- | --- |
| 01 | `01-schema.sql` | 建 `db_iotlcm` 库 + 全部表结构 + 基础数据(菜单、字典、角色、租户、演示账号)。自包含:`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` | 建应用账号 `u_iotlcm`(口令取自 `MYSQL_APP_PASSWORD`)+ 可选库 `iotdb` |
| 05 | `05-reset-passwords.sh` | 把所有种子账号口令重置为 `MYSQL_ADMIN_PASSWORD`(按各账号自身 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` 尾逗号归一化。全新库为空操作,仅用于修复既有库脏数据 |
## 种子数据说明
### 保留的内容(业务必需)
- **菜单** `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 位编造号(`1380000` + 4 位序号,保持互异) |
| 登录 IP | 清空 |
| 头像地址 | 清空 |
| 公司名 / 组织名 | `示例企业` / `示例代理` |
| 密码哈希 | 初始化时按 `MYSQL_ADMIN_PASSWORD` 重算 |
| 通道密钥 | 置空 |
### 空表(正常)
以下表在种子库中为空,属预期状态:
| 表 | 说明 |
| --- | --- |
| `t_sim_flow_package_info` | 流量套餐。为空时无法办理套餐/续费/改套餐,需自行在后台「套餐定价」中创建 |
| `t_sim_card` | 卡数据。可通过挡板服务的造卡接口生成测试卡 |
| `t_sim_channels` | 业务通道。Mock 通道由 `08` 脚本插入 |
| 其余 `t_*` 业务表 | 均为空,随业务操作产生数据 |
## 首次登录
| 项 | 值 |
| --- | --- |
| 地址 | `http://<宿主机IP><:ADMIN_UI_PORT>` |
| 账号 | `admin` |
| 口令 | `.env` 里的 `MYSQL_ADMIN_PASSWORD` |
其余演示账号的登录名见 `sys_user.user_name`,口令同为 `MYSQL_ADMIN_PASSWORD`。**所有账号登录后请立即修改口令。**
## 手动执行
容器已启动后需要单独执行某个脚本:
```bash
docker compose exec -T mysql sh -c \
'mysql -uroot -p"$MYSQL_ROOT_PASSWORD" db_iotlcm' < schema/07-seed-dict.sql
```
`.sh` 脚本需要环境变量,在容器内执行:
```bash
docker compose exec mysql bash /docker-entrypoint-initdb.d/04-users.sh
```