feat: 内置 TDengine 时序库,自动建库建表

此前编排不含时序库,首页流量/用量图表、单卡流量历史等依赖时序数据的功能
不可用。现补上:

- 新增 tdengine 服务(镜像 iotlcm/iotlcm:tdengine-3.3.6.13)
  端口 6041(taosAdapter/WebSocket,应用用这个)+ 6030,数据卷 ./data/tdengine
- 新增 tdengine-init 一次性服务:等 tdengine 健康后建库建表,并校验超级表存在,
  缺表则以非零码退出
- 建库建表 SQL 取自生产环境 SHOW CREATE STABLE(仅结构无数据):
  iotlcm_daily   DURATION 7d  KEEP 1095d  ms  -> t_sim_card_usage_daily
  iotlcm_monthly DURATION 30d KEEP 1095d  ms  -> t_sim_card_usage_monthly
- 三个服务的 tsdb.tdengine 配置指向 tdengine:6041(admin-svr / app-server / worker-svr)

踩坑记录:taos -f 是按行执行语句的,多行 CREATE STABLE 会报
Incomplete SQL statement,因此 SQL 必须单行;且 taos 出错时退出码仍为 0,
故 run.sh 额外做超级表校验。

已验证:初始化 4 条语句全部 Create OK、0 error;按 worker 的 INSERT 形式
(USING ... TAGS)写入成功、按 admin 的查询形式(SELECT ts,usage_mb,package_code,iccid)
可读回;整栈 15 个服务全 Up,admin-svr/openapi/sms/docs 均 200,worker 无时序库报错。
This commit is contained in:
MiFaZhan
2026-10-30 10:02:25 +08:00
parent 247e5b2a60
commit d84f93ce0a
7 changed files with 125 additions and 15 deletions
+13 -3
View File
@@ -62,7 +62,7 @@ tag 格式统一为 **`<服务名>-<版本>`**。
| 类别 | 服务 |
| --- | --- |
| 基础组件 | MySQL、Redis、RabbitMQ、Consul |
| 基础组件 | MySQL、Redis、RabbitMQ、Consul、TDengine(流量历史) |
| 业务服务 | admin-svr(管理端后端)、admin-ui(管理端前端)、openapi(对外 API)、app-server(小程序后端)、app-web(小程序前端)、upstream-chan(运营商对接)、upstream-proxy(通道缓存转发)、worker-svr(异步任务)、sms(短信)、docs(文档站) |
| 可选 | onelink-mock(运营商接口挡板)、bot(飞书通知)、nginx(反向代理) |
@@ -82,13 +82,23 @@ iotlcm-deploy/
│ ├── upstream-chan/config.yaml
│ ├── upstream-proxy/config.yaml
│ └── worker-svr/config.yaml
├── schema/init.sql # 数据库初始化(单文件,首次启动自动执行)
├── schema/init.sql # MySQL 初始化(单文件,首次启动自动执行)
├── tdengine-init/ # TDengine 建库建表(首次启动自动执行)
└── data/ # 运行数据(首次启动自动创建,不入版本库)
```
全新初始化生成 95 张业务表(原有 91 张 + worker 异步恢复所需 4 张);已部署旧库不会自动执行新增迁移,见 `schema/README.md`。
本编排不包含 TDengine。默认配置中的时序库名称留空,因此首页流量/用量图表等依赖时序数据的功能不能仅靠上述容器完整展示;需要自行部署 TDengine,并在相关服务的 `config.yaml` 中配置连接及数据库名称。管理端登录、菜单、卡信息筛选不依赖这项配置。
编排已内置 TDengine(流量历史库),由 `tdengine-init` 服务在 TDengine 健康后自动建库建表:
| 库 | 分片 | 保留 | 超级表 |
| --- | --- | --- | --- |
| `iotlcm_daily` | 7 天 | 3 年 | `t_sim_card_usage_daily` |
| `iotlcm_monthly` | 30 天 | 3 年 | `t_sim_card_usage_monthly` |
结构取自生产环境,`tdengine-init` 会校验建表结果,缺表则报错退出。业务代码只读写不建表,因此这一步不能跳过。
TDengine 版本为 `3.3.6.13`(公开镜像可得),生产用的是 `3.4.0.9`。两者在流量历史的读写上一致;如需与生产完全对齐,可自行构建镜像并替换 `docker-compose.yml` 里的 tag。
## 上线前必改