e43640d0fe
原 /deploy/ 内容是文档站自身(VitePress/Node/nginx)的部署说明, 与用户所需的「IotLCM 平台部署手册」不符。 改为基于 iotlcm-public/iotlcm-deploy 部署仓的平台部署手册: - 部署概览:部署构成、三步流程、端口规划、关键约束 - 环境准备:硬件分档、系统与 Docker 版本、镜像仓库、防火墙、可选外部依赖 - 配置说明:.env 必填 8 项与可选 4 项、10 份应用配置逐项说明 - 启动与验证:首次初始化流程、7 步验证清单、首次登录必做项 - 可选服务:运营商挡板 onelink-mock、飞书 bot、反向代理(含 HTTPS) - 升级与备份:版本固定、升级回滚、备份与恢复、日志清理、监控指标 - 故障排查:启动/功能/性能/网络四类共 20 个问题 删除原 6 页(docker-nginx / path-prefix / static-hosting / local-dev / offline / faq),侧边栏同步改为「部署手册 + 运维」两组。
179 lines
5.5 KiB
Markdown
179 lines
5.5 KiB
Markdown
---
|
||
title: 配置说明
|
||
description: 部署环境变量与应用配置文件的填写方式
|
||
outline: deep
|
||
---
|
||
|
||
# 配置说明
|
||
|
||
平台配置分两层:
|
||
|
||
| 层 | 位置 | 管什么 | 是否入库 |
|
||
| --- | --- | --- | --- |
|
||
| 部署层 | `.env` | 镜像仓库、口令、端口、外部服务地址 | 否 |
|
||
| 应用层 | `config/<服务>/config.yaml` | 业务参数、连接串、功能开关 | 否 |
|
||
|
||
两者分别由 `.env.example` 与 `config.example/` 复制而来,`.gitignore` 已排除。**不要把自己的配置提交回仓库。**
|
||
|
||
## 一、环境变量
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
```
|
||
|
||
### 必填项
|
||
|
||
| 变量 | 说明 |
|
||
| --- | --- |
|
||
| `REGISTRY` | 镜像仓库地址,不含协议与末尾斜杠 |
|
||
| `TAG` | 镜像标签,生产用具体版本号 |
|
||
| `MYSQL_ROOT_PASSWORD` | MySQL root 口令 |
|
||
| `MYSQL_APP_PASSWORD` | 应用账号 `u_iotlcm` 的口令 |
|
||
| `MYSQL_ADMIN_PASSWORD` | 平台 admin 账号初始口令 |
|
||
| `REDIS_PASSWORD` | Redis 口令 |
|
||
| `RABBITMQ_PASSWORD` | RabbitMQ 口令 |
|
||
| `JWT_SIGNING_KEY` | JWT 签名密钥 |
|
||
|
||
任一项未设置时 `docker compose` 会直接报错退出,不会用空值或弱口令启动。
|
||
|
||
生成强口令:
|
||
|
||
```bash
|
||
openssl rand -base64 24 # 各类密码
|
||
openssl rand -hex 32 # JWT_SIGNING_KEY
|
||
```
|
||
|
||
### 可选项
|
||
|
||
| 变量 | 不填的影响 |
|
||
| --- | --- |
|
||
| `DIAGNOSIS_INTERNAL_TOKEN` | 控制台「智能诊断」不可用 |
|
||
| `SMS_ACCESS_KEY_ID` / `SMS_ACCESS_KEY_SECRET` | 无法发送短信验证码 |
|
||
| `FEISHU_APP_ID` / `FEISHU_APP_SECRET` / `FEISHU_CHAT_ID` | 不启动 bot 即可 |
|
||
| `TDENGINE_*` | 历史流量查询不可用,主流程正常 |
|
||
|
||
### 端口
|
||
|
||
全部端口变量见 `.env.example`,均有默认值。改端口只改 `.env`。
|
||
|
||
## 二、应用配置
|
||
|
||
```bash
|
||
cp -r config.example config
|
||
```
|
||
|
||
得到 10 份:
|
||
|
||
```
|
||
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
|
||
```
|
||
|
||
所有配置支持 `${VAR}` 与 `${VAR:default}` 占位,由 compose 从 `.env` 注入。**口令类字段保持占位引用即可,不要写死明文。**
|
||
|
||
### 各服务配置要点
|
||
|
||
#### admin-svr(管理端后端)
|
||
|
||
| 项 | 说明 |
|
||
| --- | --- |
|
||
| `database.default.link` | 库连接串,已用 `${MYSQL_APP_PASSWORD}` 拼好 |
|
||
| `database.legacyCard.link` | 旧平台库,没有就留空 |
|
||
| `jwt.signingKey` | 保持 `${JWT_SIGNING_KEY}` |
|
||
| `warning.sms.enabled` | 不用短信改 `false` |
|
||
| `warning.wechat.*` | 不用微信订阅消息改 `false` 并留空 |
|
||
| `register.email.*` | 邮件验证码的 SMTP,不用则留空 |
|
||
| `tsdb.tdengine.dsn` | 不用时序库则留空 |
|
||
| `alipay.*` | 不用支付宝整段删除 |
|
||
| `upstream.appDiagnosisToken` | 与 proxy 的 `appDiagnosis.internalToken` 一致 |
|
||
|
||
#### openapi(对外 API)
|
||
|
||
| 项 | 说明 |
|
||
| --- | --- |
|
||
| `jwt.signingKey` | 与 admin-svr 一致 |
|
||
| `database.default.link` | 建议单独建只读账号隔离 |
|
||
|
||
#### worker-svr(异步任务)
|
||
|
||
| 项 | 说明 |
|
||
| --- | --- |
|
||
| `batch.inbound.upstreamRateLimit` | **运营商接口限流,必须按上游实际配额设置**,调太大会被限流或封禁 |
|
||
| `rabbitmq.batchExecute.maxRetries` | 批次执行失败重试次数 |
|
||
| `tsdb.tdengine.dsn` | 不用时序库则留空 |
|
||
|
||
#### upstream-chan(运营商对接)
|
||
|
||
| 项 | 说明 |
|
||
| --- | --- |
|
||
| `registry.address` | Consul 地址,默认 `consul:8500` |
|
||
| `dependencies.sim_yd_mock_v5.url` | 挡板地址,对接真实运营商时删除本段 |
|
||
| `dependencies.token_refresh.skew_seconds` | 运营商 Token 提前刷新窗口 |
|
||
|
||
运营商通道本身(AppKey、AppSecret、接口地址)不在本文件配置,而是在平台「通道管理」中录入,存数据库。
|
||
|
||
#### upstream-proxy(通道缓存转发)
|
||
|
||
| 项 | 说明 |
|
||
| --- | --- |
|
||
| `appDiagnosis.internalToken` | 与 admin-svr 的 `upstream.appDiagnosisToken` 一致 |
|
||
| `gateway.batchTimeout` | 批量转发总预算上限,**worker 侧超时必须大于此值** |
|
||
|
||
#### app-server(小程序后端)
|
||
|
||
| 项 | 说明 |
|
||
| --- | --- |
|
||
| `jwt.signingKey` | 与 admin-svr 一致 |
|
||
| `payment.wechat.*` | 不用支付把 `enabled` 改 `false` |
|
||
| `appCardRecognition.*` | 拍照识别卡号,不用改 `false` |
|
||
| `upstream.onelinkMock.*` | 挡板联调配置,切真实运营商时 `enabled: false` |
|
||
|
||
#### sms(短信服务)
|
||
|
||
| 项 | 说明 |
|
||
| --- | --- |
|
||
| `serviceType` | `1`=阿里云,`2`=腾讯云 |
|
||
| `accessKeyId` / `accessKeySecret` | 从 `.env` 注入 |
|
||
| `signName` | 短信签名,需服务商审核通过 |
|
||
|
||
#### bot(飞书通知,可选)
|
||
|
||
`feishu.appId`、`appSecret`、`chatId` 全部从 `.env` 注入。
|
||
|
||
#### admin-ui(管理端 nginx)
|
||
|
||
`default.conf` 中 `/api/` 反代到 `admin-svr:8008`,`/upload/` 指向共享上传目录。一般无需修改。
|
||
|
||
#### nginx(对外入口,可选)
|
||
|
||
`iotlcm.conf` 按域名分三组 server:`api.*` → openapi,`admin.*` → 管理端与文档站,`app.*` → 小程序端。**把示例域名替换为实际域名。**
|
||
|
||
不用自带 nginx 时,把其中 `location` 段落复制到宿主机 nginx 配置即可。
|
||
|
||
## 三、配置自检
|
||
|
||
启动前验证:
|
||
|
||
```bash
|
||
# 检查展开结果(不启动容器)
|
||
docker compose config
|
||
|
||
# 只检查必填项是否齐全
|
||
docker compose config --quiet
|
||
```
|
||
|
||
配置语法错误会导致服务启动后立即退出,用日志定位:
|
||
|
||
```bash
|
||
docker compose logs --tail=50 admin-svr
|
||
```
|