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

4.3 KiB
Raw Blame History

数据库初始化脚本

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_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。所有账号登录后请立即修改口令。

手动执行

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

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