本页目录
Docker安装
ThingsBoard云服务
建议你的物联网应用程序使用ThingsBoard云服务完全托管,可扩展和容错的平台。
ThingsBoard云服务适用于想要使用ThingsBoard但又不想自己托管平台实例的每个人。
本指南将帮助你在Linux或Mac OS上使用Docker安装和启动ThingsBoard。
先决条件
运行
根据所使用的数据库有三种类型的ThingsBoard单实例docker映像:
在此说明中将使用thingsboard/tb-postgres
镜像你可以选择其他具有不同数据库的镜像(请参见上文)。
选择消息队列服务
ThingsBoard使用消息系统存储服务之间的通信,请正确选择队列?
参见相应的架构页面和规则引擎页面以获取更多详细信息。
ThingsBoard默认使用内存队列服务无需额外设置。
创建docker compose文件:
1
| nano docker-compose.yml
|
将以下行添加到yml文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| version: '3.0'
services:
mytb:
restart: always
image: "thingsboard/tb-postgres"
ports:
- "8080:9090"
- "1883:1883"
- "7070:7070"
- "5683-5688:5683-5688/udp"
environment:
TB_QUEUE_TYPE: in-memory
volumes:
- ~/.mytb-data:/data
- ~/.mytb-logs:/var/log/thingsboard
|
|
Apache Kafka是一个开源的流式数据处理平台。
创建docker compose文件:
1
| nano docker-compose.yml
|
Add the following lines to the yml file.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| version: '3.0'
services:
zookeeper:
restart: always
image: "zookeeper:3.5"
ports:
- "2181:2181"
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zookeeper:2888:3888;zookeeper:2181
kafka:
restart: always
image: wurstmeister/kafka
depends_on:
- zookeeper
ports:
- "9092:9092"
environment:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENERS: INSIDE://:9093,OUTSIDE://:9092
KAFKA_ADVERTISED_LISTENERS: INSIDE://:9093,OUTSIDE://kafka:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
volumes:
- /var/run/docker.sock:/var/run/docker.sock
mytb:
restart: always
image: "thingsboard/tb-postgres"
depends_on:
- kafka
ports:
- "8080:9090"
- "1883:1883"
- "7070:7070"
- "5683-5688:5683-5688/udp"
environment:
TB_QUEUE_TYPE: kafka
TB_KAFKA_SERVERS: kafka:9092
volumes:
- ~/.mytb-data:/data
- ~/.mytb-logs:/var/log/thingsboard
|
|
AWS SQS配置
首先需要创建AWS账户然后访问AWS SQS服务。
使用此说明创建AWS SQS服务凭证。
- Access key ID
- Secret access key
创建docker compose文件:
1
| nano docker-compose.yml
|
添加配置将”YOUR_KEY”和”YOUR_SECRET”替换为真实的AWS用户凭证并将”YOUR_REGION”替换成AWS SQS帐户区域:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| version: '3.0'
services:
mytb:
restart: always
image: "thingsboard/tb-postgres"
ports:
- "8080:9090"
- "1883:1883"
- "7070:7070"
- "5683-5688:5683-5688/udp"
environment:
TB_QUEUE_TYPE: aws-sqs
TB_QUEUE_AWS_SQS_ACCESS_KEY_ID: YOUR_KEY
TB_QUEUE_AWS_SQS_SECRET_ACCESS_KEY: YOUR_SECRET
TB_QUEUE_AWS_SQS_REGION: YOUR_REGION
# These params affect the number of requests per second from each partitions per each queue.
# Number of requests to particular Message Queue is calculated based on the formula:
# ((Number of Rule Engine and Core Queues) * (Number of partitions per Queue) + (Number of transport queues)
# + (Number of microservices) + (Number of JS executors)) * 1000 / POLL_INTERVAL_MS
# For example, number of requests based on default parameters is:
# Rule Engine queues:
# Main 10 partitions + HighPriority 10 partitions + SequentialByOriginator 10 partitions = 30
# Core queue 10 partitions
# Transport request Queue + response Queue = 2
# Rule Engine Transport notifications Queue + Core Transport notifications Queue = 2
# Total = 44
# Number of requests per second = 44 * 1000 / 25 = 1760 requests
#
# Based on the use case, you can compromise latency and decrease number of partitions/requests to the queue, if the message load is low.
# By UI set the parameters - interval (1000) and partitions (1) for Rule Engine queues.
# Sample parameters to fit into 10 requests per second on a "monolith" deployment:
TB_QUEUE_CORE_POLL_INTERVAL_MS: 1000
TB_QUEUE_CORE_PARTITIONS: 2
TB_QUEUE_RULE_ENGINE_POLL_INTERVAL_MS: 1000
TB_QUEUE_TRANSPORT_REQUEST_POLL_INTERVAL_MS: 1000
TB_QUEUE_TRANSPORT_RESPONSE_POLL_INTERVAL_MS: 1000
TB_QUEUE_TRANSPORT_NOTIFICATIONS_POLL_INTERVAL_MS: 1000
TB_QUEUE_VC_INTERVAL_MS: 1000
TB_QUEUE_VC_PARTITIONS: 1
volumes:
- ~/.mytb-data:/data
- ~/.mytb-logs:/var/log/thingsboard
|
可以使用UI更新默认规则引擎队列配置(轮询间隔和分区)有关ThingsBoard规则引擎队列的更多信息请参阅文档。
|
Google发布/订阅配置
创建一个Google帐户并访问发布/订阅服务。
使用此说明创建一个项目并使用发布/订阅服务。
使用此说明创建服务帐户凭据并编辑角色或管理员后保存json凭据步骤9的文件此处。
创建docker compose文件:
1
| nano docker-compose.yml
|
添加下面配置内容使用真正用户密码替换“YOUR_PROJECT_ID”, “YOUR_SERVICE_ACCOUNT”:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| version: '3.0'
services:
mytb:
restart: always
image: "thingsboard/tb-postgres"
ports:
- "8080:9090"
- "1883:1883"
- "7070:7070"
- "5683-5688:5683-5688/udp"
environment:
TB_QUEUE_TYPE: pubsub
TB_QUEUE_PUBSUB_PROJECT_ID: YOUR_PROJECT_ID
TB_QUEUE_PUBSUB_SERVICE_ACCOUNT: YOUR_SERVICE_ACCOUNT
# These params affect the number of requests per second from each partitions per each queue.
# Number of requests to particular Message Queue is calculated based on the formula:
# ((Number of Rule Engine and Core Queues) * (Number of partitions per Queue) + (Number of transport queues)
# + (Number of microservices) + (Number of JS executors)) * 1000 / POLL_INTERVAL_MS
# For example, number of requests based on default parameters is:
# Rule Engine queues:
# Main 10 partitions + HighPriority 10 partitions + SequentialByOriginator 10 partitions = 30
# Core queue 10 partitions
# Transport request Queue + response Queue = 2
# Rule Engine Transport notifications Queue + Core Transport notifications Queue = 2
# Total = 44
# Number of requests per second = 44 * 1000 / 25 = 1760 requests
#
# Based on the use case, you can compromise latency and decrease number of partitions/requests to the queue, if the message load is low.
# By UI set the parameters - interval (1000) and partitions (1) for Rule Engine queues.
# Sample parameters to fit into 10 requests per second on a "monolith" deployment:
TB_QUEUE_CORE_POLL_INTERVAL_MS: 1000
TB_QUEUE_CORE_PARTITIONS: 2
TB_QUEUE_RULE_ENGINE_POLL_INTERVAL_MS: 1000
TB_QUEUE_TRANSPORT_REQUEST_POLL_INTERVAL_MS: 1000
TB_QUEUE_TRANSPORT_RESPONSE_POLL_INTERVAL_MS: 1000
TB_QUEUE_TRANSPORT_NOTIFICATIONS_POLL_INTERVAL_MS: 1000
TB_QUEUE_VC_INTERVAL_MS: 1000
TB_QUEUE_VC_PARTITIONS: 1
volumes:
- ~/.mytb-data:/data
- ~/.mytb-logs:/var/log/thingsboard
|
可以使用UI更新默认规则引擎队列配置(轮询间隔和分区)有关ThingsBoard规则引擎队列的更多信息请参阅文档。
|
Azure服务总线配置
创建Azure帐户并访问Azure服务总线。
通过使用说明了解并使用总线服务。
使用说明创建共享访问签名。
创建docker compose文件:
1
| nano docker-compose.yml
|
添加下面配置内容使用真正的服务总线名称空间替换”YOUR_NAMESPACE_NAME”和”YOUR_SAS_KEY_NAME”及”YOUR_SAS_KEY”:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| version: '3.0'
services:
mytb:
restart: always
image: "thingsboard/tb-postgres"
ports:
- "8080:9090"
- "1883:1883"
- "7070:7070"
- "5683-5688:5683-5688/udp"
environment:
TB_QUEUE_TYPE: service-bus
TB_QUEUE_SERVICE_BUS_NAMESPACE_NAME: YOUR_NAMESPACE_NAME
TB_QUEUE_SERVICE_BUS_SAS_KEY_NAME: YOUR_SAS_KEY_NAME
TB_QUEUE_SERVICE_BUS_SAS_KEY: YOUR_SAS_KEY
# These params affect the number of requests per second from each partitions per each queue.
# Number of requests to particular Message Queue is calculated based on the formula:
# ((Number of Rule Engine and Core Queues) * (Number of partitions per Queue) + (Number of transport queues)
# + (Number of microservices) + (Number of JS executors)) * 1000 / POLL_INTERVAL_MS
# For example, number of requests based on default parameters is:
# Rule Engine queues:
# Main 10 partitions + HighPriority 10 partitions + SequentialByOriginator 10 partitions = 30
# Core queue 10 partitions
# Transport request Queue + response Queue = 2
# Rule Engine Transport notifications Queue + Core Transport notifications Queue = 2
# Total = 44
# Number of requests per second = 44 * 1000 / 25 = 1760 requests
#
# Based on the use case, you can compromise latency and decrease number of partitions/requests to the queue, if the message load is low.
# By UI set the parameters - interval (1000) and partitions (1) for Rule Engine queues.
# Sample parameters to fit into 10 requests per second on a "monolith" deployment:
TB_QUEUE_CORE_POLL_INTERVAL_MS: 1000
TB_QUEUE_CORE_PARTITIONS: 2
TB_QUEUE_RULE_ENGINE_POLL_INTERVAL_MS: 1000
TB_QUEUE_TRANSPORT_REQUEST_POLL_INTERVAL_MS: 1000
TB_QUEUE_TRANSPORT_RESPONSE_POLL_INTERVAL_MS: 1000
TB_QUEUE_TRANSPORT_NOTIFICATIONS_POLL_INTERVAL_MS: 1000
TB_QUEUE_VC_INTERVAL_MS: 1000
TB_QUEUE_VC_PARTITIONS: 1
volumes:
- ~/.mytb-data:/data
- ~/.mytb-logs:/var/log/thingsboard
|
可以使用UI更新默认规则引擎队列配置(轮询间隔和分区)有关ThingsBoard规则引擎队列的更多信息请参阅文档。
|
你可以使用官方文档安装RabbitMQ或按照以下说明:
创建docker compose文件:
1
| nano docker-compose.yml
|
将以下行添加到配置文件将“YOUR_USERNAME”和“YOUR_PASSWORD”替换为真实的信息将“localhost”和“5672”替换为真实的RabbitMQ主机和端口:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| version: '3.0'
services:
mytb:
restart: always
image: "thingsboard/tb-postgres"
ports:
- "8080:9090"
- "1883:1883"
- "7070:7070"
- "5683-5688:5683-5688/udp"
environment:
TB_QUEUE_TYPE: rabbitmq
TB_QUEUE_RABBIT_MQ_USERNAME: YOUR_USERNAME
TB_QUEUE_RABBIT_MQ_PASSWORD: YOUR_PASSWORD
TB_QUEUE_RABBIT_MQ_HOST: localhost
TB_QUEUE_RABBIT_MQ_PORT: 5672
volumes:
- ~/.mytb-data:/data
- ~/.mytb-logs:/var/log/thingsboard
|
|
Confluent配置
你应该创建一个帐户后访问Confluent云然后创建一个Kafka集群和 API Key。
创建docker compose文件:
1
| nano docker-compose.yml
|
添加下面配置内容使用真正的Confluent云服务器地址替换”CLUSTER_API_KEY”, “CLUSTER_API_SECRET”和”localhost:9092”:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| version: '3.0'
services:
mytb:
restart: always
image: "thingsboard/tb-postgres"
ports:
- "8080:9090"
- "1883:1883"
- "7070:7070"
- "5683-5688:5683-5688/udp"
environment:
TB_QUEUE_TYPE: kafka
TB_KAFKA_SERVERS: localhost:9092
TB_QUEUE_KAFKA_REPLICATION_FACTOR: 3
TB_QUEUE_KAFKA_USE_CONFLUENT_CLOUD: true
TB_QUEUE_KAFKA_CONFLUENT_SASL_JAAS_CONFIG: org.apache.kafka.common.security.plain.PlainLoginModule required username="CLUSTER_API_KEY" password="CLUSTER_API_SECRET";}
# These params affect the number of requests per second from each partitions per each queue.
# Number of requests to particular Message Queue is calculated based on the formula:
# ((Number of Rule Engine and Core Queues) * (Number of partitions per Queue) + (Number of transport queues)
# + (Number of microservices) + (Number of JS executors)) * 1000 / POLL_INTERVAL_MS
# For example, number of requests based on default parameters is:
# Rule Engine queues:
# Main 10 partitions + HighPriority 10 partitions + SequentialByOriginator 10 partitions = 30
# Core queue 10 partitions
# Transport request Queue + response Queue = 2
# Rule Engine Transport notifications Queue + Core Transport notifications Queue = 2
# Total = 44
# Number of requests per second = 44 * 1000 / 25 = 1760 requests
#
# Based on the use case, you can compromise latency and decrease number of partitions/requests to the queue, if the message load is low.
# By UI set the parameters - interval (1000) and partitions (1) for Rule Engine queues.
# Sample parameters to fit into 10 requests per second on a "monolith" deployment:
TB_QUEUE_CORE_POLL_INTERVAL_MS: 1000
TB_QUEUE_CORE_PARTITIONS: 2
TB_QUEUE_RULE_ENGINE_POLL_INTERVAL_MS: 1000
TB_QUEUE_TRANSPORT_REQUEST_POLL_INTERVAL_MS: 1000
TB_QUEUE_TRANSPORT_RESPONSE_POLL_INTERVAL_MS: 1000
TB_QUEUE_TRANSPORT_NOTIFICATIONS_POLL_INTERVAL_MS: 1000
TB_QUEUE_VC_INTERVAL_MS: 1000
TB_QUEUE_VC_PARTITIONS: 1
volumes:
- ~/.mytb-data:/data
- ~/.mytb-logs:/var/log/thingsboard
|
可以使用UI更新默认规则引擎队列配置(轮询间隔和分区)有关ThingsBoard规则引擎队列的更多信息请参阅文档。
|
说明:
docker run
- 运行容器
-it
- 将终端会话与当前ThingsBoard进程输出连接
8080:9090
- 将本地端口8080转发至HTTP端口9090
1883:1883
- 将本地端口1883转发至MQTT端口1883
5683:5683
- 将本地端口5683转发至MQTT端口5683
~/.mytb-data:/data
- 将主机的目录~/.mytb-data
挂载到ThingsBoard数据目录
~/.mytb-logs:/var/log/thingsboard
- 将主机的目录~/.mytb-logs
挂载到ThingsBoard日志目录
mytb
- 计算机本地名称
restart: always
- 在系统重新启动的情况下自动启动ThingsBoard在出现故障的情况下自动重新启动ThingsBoard。
image: thingsboard/tb-postgres
- docker镜像也可以是thingsboard/tb-cassandra
或thingsboard/tb
在启动Docker容器之前请运行以下命令以创建用于存储数据和日志的目录然后将其所有者更改为Docker容器用户,以便能够更改用户使用chown命令该命令需要sudo权限(该命令将要求sudo访问的密码):
1
2
| mkdir -p ~/.mytb-data && sudo chown -R 799:799 ~/.mytb-data
mkdir -p ~/.mytb-logs && sudo chown -R 799:799 ~/.mytb-logs
|
注意:使用~/.mytb-data
和~/.mytb-logs
目录替换目录docker-compose.yml
文件中设置的目录
在包含该文件的目录终端中执行以下命令启动此docker compos:docker-compose.yml
1
2
3
| docker compose pull
docker compose up -d
docker compose logs -f mytb
|
ThingsBoard3.4.2版本开始支持Docker Compose V2(Docker Desktop或Compose插件)因为Docker不再支持docker-compose作为独立设置。
我们强烈建议更新到Docker Compose V2 使用它。
更新最新镜像docker-compose命令:
docker-compose pull
docker-compose up -d
docker-compose logs -f mytb
执行完命令后你可以http://{your-host-ip}:8080
在浏览器中打开(例如http://localhost:9090
)。
使用以下默认凭据:
- System Administrator: sysadmin@thingsboard.org / sysadmin
- Tenant Administrator: tenant@thingsboard.org / tenant
- Customer User: customer@thingsboard.org / customer
可以在帐户详情页面中更改每个帐户的密码。
分离、停止和启动
你可以使用Ctrl-p
Ctrl-q
与会话终端分离容器将继续在后台运行。
如果出现任何问题可以检查服务日志中的错误例如:要查看ThingsBoard容器日志。
请执行以下命令:
1
| docker compose logs -f mytb
|
停止容器:
1
| docker compose stop mytb
|
启动容器:
1
| docker compose start mytb
|
Docker Compose已被弃用建议使用Docker Compose V2
更新最新镜像docker-compose命令:
docker-compose logs -f mytb
docker-compose stop mytb
docker-compose start mytb
升级
为了更新到最新的镜像请执行以下命令:
1
2
3
4
5
| docker pull thingsboard/tb-postgres
docker compose stop
docker run -it -v ~/.mytb-data:/data --rm thingsboard/tb-postgres upgrade-tb.sh
docker compose rm mytb
docker compose up
|
注意: 如果你使用不同的数据库,则在所有命令中将映像名称从更改为thingsboard/tb-postgres
至 thingsboard/tb-cassandra
或 thingsboard/tb
。
注意: 将主机的目录替换为~/.mytb-data
容器创建期间使用的目录。
注意:如果你使用了一个数据库并想尝试另一个数据库则使用docker-compose rm
命令删除当前的docker容器,并在docker-compose.yml
中修改成~/.mytb-data
目录。
更新最新镜像docker-compose命令:
docker pull thingsboard/tb-postgres
docker-compose stop
docker run -it -v ~/.mytb-data:/data –rm thingsboard/tb-postgres upgrade-tb.sh
docker-compose rm mytb
docker-compose up
故障排查
DNS问题
注意:如果你发现与DNS问题相关的错误,例如
1
| 127.0.1.1:53: cannot unmarshal DNS message
|
你可以将系统配置为使用 Google公共DNS服务器。
请参阅相应的Linux和Mac OS说明
下一步
-
入门指南 - 快速学习ThingsBoard相关功能。
-
连接设备 - 学习如何根据你的连接方式或解决方案连接设备。
-
可 视 化 - 学习如何配置复杂的ThingsBoard仪表板说明。
-
数据处理 - 学习如何使用ThingsBoard规则引擎。
-
数据分析 - 学习如何使用规则引擎执行基本的分析任务。
-
硬件样品 - 学习如何将各种硬件平台连接到ThingsBoard。
-
高级功能 - 学习高级ThingsBoard功能。
-
开发指南 - 学习ThingsBoard中的贡献和开发。