Files
iotlcm/schema
MiFaZhan 5ddad0c5e5 feat: 一键部署——配置内置默认值,去掉示例复制与环境变量
目标: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 中一致。
2026-10-29 09:17:26 +08:00
..
2026-10-28 13:40:12 +08:00

数据库初始化脚本

MySQL 容器首次以空数据卷启动时,docker-entrypoint-initdb.d 会按文件名顺序自动执行本目录下的脚本。

改了这些文件必须清空数据卷才会重跑:

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_* 业务表 随业务操作产生数据

手动执行

容器已启动后单独执行某个脚本:

docker compose exec -T mysql sh -c \
  'exec mysql -uroot -p"<root口令>" db_iotlcm' < schema/07-seed-dict.sql

.sh 脚本:

docker compose exec mysql bash /docker-entrypoint-initdb.d/04-users.sh