当ThingsBoard需要与第三方服务交互数据时就需要用到网关,这个在官方社区版安装镜像里是不包含的,需要单独安装。
第一步:准备工作
我使用的环境是win10+wsl2+docker desktop,安装前需要先安装好ThingsBoard,安装方法
在D盘根目录新建“gateway”目录(可以根据自己实际情况调整),然后在gateway下新建config、extensions、logs三个子目录。
第二步:在上一步创建的gateway目录下新建docker-compose.yml,内容如下:
version: '2.2'
services:
my_tb_gateway:
image: "thingsboard/tb-gateway"
container_name: "tb-gateway"
volumes:
# 映射下面三个目录
- /D/thinsboard/gateway/config:/thingsboard_gateway/config
- /D/thinsboard/gateway/extensions:/thingsboard_gateway/extensions
- /D/thinsboard/gateway/logs:/thingsboard_gateway/logs
第三步:在gateway目录下依次运行以下命令,启动网关,启动后会报错,连接超时,这是正常的,因为我们还没有配置。
docker-compose pull
docker-compose up
第四步:配置网关
1、获取thingsboard服务器的ip和令牌
由于我的thingsboard也是运行在本机的docker中,所以通过以下命令可以得到ip,这里要注意网关的容器和这个容器如果不在一个网络下,就不能用这个ip了,文章末尾有解决办法
docker inspect 运行thingsboard容器的id
使用租户管理员登陆thingsboard,
打开设备,添加设备,按下图填写,然后点击“添加”。
打开添加好的“网关”设备,点击复制令牌,将令牌粘贴到安全的地方。在接下来的步骤中,我们将其用于网关配置。
2、编辑网关配置文件D:\thinsboard\gateway\config\tb_gateway.yaml(你的目录可能跟我的不一样),修改下面两处
3、重启tb-gateway镜像,看到下面的提示代表连接成功
可能出现的问题:这里如果出现连接超时,有可能网关容器和thingsboard容器不在一个网络内,默认docker容器会创建自己的网络,如果在启动时没有指定网络,那么两个容器之间是没法通过ip进行通信的。有两种解决办法:
1、可以创建一个桥接网络,然后将两个容器都连接到这个桥接网络。
2、将需要通信的端口映射到主机,通过主机ip通信