开源的物联网平台thingsboard部署
# 服务器准备工作
centos 7
docker
docker-compose
暂时关闭防火墙
部署过程中遇到的问题我也在最后的目录中记录下来了 感谢东哥解惑
# 安装postgresql
- 创建
/opt/docker/docker-compose.yml
文件
version: '3.5'
services:
timescaledb:
image: timescale/timescaledb:1.7.1-pg12
container_name: basic-timescaledb
restart: unless-stopped
ports:
- 5432:5432
environment:
POSTGRES_PASSWORD: *****
volumes:
- ./data:/var/lib/postgresql/data
2
3
4
5
6
7
8
9
10
11
12
跑一下
docker-compose up
- 如果 容器运行起来了 就可以用 Navicat Premium 连接一下
- 连接成功后创建数据库
thingsboard
(名字随便起)
- 连接成功后创建数据库
# 为 docker配置远程连接
(https://blog.csdn.net/po__oq/article/details/106229575)
- 通过
daemon.json
配置
- 通过
编辑/etc/docker/daemon.json
{
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}
2
3
或者
- 通过systemd配置文件
创建配置文件/etc/systemd/system/docker.service.d/docker.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
2
3
- 保存文件
sudo systemctl daemon-reload
- 重启docker
sudo systemctl restart docker.service
- 保存文件
- 查看是否开启端口
sudo netstat -lntp | grep dockerd
- 查看是否开启端口
tcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
- docker cli 测试
docker -H :2375 ps
- docker cli 测试
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
# 本地准备工作
仓库地址 https://github.com/thingsboard/thingsboard.git (3.1.1)
编辑器IDE https://www.jetbrains.com/zh-cn/idea/ (2020.1)
Java环境 jdk1.8
Navicat Premium
# 导入项目文件夹
若代码显示飘红有错误提示 建议安装插件 **Lombok (**https://juejin.im/post/6844903557016076302)
- *Lombok是一款好用顺手的工具,就像Google Guava一样,在此予以强烈推荐,每一个Java工程师都应该使用它。Lombok是一种Java™实用工具,可用来帮助开发人员消除Java的冗长代码,尤其是对于简单的Java对象(POJO)。它通过注释实现这一目的*。通过在开发环境中实现Lombok,开发人员可以节省构建诸如hashCode()和equals()这样的方法以及以往用来分类各种accessor和mutator的大量时间。
# 修改数据库地址
- 打开文件
application/src/main/resources
- 打开文件
# SQL DAO Configuration
spring:
...
datasource:
driverClassName: "${SPRING_DRIVER_CLASS_NAME:org.postgresql.Driver}"
url: "${SPRING_DATASOURCE_URL:jdbc:postgresql://192.168.9.30:5432/thingsboard}" // thingsboard名字与数据库名字一致
username: "${SPRING_DATASOURCE_USERNAME:postgres}"
password: "${SPRING_DATASOURCE_PASSWORD:******}"
hikari:
maximumPoolSize: "${SPRING_DATASOURCE_MAXIMUM_POOL_SIZE:16}"
2
3
4
5
6
7
8
9
10
# 安装打个包看一下
......(时间比较久, 我们就先处理下服务器)
这时我们回来再看本地项目
# 运行server
*application/src/main/java/org.thingsboard.server/ThingsbaordServerApplication*
若出现错误
修改项目下 .idea\workspace.xml
,找到标签 <component name="PropertiesComponent">
, 在标签里加一行 <property name="dynamic.classpath" value="true" />
重新再跑下
在本地浏览器中打开: http://localhost:8080/ 显示登录页面表示你已经成功在本地跑起来了
接下来就是放在服务器上
# 连接远程docker
前面做了服务端docker具备远程连接的工作, 现在在本地配置并连接
- 配置
编辑msa/tb/docker-postgre
文件夹下logback.xml
<!DOCTYPE configuration>
<configuration scan="true" scanPeriod="10 seconds">
<appender name="fileLogAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/thingsboard/thingsboard.log</file>
<rollingPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>/var/log/thingsboard/thingsboard.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{ISO8601} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{ISO8601} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.thingsboard.server" level="INFO" />
<logger name="com.microsoft.azure.servicebus.primitives.CoreMessageReceiver" level="OFF" />
<root level="INFO">
<appender-ref ref="fileLogAppender"/>
<appender-ref ref="STDOUT"/>
</root>
</configuration>
ENV SPRING_JPA_DATABASE_PLATFORM=org.hibernate.dialect.PostgreSQLDialect
ENV SPRING_DRIVER_CLASS_NAME=org.postgresql.Driver
ENV SPRING_DATASOURCE_URL=jdbc:postgresql://192.168.9.31:5432/thingsboard
ENV SPRING_DATASOURCE_USERNAME=${pkg.user}
ENV SPRING_DATASOURCE_PASSWORD=******
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
- 远程地址
- 镜像
- 最后
shift+f10
run 下docker
# 遇到的错误处理
chmod: changing permissions of ‘/var/lib/postgresql/data’: Permission denied
- 发现此内容可解决chmod问题:http (opens new window) :
也可以在此处查看selinux安全问题:https (opens new window) :
//docs.docker.com/engine/tutorials/dockervolumes/#/volume-labels (opens new window)
我通过在volume命令末尾添加:z修复了docker-compose文件
volumes: - /media/dataDemo/db:/var/lib/postgresql/data:z
volumes: :Z的含义
docker-compose.yml举例:
volumes:
- /mnt/db:/var/lib/db:Z
如果宿主机开启了SELinux,如果不加“:Z”,会报错权限不足:Permission denied。
这涉及到label权限的问题。
默认情况下docker会打上label: svirt_sandbox_file_t。
宿主机上需要mount的目录,此时需要打上同样的label:
使用:z相当于执行语句:
chcon -Rt svirt_sandbox_file_t /var/db
使用:Z相当于宿主机打上了docker里的所有label。
参考:
http://www.projectatomic.io/blog/2015/06/using-volumes-with-docker-can-cause-problems-with-selinux/
- Caused by: java.net.SocketTimeoutException: connect timed out
配置远程连接
- docker Failed to restart docker.service: Unit not found.
新版本需要docker.socket
- 卸载docker,再重新安装,即可出现docker.socket
- 创建一个/usr/lib/systemd/system/docker.socket文件,然后systemctl daemon-reload,最后systemctl start docker.service,即可启动成功。
ERROR: for timescaledb Cannot start service timescaledb: Unknown runtime specified docker-runc
ERROR: Encountered errors while bringing up the project.
- 关闭前停止容器
driver failed programming external connectivity on endpoint
- docker服务启动时定义的自定义链DOCKER由于 centos7 firewall 被清掉, firewall的底层是使用iptables进行数据过滤,建立在iptables之上,这可能会与 Docker 产生冲突。当
firewalld
启动或者重启的时候,将会从 iptables 中移除DOCKER
的规则,从而影响了 Docker 的正常工作。当你使用的是 Systemd 的时候,firewalld
会在 Docker 之前启动,但是如果你在 Docker 启动之后再启动 或者重启firewalld
,你就需要重启 Docker 进程了。重启docker服务及可重新生成自定义链DOCKER
- docker服务启动时定义的自定义链DOCKER由于 centos7 firewall 被清掉, firewall的底层是使用iptables进行数据过滤,建立在iptables之上,这可能会与 Docker 产生冲突。当