本文为有thingsboard二次开发需求的同学准备,可以修改源码后编译运行。

准备工作

一台4Gb内存以上的服务器(官方推荐8Gb以上,但实测以下配置即可正常运行)

Centos7环境下源码部署ThingsBoard_sql

Centos7系统

Centos7环境下源码部署ThingsBoard_物联网_02

打开8080端口

Centos7环境下源码部署ThingsBoard_maven_03


工具安装:

yum install gifsicle

yum install libpng-devel


安装wget

​sudo yum install -y wget​

更新 EPEL release

​sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm​

开始安装

安装Java JDK-1.8

​sudo yum install java-1.8.0-openjdk​

​sudo update-alternatives --config java​

yum install java-devel

查看Java是否安装成功

​java -version​

期望输出为

openjdk version "1.8.0_xxx"
OpenJDK Runtime Environment (...)
OpenJDK 64-Bit Server VM (build ...)

如果输出不正常则需要配置环境变量

​vim /etc/profile​

​export JAVA_HOME = ${你的安装路径不带bin}​

在PATH后边加入

​$JAVA_HOME/bin​

安装最新版Maven(直接用yum安装可能会导致版本过低无法编译)

下载

​wget https://www-eu.apache.org/dist/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz​

解压缩

​tar xvf apache-maven-3.6.0-bin.tar.gz -C /usr/lib/​

配置环境变量

​vi /etc/profile​

添加以下代码

M2_HOME="/usr/lib/apache-maven-3.6.0"
export M2_HOME

M2="$M2_HOME/bin"
MAVEN_OPTS="-Xms256m -Xmx512m"
export M2 MAVEN_OPTS

PATH=$M2:$PATH
export PATH

加载更新后的profile

​. /etc/profile​

​source /etc/profile​

查看Maven是否配置成功

​mvn -version​

有如下返回则表示成功

Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T23:41:47+05:00)
Maven home: /usr/lib/apache-maven-3.6.0
Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"

maven更改镜像路径为阿里镜像

修改maven根目录下的conf文件夹中的setting.xml文件

内容如下:

<mirrors>

    <mirror>

      <id>alimaven</id>

      <name>aliyun maven</name>

      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>

      <mirrorOf>central</mirrorOf>        

    </mirror>

  </mirrors>


安装NPM 

yum install npm

​​设置 npm 源为淘宝镜像​​

npm config set registry http://registry.npm.taobao.org/

5.安装 npm 依赖 以管理员权限运行 cmd,然后分别执行如下命令:

npm install -g cross-env

npm install -g webpack

安装PostgreSQL

更新yum

​sudo yum update​

安装RPM

​sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm​

安装Packages

​sudo yum install postgresql96-server postgresql96-contrib​

初始化PostgreSQL

​sudo /usr/pgsql-9.6/bin/postgresql96-setup initdb​

启动服务

​sudo systemctl start postgresql-9.6​

设置PostgreSQL为开机启动

​sudo systemctl enable postgresql-9.6​

配置PostgreSQL密码

切换用户postgres

​sudo su - postgres​

进入PostgreSQL

​psql​

