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 中一致。
数据库初始化脚本
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_user18 个:覆盖管理员、代理、终端用户等角色,出库与划拨流程依赖这张表与部门树的关联
已脱敏的内容
| 项 | 处理 |
|---|---|
| 账号昵称 | 示例用户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