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
@@ -0,0 +1,139 @@
# ============================================================
# iotlcm-worker-svr 配置示例
#
# cp config.example.yaml config.yaml
#
# 本服务是异步中枢:消费 RabbitMQ 队列,执行批次开停复机、
# 全量同步、流量统计等后台任务。
# ============================================================
system:
name: "IotLCM"
version: "1.0"
description: "IotLCM Worker"
gfmode: "prod"
upload:
local:
path: "resource/upload"
logger:
path: "/app/logs"
file: "{Y-m-d-H}.log"
prefix: ""
level: "all"
timeFormat: "2006-01-02T15:04:05"
ctxKeys: []
header: true
stdout: true
rotateSize: 0
rotateExpire: 0
rotateBackupLimit: 0
rotateBackupExpire: 0
rotateBackupCompress: 0
rotateCheckInterval: "1h"
stdoutColorDisabled: false
writerColorEnable: false
# ---------- 数据库 ----------
database:
logger:
path: "/app/logs/sql"
level: "all"
stdout: true
default:
# 必改:连接串
link: "mysql:u_iotlcm:${MYSQL_APP_PASSWORD}@tcp(mysql:3306)/${MYSQL_DATABASE}?charset=utf8mb4&parseTime=True&loc=Asia%2FShanghai"
debug: false
charset: "utf8mb4"
dryRun: false
maxIdle: 30
maxOpen: 100
maxLifetime: 120
memorydb:
link: "sqlite::@file(:memory:)"
debug: false
maxIdle: 1
maxOpen: 1
maxLifetime: 30
cache:
adapter: "redis"
fileDir: "resource/cache"
# ---------- Redis ----------
redis:
default:
mode: "single"
sentinelMasterName: ""
address: "redis:6379"
db: 0
pass: "${REDIS_PASSWORD}"
minIdle: 5
maxIdle: 30
maxActive: 5000
idleTimeout: "60s"
ClientName: "WorkerCache"
# ---------- RabbitMQ ----------
rabbitmq:
enabled: true
dsn: "amqp://${RABBITMQ_USER}:${RABBITMQ_PASSWORD}@rabbitmq:5672/"
balanceRecharge:
retryDelay: "1m"
batchExecute:
executionTimeout: "0s"
finalizationTimeout: "60s"
retryDelay: "30s"
maxRetries: 3
# ---------- 批次执行 ----------
batch:
allocate:
processingRetryAfter: "30m"
inbound:
upstreamBatchSize: 1
upstreamConcurrency: 300
# 运营商接口限流。必须按上游实际配额设置,
# 调太大会被运营商限流甚至封禁。
upstreamRateLimit:
enabled: true
mode: "redis"
redisGroup: "default"
keyPrefix: "iotlcm:worker:inbound:upstream_basic_info"
redisFailureFallback: "error"
default:
enabled: false
carriers:
mobile:
enabled: false
telecom:
enabled: true
qps: 20
burst: 1
requestCost: 1
channels: {}
stockQueryBatchSize: 1000
writeBatchSize: 1000
# ---------- TDengine(流量历史) ----------
# 不启用时序库时 dsn 留空,全量同步中的流量历史部分不可用。
tsdb:
database: "TdEngine"
tdengine:
type: "taosWS"
dsn: "${TDENGINE_USER}:${TDENGINE_PASSWORD}@ws(${TDENGINE_HOST}:${TDENGINE_PORT})/"
# dbName 只是连接池键名与兜底值,不决定实际访问哪个库
dbName: "${TDENGINE_DAILY_DB}"
dailyDbName: "${TDENGINE_DAILY_DB}"
monthlyDbName: "${TDENGINE_MONTHLY_DB}"
maxOpenConns: 100
maxIdleConns: 10
# ---------- 上游服务地址 ----------
upstream:
proxy:
address: "upstream-proxy:8510"
# 异步提交协议版本,保持默认
apnAsyncProtocolVersion: 1
timeout: 10s