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),侧边栏同步改为「部署手册 + 运维」两组。
5.5 KiB
5.5 KiB
title, description, outline
| title | description | outline |
|---|---|---|
| 配置说明 | 部署环境变量与应用配置文件的填写方式 | deep |
配置说明
平台配置分两层:
| 层 | 位置 | 管什么 | 是否入库 |
|---|---|---|---|
| 部署层 | .env |
镜像仓库、口令、端口、外部服务地址 | 否 |
| 应用层 | config/<服务>/config.yaml |
业务参数、连接串、功能开关 | 否 |
两者分别由 .env.example 与 config.example/ 复制而来,.gitignore 已排除。不要把自己的配置提交回仓库。
一、环境变量
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 会直接报错退出,不会用空值或弱口令启动。
生成强口令:
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。
二、应用配置
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 配置即可。
三、配置自检
启动前验证:
# 检查展开结果(不启动容器)
docker compose config
# 只检查必填项是否齐全
docker compose config --quiet
配置语法错误会导致服务启动后立即退出,用日志定位:
docker compose logs --tail=50 admin-svr