仲灏小栈 仲灏小栈
首页
大前端
后端&运维
其他技术
生活
关于我
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

仲灏

诚意, 正心, 格物, 致知
首页
大前端
后端&运维
其他技术
生活
关于我
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Java

    • java初学者maven项目建立
    • Maven学习笔记
    • Untitled
    • idea 插件推荐
    • springboot项目学习笔记
    • springboot项目学习笔记2 用户模块
    • springboot项目学习笔记3 分类模块
    • springboot项目学习笔记4 商品模块
    • springboot项目学习笔记6 订单模块
    • 开源的物联网平台thingsboard部署
      • 服务器准备工作
        • 安装postgresql
        • 为 docker配置远程连接
      • 本地准备工作
        • 导入项目文件夹
        • 修改数据库地址
        • 安装打个包看一下
        • 运行server
        • 连接远程docker
      • 遇到的错误处理
    • Docker 学习
    • java版本管理 jenv使用
    • mac中安装卸载java
    • springboot学习上手
  • Docker

  • Jenkins

  • Nacos

  • SQL

  • Nginx

  • Windows

  • Linux

  • 虚拟机

  • Git

  • 网络

  • 其他

  • 后端&运维
  • Java
仲灏
2021-12-30
目录

开源的物联网平台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
1
2
3
4
5
6
7
8
9
10
11
12
  • 跑一下 docker-compose up

    • 如果 容器运行起来了 就可以用 Navicat Premium 连接一下
    • img
    • 连接成功后创建数据库 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"]
}
1
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
1
2
3
    • 保存文件sudo systemctl daemon-reload
    • 重启dockersudo systemctl restart docker.service
    • 查看是否开启端口sudo netstat -lntp | grep dockerd
tcp        0      0 127.0.0.1:2375          0.0.0.0:*               LISTEN      3758/dockerd
1
    • docker cli 测试docker -H :2375 ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS
1

# 本地准备工作

  • 仓库地址 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}"
1
2
3
4
5
6
7
8
9
10

# 安装打个包看一下

img

......(时间比较久, 我们就先处理下服务器)



这时我们回来再看本地项目

img

# 运行server

*application/src/main/java/org.thingsboard.server/ThingsbaordServerApplication*
1

若出现错误

img

修改项目下 .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=******
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

img

  • 远程地址

img

  • 镜像

img

  • 最后shift+f10 run 下docker

# 遇到的错误处理

  • chmod: changing permissions of ‘/var/lib/postgresql/data’: Permission denied

    • 发现此内容可解决chmod问题:http (opens new window) :

//stackoverflow.com/questions/24288616/permission-denied-on-accessing-host-directory-in-docker (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
上次更新: 2022/06/05, 20:31:36
springboot项目学习笔记6 订单模块
Docker 学习

← springboot项目学习笔记6 订单模块 Docker 学习→

最近更新
01
vim日常使用记录
04-02
02
滑动窗口最大值
04-02
03
有效的字母异位词
04-02
更多文章>
Theme by Vdoing | Copyright © 2021-2025 izhaong | github | 蜀ICP备2021031194号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式