前言
作为一个小白,看了很多博客,问了很多大佬,终于可以把这个平台搭起来,我搭平台主要借鉴了基于docker部署thingsboard+tb-gateway+emqx详细教程这篇文章,大佬写的很详细,但是我在搭建的过程中还是遇到了很多问题,好在都解决了,我把这篇文章作为我复盘的一个学习笔记,欢迎各路大佬指正其中的问题,我将不胜感激!!!!
配置docker环境(关闭防火墙!!!)
接下来配置国内docker镜像仓库(有时候国外的可能会很慢,或者连接出问题,这里用阿里云为例)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxxxxx.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
阿里云:开放云原生应用-云原生(Cloud Native)-云原生介绍 - 阿里云
查看镜像源是否修改完成
docker info
看到 Registry Mirrors后面的地址是阿里云仓库地址就成功了
docker环境就配置完成了。
安装及配置postgres数据库
根据 thingsboard 的官方文档,thingsboard 的 docker 镜像里是带了 postgres 数据库的,但是postgres有权限问题。
解决办法就是不用 thingsboard 镜像内自带的 postgres 数据库,在环境变量中将连接的数据库地址指向我们自己创建的 postgres 数据库。所以第一步就是用 docker 去创建一个 postgres 数据库。
docker pull postgres:13.0
利用docker拉取版本号为13.0的postgres镜像。
docker images
查看docker的镜像
创建并启动docker容器
docker run --name postgres13 -e POSTGRES_PASSWORD=postgres -p 5432:5432 -v /root/thingsboard/pgdata:/var/lib/postgresql/data -d postgres:13.0
- name:将容器命名
- -e:设置环境变量,这里‘-e POSTGRES_PASSWORD=postgres’表示将环境变量中的数据库密码设置为posstgres
- -p:进行端口映射,左边是服务器的端口,右边是容器内的端口
- -v:进行目录映射,将服务器的‘/root/thingsboard/pgdata’映射到容器的‘/var/lib/postgresql/data’,这样这两个目录就可以关联起来了,容器的目录是储存数据库数据的目录,数据就会备份到本地,同理,在服务器修改的数据库配置文件也可以反应得到。
- -d:让容器后台运行
注意:postgres 镜像默认的用户名为 postgres
注意:我在运行的时候会发现docker容器跑不起来,于是就查看了日志
docker logs 容器id
发现是由于docker容器没有宿主机的权限造成的结果,这里是因为我之前运行docker
的时候没有关掉防火墙,运行docker的时候千万要关掉防火墙!千万要关掉防火墙!千万要关掉防火墙!
使用 docker ps 查看postgres容器状态
切换到 /root/thingsboard/pgdata 目录发现目录下数据库已经创建好数据了
现在可以试着用pgadmin连接一下数据库看一下数据库的状态
创建一个thingsboard数据库, 启动镜像的时候会对数据进行初始
启动thingsboard镜像
根据 thingsboard 官方文档,想启动 thingsboard 镜像,除了需要安装 docker
,还需要再安装 docker compose
下载docker compose二进制文件
下载地址:
赋予可执行权限
sudo chmod +x /usr/local/bin/docker-compose
运行下列命令看看是否成功
docker-compose --version
显示如下就是成功了
按照 thingsboard 官方文档,接下来就是创建一个 docker-compose.yml 文件了,这里该文件的内容和官方文档里的就有些差别了。因为官方文档的默认使用内部数据库,所以yum文件需要自己来修改
version: '2.2'
services:
mytb:
restart: always
image: "thingsboard/tb-postgres:3.2.1"
ports:
- "8080:9090"
- "1884:1883"
- "7070:7070"
- "5683-5688:5683-5688/udp"
environment:
- TB_QUEUE_TYPE=in-memory
- SPRING_DATASOURCE_URL=jdbc:postgresql://xxx.xxx.xxx.xxx:5432/thingsboard
- SPRING_DATASOURCE_USERNAME=postgres
- SPRING_DATASOURCE_PASSWORD=postgres
下面简单解释一下
1884:1883,因为后面使用的eqmx需要1883所以把thingsboard 的 1883 端口映射为服务器的 1884 端口.
TB_QUEUE_TYPE=in-memory: 这是一个自定义的环境变量,用于配置 ThingsBoard(物联网平台)的消息队列类型,这里设置为 "in-memory"。
SPRING_DATASOURCE_URL=jdbc:postgresql://xxx.xxx.xxx.xxx:5432/thingsboard: 这是一个 Spring Boot 应用程序中用于配置数据库连接的环境变量。它指定了连接到 PostgreSQL 数据库的 JDBC URL。具体来说,这里的 URL 表示连接到 IP 地址为 xxx.xxx.xxx.xxx
、端口号为 5432
、数据库名为 thingsboard
的 PostgreSQL 数据库。这里的ip地址填你自己的云服务器地址,我是写docker的网关地址。
后面两个就不用说了。
这里可以把 docker-compose.yml
文件放到 /root/thingsboard/
目录下,然后我们在该目录下运行
docker-compose pull
docker-compose up
看到 Installing finished successfully!说明数据库初始化成功。
在服务器的防火墙中放开 8080
、1884
、7070
、5683-5688
这几个端口(因为之前已经关闭防火墙了,所以这一步不需要操作)
浏览器中访问 ip地址:8080
,就可以看到 thingsboard 的登陆界面了,如下图
默认系统管理员账号: 用户名:sysadmin@thingsboard.org 密码:sysadmin
默认租户管理员帐户: 用户名:tenant(租客)@thingsboard.org 密码:tenant
thingsboard平台就搭建完成了,接下来,就要使用gateway将thingsboard和emqx进行连接
安装tb-gateway
docker run -it -v ~/.tb-gateway/logs:/thingsboard_gateway/logs -v ~/.tb-gateway/extensions:/thingsboard_gateway/extensions -v ~/.tb-gateway/config:/thingsboard_gateway/config --name tb-gateway --restart always thingsboard/tb-gateway
-v 挂载目录后,可以直接通过修改 ~/.tb-gateway/config对tb-gateway 的文件,从而对配置文件进行修改。
安装emqx
可以参考以下博客文档,写的很详细
emqx的持久化配置可以参考这篇博客:EMQX 免费版 docker安装并配置持久化到服务器
安装命令(这里没有挂载目录)
docker run -d --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:v4.0.0
安装完成后查看emqx的实时日志,显示这里成功了
成功启动后,我们根据官方文档可以通过访问 ip地址:18083 来访问我们创建的emqx。
看到这个登录界面就成功了
默认用户名是 admin
,密码是 public
登录成功后,可以到 admin-setting-language 设置中文
配置emqx通过tb-gateway连接到thingsboard
首先打开thingsboard平台,切换为租户管理员,再创建新设备设置一个网关,如下图
打开管理凭据,记住这个访问令牌,之后会用到
查看隐藏文件夹打开修改tb-gtaeway文件(路径如下图)
ls -a #用来显示所有文件,包括以点(.)开头的隐藏文件。
打开后如下图
注意:这里写错了,accesstoken一定要按照它的格式写,前面要加空格,不然连接不上,
我这里写错了,没加空格!!!!
这里只需要将host主机名改成服务器的IP地址,将 accesstoken改为之前创建网关的访问令牌保存后再退出。重启tb网关。
docker restart tb-gateway
进入 /root/.tb-gateway/config 目录 打开 mqtt.json文件
#将host改为emqx的服务器ip
#将端口改为emqx的端口
#将username和password改为emqx所登录的用户名和密码
这里是我改的 :
docker restart tb-gateway
就可以成功连接