Centos7环境下源码部署ThingsBoard
本文为有thingsboard二次开发需求的同学准备,可以修改源码后编译运行。
准备工作
一台4Gb内存以上的服务器(官方推荐8Gb以上,但实测以下配置即可正常运行)
Centos7系统
打开8080端口
安装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
查看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"
安装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 [email protected]: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
出现如下提示则编译成功(缺一不可)
安装编译好的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访问页面
注意事项
前端的同学注意
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