核心区分:授权协议(商用是否免费)、多租户 SaaS 能力、工业协议适配、二次开发难度、资源开销。

商用红线提醒:AGPL 协议项目,如果你对外提供服务 / 私有化交付,修改后的源码必须开源;Apache2.0无强制开源义务,商用最安全。
一、首选梯队(Apache2.0,无版权风险,适合商业项目交付)
1. ThingsBoard(全球标杆)
Github:https://github.com/thingsboard/thingsboard
- 技术栈:Java + Angular
- 授权:Apache2.0|社区版免费商用,无设备数量限制 ✅ 优势
- 顶级拖拽规则引擎、海量可视化组件、告警体系完善;原生支持多租户(客户隔离),适合做 SaaS 物联网平台;
- 配套 ThingsBoard Edge 边缘端,完美打通「边缘采集 + 云端平台」;
- 协议:MQTT/CoAP/HTTP/WebSocket,对接 Neuron 工业网关非常顺滑;
- 国际化文档,社区庞大,行业案例极多(智慧能源、园区、设备厂商运维平台)。 ❌ 劣势
- 内存占用偏高;前端 Angular,国内二次定制 UI 成本高于 Vue 项目;原生缺少 Modbus 等工业协议驱动,依赖边缘网关转发。 👉 适用:设备厂商运维平台、跨行业通用物联网项目、对外 SaaS 服务
2. JetLinks 社区版(国产工业向首选)
Github:https://github.com/jetlinks/jetlinks-community
- 技术栈:SpringBoot + Reactor + Vue3
- 授权:Apache2.0,自由商用 ✅ 优势
- 国产响应式高并发架构,物模型、协议插件化;支持 TCP/MQTT/Modbus、GB28181 视频;
- SQL 规则引擎,适合工业数据流处理;完善权限、多租户、设备影子、OTA;
- Java 生态,国内开发者上手友好,大量工业物联网落地案例;
- 原生支持对接 Neuron、EMQX,工业采集场景契合度极高。 ❌ 劣势
- 学习曲线偏高;默认依赖 Elasticsearch,部署组件较多。 👉 适用:工业物联网、智慧水务 / 能源、系统集成商项目交付
3. ThingsPanel(轻量化快速落地)
Github:https://github.com/ThingsPanel/ThingsPanel
- 技术栈:Golang + Vue3
- 授权:Apache2.0 ✅ 优势
- 资源占用极低,x86/ARM 网关均可流畅运行;部署最简单,单容器启动;
- 中文界面、组态大屏、告警、设备分组;开箱即用;
- 适合中小型项目、边缘本地平台、中小集成商快速交付。 ❌ 劣势
- 复杂大规模集群能力弱;社区版无官方白标,高级多租户隔离有限。 👉 适用:中小型产线监控、小型私有化项目、搭配 Neuron 工业采集链路
二、国产 SaaS 向开源平台(适合做多租户运营平台,注意开源协议)
1. ThingLinks
Gitee:mqttsnet/thinglinks
- SpringCloud 微服务、多租户 SaaS 架构;百万并发接入;插件协议扩展
- 适合计划自建物联网 PaaS 底座、承接多个项目;集群友好。
2. DGIOT(迪格云)
https://github.com/dgiot/dgiot Go 开发,内置 Modbus、电力规约;信创适配,面向工业、能源;内置网关能力。
3. 联犀 unitedrhino/things
GoZero 微服务,原生多租户、支持小程序,适合消费类物联网(充电桩、暖通设备)。
⚠️ FastBee、NexIoT:社区版为AGPL3.0 协议 如果你私有化部署交付给客户,按照协议需要开放修改后的源码;商业使用建议直接购买官方商业授权,不建议直接拿社区版商用交付。
三、商用平台选型对照表
表格
| 平台 | 开源协议 | 多租户 | 工业适配 | 语言 | 内存开销 | 最佳场景 |
|---|---|---|---|---|---|---|
| ThingsBoard CE | Apache2.0 | ✅完善 | ⭐⭐⭐(依赖边缘网关) | Java | 中高 | 通用商用 SaaS、设备厂商平台 |
| JetLinks 社区版 | Apache2.0 | ✅完善 | ⭐⭐⭐⭐⭐ | Java | 中 | 工业采集、能源水务大型项目 |
| ThingsPanel | Apache2.0 | 基础多租户 | ⭐⭐⭐⭐ | Go | 低 | 中小型私有化、边缘配套平台 |
| ThingLinks | Apache2.0 | ✅SaaS 多租户 | ⭐⭐⭐⭐ | Java | 中高 | 微服务集群、PaaS 底座 |
| DGIOT | Apache2.0 | ✅ | ⭐⭐⭐⭐⭐ | Go | 低 | 电力、工控、信创项目 |
四、两套成熟商用交付架构(可以直接用于项目投标)
方案 A|工业采集商用项目(你上一轮关注场景)
现场 PLC / 仪表 → Neuron(协议采集) → EMQX → JetLinks / ThingsPanel + Apache IoTDB
- Neuron:Modbus/OPC UA/S7 采集,协议转换
- EMQX:消息总线(注意新版本 EMQX 为 BSL 协议,商用集群建议购买商业授权,单机小规模内部使用不受限)
- JetLinks:大型工厂、多厂区项目首选
- ThingsPanel:中小型产线、预算有限项目
方案 B|通用设备厂商商用运维平台(充电桩、暖通、环保设备)
设备终端 (MQTT) → EMQX → ThingsBoard + IoTDB 优势:成熟租户隔离、仪表盘组件丰富,直接给客户独立账号查看设备。
五、商用项目重要避坑
- 优先选择 Apache2.0 项目,避开 AGPL,避免源码开源纠纷;
- EMQX 5.9+ 采用 BSL 协议:如果你对外提供托管云服务,必须采购商业授权;私有化部署给单个客户,限制条件较少,务必细读协议;
- 工业场景不要让平台直连 PLC;边缘网关隔离内网,安全合规;
- 社区版无官方技术支持,重大项目建议预留技术外包 / 商业授权预算;
- 白标(去除平台 logo、改成自有品牌):ThingsBoard、JetLinks 社区版需要前端自行二次开发;企业版提供官方白标。
快速选型建议
- 做工业物联网项目交付 → JetLinks
- 做通用设备厂商 SaaS 运维平台 → ThingsBoard
- 资源有限、快速交付中小型项目 → ThingsPanel
两套商用交付完整 Docker Compose
协议说明: JetLinks / ThingsPanel / Neuron / Apache IoTDB:Apache2.0,商用无开源强制要求 EMQX 5.x:BSL,单机私有化交付给单一客户一般可用;对外 SaaS 托管建议采购商业授权
方案 1:中小型商用|Neuron + EMQX + ThingsPanel + IoTDB
适用:小型工厂、环保设备、充电桩、中小型私有化项目 新建 compose-thingspanel.yml
version: "3.8"
services:
emqx:
image: emqx/emqx:5.8.4
container_name: emqx
restart: always
ports:
- "1883:1883"
- "8083:8083"
- "18083:18083"
environment:
TZ: Asia/Shanghai
EMQX_ALLOW_ANONYMOUS: "false"
volumes:
- emqx_data:/opt/emqx/data
neuron:
image: emqx/neuron:2.6.0
container_name: neuron
restart: always
ports:
- "7001:7001"
volumes:
- neuron_data:/opt/neuron/persistence
depends_on:
- emqx
extra_hosts:
- "host.docker.internal:host-gateway"
thingspanel:
image: thingspanel/thingspanel:latest
container_name: thingspanel
restart: always
ports:
- "8080:8080"
environment:
TZ: Asia/Shanghai
volumes:
- tp_data:/app/data
depends_on:
- emqx
iotdb:
image: apache/iotdb:1.3.2-standalone
container_name: iotdb
restart: always
ports:
- "6667:6667"
environment:
TZ: Asia/Shanghai
volumes:
- iotdb_data:/iotdb/data
- iotdb_logs:/iotdb/logs
volumes:
emqx_data:
neuron_data:
tp_data:
iotdb_data:
iotdb_logs:
启动命令
docker-compose -f compose-thingspanel.yml up -d
访问地址
- Neuron:http://ip:7001 admin / 0000
- EMQX:http://ip:18083 admin / public
- ThingsPanel:http://ip:8080 admin@thingspanel.io / 123456
- IoTDB:root/root 6667 端口
方案 2:大型工业商用|Neuron + EMQX + JetLinks 社区版 + IoTDB
适用:多厂区、水务、能源、需要对接 MES/ERP 的中大型项目 新建 compose-jetlinks.yml
version: '3.8'
services:
emqx:
image: emqx/emqx:5.8.4
container_name: emqx
restart: always
ports:
- "1883:1883"
- "18083:18083"
environment:
TZ: Asia/Shanghai
EMQX_ALLOW_ANONYMOUS: "false"
volumes:
- emqx_data:/opt/emqx/data
neuron:
image: emqx/neuron:2.6.0
container_name: neuron
restart: always
ports:
- "7001:7001"
volumes:
- neuron_data:/opt/neuron/persistence
depends_on:
- emqx
extra_hosts:
- "host.docker.internal:host-gateway"
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0
container_name: elasticsearch
restart: always
environment:
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- TZ=Asia/Shanghai
ports:
- "9200:9200"
volumes:
- es_data:/usr/share/elasticsearch/data
redis:
image: redis:6-alpine
container_name: redis
restart: always
ports:
- "6379:6379"
volumes:
- redis_data:/data
jetlinks:
image: jetlinks/jetlinks-community:latest
container_name: jetlinks
restart: always
ports:
- "8800:8800"
environment:
TZ: Asia/Shanghai
SPRING_ELASTICSEARCH_URI: http://elasticsearch:9200
SPRING_REDIS_HOST: redis
depends_on:
- elasticsearch
- redis
- emqx
iotdb:
image: apache/iotdb:1.3.2-standalone
container_name: iotdb
restart: always
ports:
- "6667:6667"
environment:
TZ: Asia/Shanghai
volumes:
- iotdb_data:/iotdb/data
- iotdb_logs:/iotdb/logs
volumes:
emqx_data:
neuron_data:
es_data:
redis_data:
neuron_data:
iotdb_data:
iotdb_logs:
启动命令
docker-compose -f compose-jetlinks.yml up -d
访问地址
- JetLinks:http://ip:8800 admin / admin
- Neuron、EMQX、IoTDB 同上
标准链路配置流程(商用项目通用步骤)
1. Neuron 配置(工业采集网关)
- 南向:添加驱动 Modbus TCP / S7 / OPC UA,填写 PLC 地址、寄存器点位
- 北向 → 添加 MQTT 应用
- Broker 地址:
emqx:1883 - 关闭匿名时,填写 EMQX 创建的账号密码
- 上报主题建议规范:
industrial/${设备组}/${设备名称}
- Broker 地址:
- 创建点位组,绑定南向点位转发至北向 MQTT
2. EMQX 安全配置(商用必做)
- 关闭匿名访问(compose 已配置 EMQX_ALLOW_ANONYMOUS: false)
- 创建两套账号:
- Neuron 使用的发布账号
- 平台(ThingsPanel/JetLinks)订阅账号
- 配置 ACL 权限,限制 topic 访问范围
3. 平台接入 EMQX
ThingsPanel
- 接入管理 → MQTT 接入
- 服务地址:
emqx:1883,填入订阅账号 - 订阅 Neuron 上报主题,配置物模型自动解析测点
JetLinks
- 消息网关 → MQTT 客户端,连接 EMQX
- 定义设备协议、消息解析脚本,映射采集点位
商用环境优化清单(正式交付务必执行)
- 修改所有默认账号密码
- EMQX、平台开启 TLS/SSL 加密
- 服务器防火墙仅开放必要端口,不要全网暴露
- 配置定时数据备份(IoTDB、平台业务数据)
- 生产环境关闭容器日志控制台输出,避免磁盘占满
- 如使用公网部署,前端增加 Nginx 反向代理 + HTTPS
