init: IotLCM 开源版部署仓

内容:
- docker-compose.yml:14 个基础/业务服务 + 3 个可选 profile(with-mock 挡板、with-bot、with-nginx)
- .env.example:集中管理镜像仓库、口令、端口;必填项缺失时 compose 直接报错退出
- config.example/:10 份配置模板,全部为占位值与注释说明
- schema/:12 个初始化脚本,按文件名顺序由 MySQL initdb 自动执行

脱敏处理:
- 生产/内网 IP、镜像仓库地址、公司名、真实域名全部清除
- 演示账号保留 18 个(出库与划拨依赖账号与部门树的关联),
  昵称/邮箱/手机号/登录IP/头像改为占位或编造值
- 数据库账号与 admin 口令改为初始化时按 .env 注入计算
- 通道模板与 Mock 通道的上游密钥置空
- Mock 通道地址指向 compose 内 onelink-mock 服务

部署时用 --profile with-mock 启动运营商接口挡板,即可在无真实运营商环境时跑通全链路。
This commit is contained in:
MiFaZhan
2026-10-28 13:40:12 +08:00
commit bc2c7bcc6b
26 changed files with 7264 additions and 0 deletions
+95
View File
@@ -0,0 +1,95 @@
# ============================================================
# IotLCM 部署环境变量
#
# cp .env.example .env
#
# 标注「必填」的变量未设置时 docker compose 会直接报错退出,
# 避免用弱口令启动。口令建议用 openssl rand -base64 24 生成。
# ============================================================
# ---------- 镜像 ----------
# 镜像仓库地址(不含末尾斜杠)。
# 基础组件从 <REGISTRY>/library/ 拉取,业务镜像从 <REGISTRY>/iotlcm/ 拉取。
REGISTRY=your-registry.example.com
# 镜像标签。生产建议用不可变标签(版本号或 commit sha),不要用 latest。
TAG=latest
# ---------- 时区 ----------
TZ=Asia/Shanghai
# ---------- 必填:数据库 ----------
# MySQL root 口令
MYSQL_ROOT_PASSWORD=change-me-strong-password
# 数据库名
MYSQL_DATABASE=db_iotlcm
# 应用连接账号 u_iotlcm 的口令(首次启动时创建)
MYSQL_APP_PASSWORD=change-me-strong-password
# admin 初始登录口令(首次启动时写入数据库)
# 登录后请立即在「个人中心」修改
MYSQL_ADMIN_PASSWORD=change-me-admin-password
# ---------- 必填:Redis ----------
REDIS_PASSWORD=change-me-strong-password
# ---------- 必填:RabbitMQ ----------
RABBITMQ_USER=iotlcm
RABBITMQ_PASSWORD=change-me-strong-password
# ---------- 必填:JWT 签名密钥 ----------
# admin-svr / openapi / app-server 必须使用同一个值,否则令牌跨服务不通用。
# 生成:openssl rand -hex 32
# 注意:更换此值会使已签发的所有登录态与接口令牌立即失效。
JWT_SIGNING_KEY=change-me-run-openssl-rand-hex-32
# ---------- 可选:智能诊断内部凭据 ----------
# admin-svr 与 upstream-proxy 必须一致。留空则该功能不可用。
DIAGNOSIS_INTERNAL_TOKEN=
# ---------- 可选:短信服务商 ----------
# 不启用短信时保持空值,并把配置里的 warning.sms.enabled 改为 false
SMS_ACCESS_KEY_ID=
SMS_ACCESS_KEY_SECRET=
# ---------- 可选:飞书通知(bot 服务) ----------
# 不启用 bot 时不填,且不启动该容器
FEISHU_APP_ID=
FEISHU_APP_SECRET=
FEISHU_CHAT_ID=
# ---------- 端口(宿主机侧) ----------
# 仅监听 127.0.0.1 的服务需通过反向代理对外
ADMIN_SVR_PORT=8008
ADMIN_UI_PORT=8009
OPENAPI_PORT=8000
APP_SERVER_PORT=8010
APP_WEB_PORT=8018
DOCS_PORT=8019
MOCK_PORT=8080
# 以下服务监听所有网卡(容器间互访也走这些端口)
MYSQL_PORT=3306
REDIS_PORT=6379
RABBITMQ_PORT=5672
RABBITMQ_MGMT_PORT=15672
CONSUL_PORT=8500
CHAN_HTTP_PORT=8110
CHAN_GRPC_PORT=8310
PROXY_PORT=8510
SMS_HTTP_PORT=11190
SMS_GRPC_PORT=11200
# nginx 对外端口(仅 --profile with-nginx)
NGINX_HTTP_PORT=80
# ---------- 可选:TDengine(流量历史) ----------
# 不启用时序库时全部留空,相关历史流量查询功能不可用,不影响主流程。
TDENGINE_HOST=
TDENGINE_PORT=6041
TDENGINE_USER=root
TDENGINE_PASSWORD=
TDENGINE_DAILY_DB=iotlcm_daily
TDENGINE_MONTHLY_DB=iotlcm_monthly