Files
iotlcm/README.md
T
MiFaZhan 247e5b2a60 update: 镜像改为单仓库 iotlcm/iotlcm,tag 为「服务名-版本」
阿里云 ACR 的仓库地址结构是 <Registry>/<命名空间>/<镜像仓库>:<tag>,
此前每个服务单独建了一个镜像仓库(iotlcm/mysql、iotlcm/iotlcm-admin-svr …),
现按要求统一到同一个镜像仓库 iotlcm/iotlcm,服务名放进 tag。

镜像地址变化:
  crpi-.../iotlcm/iotlcm-admin-svr:v1.0.4
  → crpi-.../iotlcm/iotlcm:iotlcm-admin-svr-v1.0.4

17 个镜像(12 业务 + 5 基础组件)已重新打 tag 推送到单仓库并验证。
已验证 docker compose pull 全部拉取成功、14 个默认服务正常启动、
admin-svr/openapi/sms 健康检查 200、数据库 95 表。

Jenkins 流水线同步改为推送到 iotlcm/iotlcm,tag 自动拼接服务名。
2026-10-30 09:12:45 +08:00

120 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# IotLCM 部署仓
IotLCM 物联网卡管理平台的部署编排与数据库初始化脚本。使用 Docker Compose 在单机上拉起完整平台。
## 一键启动
```bash
git clone <本仓库地址> iotlcm-deploy
cd iotlcm-deploy
docker compose up -d
```
无需复制或修改任何文件,配置里已带可用默认值。首次启动会自动建库、建表、创建应用账号并导入种子数据,约需 1~2 分钟。
等待 MySQL 健康后其余服务依次启动,观察进度:
```bash
docker compose logs -f mysql
```
启动完成后访问 `http://<宿主机IP>:8009`:
| 项 | 值 |
| --- | --- |
| 账号 | `admin` |
| 口令 | `Iotlcm2026Default` |
> ⚠️ **正式使用前必须修改默认口令**,见下方「上线前必改」。
## 可选服务
```bash
docker compose --profile with-mock up -d # 运营商接口挡板
docker compose --profile with-bot up -d # 飞书通知(运维自用)
docker compose --profile with-nginx up -d # 自带反向代理
```
多个 profile 可组合:`--profile with-mock --profile with-nginx up -d`
`with-bot` 是把全量同步等运维事件推送到飞书群的**内部运维工具**,不是平台功能。它需要你自己的飞书自建应用凭证(`config/bot/config.yaml` 的 `appId` / `appSecret` / `chatId`),没填就不启动。
**默认不启动,也不影响平台功能**;不需要飞书通知就完全不用管它。
## 镜像版本
所有镜像(含基础组件)都在**同一个镜像仓库** `<镜像仓库>/iotlcm/iotlcm` 下,靠 tag 区分服务与版本:
```text
crpi-.../iotlcm/iotlcm:mysql-8.0
crpi-.../iotlcm/iotlcm:redis-7.2
crpi-.../iotlcm/iotlcm:iotlcm-admin-svr-v1.0.4
crpi-.../iotlcm/iotlcm:iotlcm-app-server-v1.0.2
```
tag 格式统一为 **`<服务名>-<版本>`**。
当前业务版本:大部分服务为 `v1.0.4`,`iotlcm-app-server` / `iotlcm-app-web` 为 `v1.0.2`(源仓最新 tag 就是 v1.0.2)。
升级时在 `docker-compose.yml` 中同步更新 tag 的版本部分,不要改用 `latest`。
## 部署内容
| 类别 | 服务 |
| --- | --- |
| 基础组件 | MySQL、Redis、RabbitMQ、Consul |
| 业务服务 | admin-svr(管理端后端)、admin-ui(管理端前端)、openapi(对外 API)、app-server(小程序后端)、app-web(小程序前端)、upstream-chan(运营商对接)、upstream-proxy(通道缓存转发)、worker-svr(异步任务)、sms(短信)、docs(文档站) |
| 可选 | onelink-mock(运营商接口挡板)、bot(飞书通知)、nginx(反向代理) |
## 目录结构
```
iotlcm-deploy/
├── docker-compose.yml # 服务编排(含全部默认值)
├── config/ # 各服务配置,已带可用默认值
│ ├── admin-svr/config.yaml
│ ├── admin-ui/default.conf
│ ├── app-server/config.yaml
│ ├── bot/config.yaml
│ ├── nginx/iotlcm.conf
│ ├── openapi/config.yaml
│ ├── sms/config.yaml
│ ├── upstream-chan/config.yaml
│ ├── upstream-proxy/config.yaml
│ └── worker-svr/config.yaml
├── schema/init.sql # 数据库初始化(单文件,首次启动自动执行)
└── data/ # 运行数据(首次启动自动创建,不入版本库)
```
全新初始化生成 95 张业务表(原有 91 张 + worker 异步恢复所需 4 张);已部署旧库不会自动执行新增迁移,见 `schema/README.md`。
本编排不包含 TDengine。默认配置中的时序库名称留空,因此首页流量/用量图表等依赖时序数据的功能不能仅靠上述容器完整展示;需要自行部署 TDengine,并在相关服务的 `config.yaml` 中配置连接及数据库名称。管理端登录、菜单、卡信息筛选不依赖这项配置。
## 上线前必改
默认口令仅用于快速试用。**正式部署前必须修改以下内容**,具体位置见[部署手册](https://git.5iot.com/iotlcm-public/iotlcm-docs):
| 项 | 位置 |
| --- | --- |
| 数据库口令(root 与应用账号) | `docker-compose.yml` + `config/*/config.yaml` + `schema/init.sql` |
| Redis 口令 | `docker-compose.yml` + `config/*/config.yaml` |
| RabbitMQ 口令 | `docker-compose.yml` + `config/*/config.yaml` |
| admin 初始口令 | `docker-compose.yml` + `schema/init.sql` |
| JWT 签名密钥 | `config/admin-svr`、`config/openapi`、`config/app-server` 三处 |
| 对外域名 | `config/nginx/iotlcm.conf` |
::: warning 改口令必须多处同步
因为配置文件里是字面值(未使用环境变量),改口令时**编排、配置、初始化脚本三处必须一致**,漏改会导致服务连不上数据库。
:::
## 重要提示
- **`JWT_SIGNING_KEY` 必须在 `admin-svr`、`openapi`、`app-server` 三者间完全一致**,否则令牌跨服务不通
- **镜像标签不要用 `latest`**,生产环境请固定到具体版本
- **改 `schema/` 下的脚本不会自动生效**,需要清空 `data/mysql` 重新初始化(会丢失全部数据)
- 默认只监听 `127.0.0.1` 的服务需通过反向代理对外
## 许可
[Apache License 2.0](LICENSE)