bc2c7bcc6b
内容: - 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 启动运营商接口挡板,即可在无真实运营商环境时跑通全链路。
4.3 KiB
4.3 KiB
数据库初始化脚本
MySQL 容器首次以空数据卷启动时,docker-entrypoint-initdb.d 会按文件名顺序自动执行本目录下的脚本。
改了这些文件必须清空数据卷才会重跑:
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_user18 个:覆盖管理员、代理、终端用户等角色,出库与划拨流程依赖这张表与部门树的关联
已脱敏的内容
| 项 | 处理 |
|---|---|
| 账号昵称 | 示例用户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。所有账号登录后请立即修改口令。
手动执行
容器已启动后需要单独执行某个脚本:
docker compose exec -T mysql sh -c \
'mysql -uroot -p"$MYSQL_ROOT_PASSWORD" db_iotlcm' < schema/07-seed-dict.sql
.sh 脚本需要环境变量,在容器内执行:
docker compose exec mysql bash /docker-entrypoint-initdb.d/04-users.sh