运行镜像需要服务器至少配备4GB内存(建议8GB)并很低的负载(每秒几条消息)。
前提条件
安装Docker
轻量应用服务器 安装 Docker 并配置镜像加速源_腾讯云
选择ThingsBoard队列服务
ThingsBoard 平台目前支持两种类型的消息代理,用于存储 ThingsBoard 服务之间的消息和通信:内存代理和基于 Kafka 的代理。
在内存队列中,该实现是内置且默认的。 它适用于开发(PoC)环境,不适合生产部署或任何类型的集群部署。
Kafka 推荐用于生产部署。该队列目前在大多数 ThingsBoard 生产环境中被使用。 它适用于本地部署和私有云部署。
这里使用kafka的方案:
为 ThingsBoard 队列服务创建 docker compose 文件:
nano docker-compose.yml在 yml 文件中添加以下几行。
services:
postgres:
restart: always
image: "postgres:16"
ports:
- "5432"
environment:
POSTGRES_DB: thingsboard
POSTGRES_PASSWORD: postgres
volumes:
- postgres-data:/var/lib/postgresql/data
kafka:
restart: always
image: bitnamilegacy/kafka:4.0
ports:
- 9092:9092 #to localhost:9092 from host machine
- 9093 #for Kraft
environment:
ALLOW_PLAINTEXT_LISTENER: "yes"
KAFKA_CFG_LISTENERS: "PLAINTEXT://:9092,CONTROLLER://:9093"
KAFKA_CFG_ADVERTISED_LISTENERS: "PLAINTEXT://:9092"
KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: "CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT"
KAFKA_CFG_INTER_BROKER_LISTENER_NAME: "PLAINTEXT"
KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "false"
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: "1"
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: "1"
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: "1"
KAFKA_CFG_PROCESS_ROLES: "controller,broker" #KRaft
KAFKA_CFG_NODE_ID: "0" #KRaft
KAFKA_CFG_CONTROLLER_LISTENER_NAMES: "CONTROLLER" #KRaft
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: "0@kafka:9093" #KRaft
KAFKA_CFG_LOG_RETENTION_MS: "300000"
KAFKA_CFG_SEGMENT_BYTES: "26214400"
volumes:
- kafka-data:/bitnami
thingsboard-ce:
restart: always
image: "thingsboard/tb-node:4.2.1.1"
ports:
- "8080:8080"
- "7070:7070"
- "1883:1883"
- "8883:8883"
- "5683-5688:5683-5688/udp"
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "10"
environment:
TB_SERVICE_ID: tb-ce-node
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/thingsboard
TB_QUEUE_TYPE: kafka
TB_KAFKA_SERVERS: kafka:9092
depends_on:
- postgres
- kafka
volumes:
postgres-data:
name: tb-postgres-data
driver: local
kafka-data:
name: tb-ce-kafka-data
driver: local
其中:
8080:8080- 将本地端口8080连接到暴露的内部HTTP端口80801883:1883- 将本地端口1883连接到暴露的内部MQTT端口18838883:8883- 通过SSL端口8883将本地端口8883连接到暴露的内部MQTT7070:7070- 将本地端口7070连接到暴露的内部Edge RPC端口70705683-5688:5683-5688/udp- 将本地UDP端口5683-5688连接到暴露的内部COAP和LwM2M端口tb-postgres-data- 存储PostgreSQL数据的docker卷名称thingsboard-ce- ThingsBoard 容器的友好本地名称restart: always- 系统重启时自动启动ThingsBoard,故障时重启。image: "thingsboard/tb-node:4.2.1.1"- ThingsBoard Docker 镜像和版本。
初始化数据库模式和系统资产
在启动ThingsBoard之前,先通过运行以下程序初始化数据库模式并加载内置资源:
docker compose run --rm -e INSTALL_TB=true -e LOAD_DEMO=true thingsboard-ce环境变量:
INSTALL_TB=true- 安装核心数据库模式和系统资源(小部件、图片、规则链等)。LOAD_DEMO=true- 加载示例租户账户、仪表盘和设备,用于评估和测试。
启动平台并查看日志
以分离模式启动所有容器,然后跟踪 ThingsBoard 日志:
docker compose up -d && docker compose logs -f thingsboard-ce执行此命令后,你可以在浏览器中打开(例如 http://localhost:8080 或 http://{你的服务器IP}:8080)。你应该能看到 ThingsBoard 的登录页面。请使用以下默认凭据登录:
系统管理员:
sysadmin@thingsboard.org/sysadmin租户管理员:
tenant@thingsboard.org/tenant客户用户:
customer@thingsboard.org/customer
可以随时在 “账户资料” 页面修改每个账户的密码。
可以安全地退出日志流(按 Ctrl+C),容器将继续在后台运行。


检查日志 & 控制容器生命周期
如果出现问题,你可以实时查看 ThingsBoard 容器日志:
docker compose logs -f thingsboard-ce停止并删除 Compose 文件中定义的所有容器:
docker compose down以后台模式启动所有服务:
docker compose up -d升级
你必须逐个版本进行升级(例如 4.0.2 -> 4.1.0 -> 4.2.0 等)。
当有新的 CE 版本发布时,请按照以下步骤更新你的安装,而不会丢失数据:
在
docker-compose.yml文件中,将thingsboard/tb-node的版本号修改为新版本(例如 4.2.1.1)。执行以下命令:
docker pull thingsboard/tb-node:4.2.1.1
docker compose stop thingsboard-ce
docker compose run --rm -e UPGRADE_TB=true thingsboard-ce
docker compose up -d