Files
iotlcm/docs/deploy/configuration.md
T
MiFaZhan b4944d7c21 docs: 部署手册镜像地址改为单仓库格式 iotlcm/iotlcm:<服务名>-<版本>
官方仓库把全部镜像放在同一个镜像仓库 iotlcm/iotlcm 下,靠 tag 区分服务:

  .../iotlcm/iotlcm:mysql-8.0
  .../iotlcm/iotlcm:iotlcm-admin-svr-v1.0.4
  .../iotlcm/iotlcm:iotlcm-app-server-v1.0.2

改动页面:
- prerequisites:镜像仓库章节重写,补充命名空间/镜像仓库/tag 三层结构说明,
  不再提 library/ 命名空间
- configuration:镜像地址示例与 tag 规则表
- build-image:构建命令、命名规则表、基础组件同步脚本、验证命令同步改
- offline:离线镜像清单
- split:分离部署示例

已构建通过,6 个相关页面均可访问。
2026-10-30 09:15:42 +08:00

190 lines
6.2 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.
---
title: 配置说明
description: 部署配置的结构、默认值与修改方式
outline: deep
---
# 配置说明
平台配置分两层,**都随仓库分发、都带可用默认值**,无需复制或初始化即可启动:
| 层 | 位置 | 管什么 |
| --- | --- | --- |
| 编排层 | `docker-compose.yml` | 镜像地址、端口、数据库/Redis/MQ 口令、容器编排 |
| 应用层 | `config/<服务>/config.yaml` | 业务参数、连接串、功能开关 |
::: warning 配置里是字面值,不是环境变量
配置文件与编排文件里直接写的是具体值,**不使用 `${VAR}` 占位**。
原因:GoFrame 不会展开配置文件中的 `${VAR}`(环境变量只用于覆盖配置键,不参与文件内文本替换),用占位符会导致连接串变成字面量 `${X}`,服务直接连不上库。
代价是改口令要改多处,见下方「改口令的正确姿势」。
:::
## 编排层:`docker-compose.yml`
### 镜像地址
```yaml
image: 'crpi-.../iotlcm/iotlcm:mysql-8.0'
image: 'crpi-.../iotlcm/iotlcm:iotlcm-admin-svr-v1.0.4'
```
所有镜像(基础组件 + 业务服务)都在**同一个镜像仓库** `<Registry>/iotlcm/iotlcm` 下,靠 tag 区分:
| tag 形式 | 示例 |
| --- | --- |
| 基础组件:`<组件>-<版本>` | `mysql-8.0`、`redis-7.2`、`nginx-1.30` |
| 业务服务:`<服务>-<版本>` | `iotlcm-admin-svr-v1.0.4`、`iotlcm-app-server-v1.0.2` |
改用自有仓库时,全局替换 Registry 前缀即可。
### 默认口令
| 变量 | 默认值 | 用途 |
| --- | --- | --- |
| `MYSQL_ROOT_PASSWORD` | 见文件 | MySQL root |
| `MYSQL_DATABASE` | `db_iotlcm` | 库名 |
| `RABBITMQ_DEFAULT_PASS` | 见文件 | RabbitMQ |
| redis `--requirepass` | 见文件 | Redis |
### 端口
| 端口 | 服务 | 对外 |
| --- | --- | --- |
| 8008 | admin-svr | 经反向代理 |
| 8009 | admin-ui | **浏览器直接访问这个** |
| 8000 | openapi | 经反向代理 |
| 8010 / 8018 | app-server / app-web | 经反向代理 |
| 8019 | docs | 经反向代理 |
| 8080 | onelink-mock | 仅联调 |
| 3306 / 6379 / 5672 / 8500 | 基础组件 | 仅内网 |
| 8110 / 8310 / 8510 | chan / proxy | 仅内网 |
| 11190 / 11200 | sms | 仅内网 |
改端口直接改 `docker-compose.yml` 中对应 `ports` 的冒号左侧。
## 应用层:`config/`
```
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
```
### 各服务要点
#### admin-svr(管理端后端)
| 项 | 默认情况 |
| --- | --- |
| `database.default.link` | 指向 `mysql:3306`,口令与应用账号一致 |
| `database.legacyCard.link` | 空,不使用旧平台库 |
| `jwt.signingKey` | 已填固定密钥,需与 openapi、app-server 一致 |
| `warning.sms.enabled` | `true`,未配短信服务商时建议改 `false` |
| `warning.wechat.enabled` | `false` |
| `register.email.*` | 空,不发邮件 |
| `tsdb.tdengine.dsn` | 空,不启用时序库 |
| `alipay.*` | 空,不启用支付 |
| `upstream.appDiagnosisToken` | 已填,需与 upstream-proxy 一致 |
#### openapi(对外 API)
`jwt.signingKey` 与 admin-svr 一致;`database.default.link` 同库。建议另建只读账号用于生产。
#### worker-svr(异步任务)
| 项 | 说明 |
| --- | --- |
| `batch.inbound.upstreamConcurrency` | 默认 300,机器弱或上游配额小时调低 |
| `batch.inbound.upstreamRateLimit` | 运营商限流,**必须按上游实际配额设置**,调大易被封禁 |
| `tsdb.tdengine.dsn` | 空,不启用时序库 |
#### upstream-chan(运营商对接)
| 项 | 说明 |
| --- | --- |
| `registry.address` | `consul:8500` |
| `dependencies.sim_yd_mock_v5.url` | 指向挡板 `http://onelink-mock:8080/v5/`,接真实运营商时删除本段 |
运营商通道本身(AppKey、AppSecret、接口地址)在平台「通道管理」中录入,存数据库,不在本文件。
#### upstream-proxy(通道缓存转发)
| 项 | 说明 |
| --- | --- |
| `appDiagnosis.internalToken` | 与 admin-svr 的 `upstream.appDiagnosisToken` 一致 |
| `gateway.batchTimeout` | 默认 20m,**worker 侧超时必须大于此值** |
#### app-server(小程序后端)
`jwt.signingKey` 同上;`payment.wechat.enabled` 默认 `false`;`appCardRecognition.enabled` 默认 `false`(拍照识别需自备视觉模型 API)。
#### sms(短信服务)
| 项 | 默认 |
| --- | --- |
| `serviceType` | `1`(阿里云) |
| `accessKeyId` / `accessKeySecret` | 空,需自行填写 |
| `signName` | `示例签名` |
不填则无法发送验证码,其余功能正常。
#### bot(飞书通知)
`feishu.appId` / `appSecret` / `chatId` 均为空。不启动该容器即可。
#### admin-ui / nginx
`admin-ui/default.conf` 把 `/api/` 反代到 `admin-svr:8008`;`nginx/iotlcm.conf` 按域名分流,需把 `your-domain.example.com` 换成实际域名。
## 改口令的正确姿势
改数据库口令时,以下**三处必须同时改**,漏一处就起不来:
| 位置 | 内容 |
| --- | --- |
| `docker-compose.yml` | `MYSQL_ROOT_PASSWORD`、redis `--requirepass`、`RABBITMQ_DEFAULT_PASS` |
| `config/*/config.yaml` | 各服务的 `database.default.link`、`redis.default.pass`、`rabbitmq.dsn` |
| `schema/04-users.sh`、`schema/05-reset-passwords.sh` | 脚本内的 `APP_PASSWORD` / `ADMIN_PASSWORD` / `ROOT_PASSWORD` |
::: tip 一次性全局替换
```bash
OLD='原口令'
NEW='新口令'
# 编排 + 配置
grep -rl "$OLD" docker-compose.yml config/ | xargs sed -i "s/$OLD/$NEW/g"
# 初始化脚本
grep -rl "$OLD" schema/ | xargs sed -i "s/$OLD/$NEW/g"
```
:::
::: danger 口令不能含 @ : / 等字符
连接串格式为 `mysql:用户:口令@tcp(主机:端口)/库`,口令里的 `@`、`:`、`/` 会被解析成分隔符,导致连接失败。用字母数字组合。
:::
## 配置自检
```bash
# 编排语法
docker compose config --quiet
# 看某个服务最终的配置展开
docker compose config | sed -n '/admin-svr:/,/^ [a-z]/p'
```
配置语法错误会导致服务启动后立刻退出,看日志定位:
```bash
docker compose logs --tail=50 admin-svr
```