设置密码(注意'\'也需要输入)

​\password​

记住设置的密码并退出

​\q​

更改PostgreSQL配置项

​sudo vim /var/lib/pgsql/9.6/data/pg_hba.conf​

更改以下行

# IPv4 local connections:
host all all 127.0.0.1/32 ident

# IPv4 local connections:
host all all 127.0.0.1/32 md5

重启PostgreSQL

​sudo systemctl restart postgresql-9.6.service​

创建database

进入数据库

如果在postgres用户下可以直接输入

​psql​

否则输入

​psql -U postgres -d postgres -h 127.0.0.1 -W​

创建thingsboard数据库并退出

​CREATE DATABASE thingsboard;​

​\q​

下载Thingsboard源码

安装git

​yum install git​

Clone源码

​cd ~​

​git clone git@github.com:thingsboard/thingsboard.git​

切换版本(这里以2.3版为例)

​cd thingsboard​

​git checkout release-2.3​

更改Thingsboard配置项

绕过License选项

​vim pom.xml​

找到275行开始的的

<plugin>
<groupId>com.mycila</groupId>
<artifactId>license-maven-plugin</artifactId>
<version>3.0</version>
<configuration>
....
</plugin>

整体注释掉

<!-- <plugin>
<groupId>com.mycila</groupId>
<artifactId>license-maven-plugin</artifactId>
<version>3.0</version>
<configuration>
....
</plugin> -->

保存并退出vim

​:wq​

修改Thingsboard数据库相关配置

进入目录

​cd ~/thingsboard/application/src/main/resources​

​vim thingsboard.yml​

从297行起,注释掉HSQLDB部分,取消注释PostgreSQL部分

# HSQLDB DAO Configuration
#spring:
# data:
# jpa:
# repositories:
# enabled: "true"
# jpa:
# hibernate:
# ddl-auto: "validate"
# database-platform: "${SPRING_JPA_DATABASE_PLATFORM:org.hibernate.dialect.HSQLDialect}"
# datasource:
# driverClassName: "${SPRING_DRIVER_CLASS_NAME:org.hsqldb.jdbc.JDBCDriver}"
# url: "${SPRING_DATASOURCE_URL:jdbc:hsqldb:file:${SQL_DATA_FOLDER:/tmp}/thingsboardDb;sql.enforce_si#ze=false;hsqldb.log_size=5}"
# username: "${SPRING_DATASOURCE_USERNAME:sa}"
# password: "${SPRING_DATASOURCE_PASSWORD:}"

# PostgreSQL DAO Configuration
spring:
data:
sql:
repositories:
enabled: "true"
sql:
hibernate:
ddl-auto: "validate"
database-platform: "${SPRING_JPA_DATABASE_PLATFORM:org.hibernate.dialect.PostgreSQLDialect}"
datasource:
driverClassName: "${SPRING_DRIVER_CLASS_NAME:org.postgresql.Driver}"
url: "${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/thingsboard}"
username: "${SPRING_DATASOURCE_USERNAME:postgres}"
password: "${SPRING_DATASOURCE_PASSWORD:postgres}"

修改此行数据库登录密码为之前步骤中设置的密码

​password: "${SPRING_DATASOURCE_PASSWORD:postgres}"​

跳过js-executor和web-ui的windows编译

分别修改以下两个文件

​vim msa/js-executor/pom.xml​

​vim msa/web-ui/pom.xml​

注释掉以下内容(两个文件都要改)

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<finalName>${pkg.name}</finalName>
<descriptors>
<descriptor>src/main/assembly/windows.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>

编译thingsboard源码

​cd ~/thingsboard​

耗时较长需要耐心等待

​mvn clean install -DskipTests -X​

出现如下提示则编译成功(缺一不可)

Centos7环境下源码部署ThingsBoard_sql_04

如果有提示错误,可以这样操作:

npm install -g -i  


安装编译好的tingsboard

找到编译好的安装文件

​cd application/target​

运行安装

​sudo rpm -Uvh thingsboard.rpm​

运行脚本

​sudo /usr/share/thingsboard/bin/install/install.sh --loadDemo​

启动服务

​sudo service thingsboard start​

完成

至此从配置环境到源码编译运行的Thingsboard运行成功

可以访问localhost:8080服务器ip:8080访问页面

Centos7环境下源码部署ThingsBoard_云平台_05

注意事项

前端的同学注意

thingsboard有热更新服务,可以用于开发。

具体操作:

​cd ~/thingsboard/ui​

​maven install -P npm-start​

即可在3000端口启动前端服务。

不过需要注意的是

如果前端后端不在同域名下,例如后端服务在云端,前端服务在本地,则需要修改以下文件中的内容

​vim ~/thingsboard/ui/server.js​

const forwardHost = 'localhost';

const ruleNodeUiforwardHost = 'localhost';

把localhost改成你的域名或ip即可

附录

一些相关的命令

PostgreSQL导入SQL

​psql -d 数据库名称 -U 用户名 -f xxx.sql​

如果当前用户是postgres

​psql -d 数据库名称 -f xxx.sql​

删除数据库

进入数据库后输入

​drop database 数据库名称​

Thingsboard服务启动/停止

​sudo service thingsboard [start | stop]​

查看Thingsboard错误日志

​cat /var/log/thingsboard/thingsboard.log | grep ERROR​