预置条件
打包部署时,需要事先准备好工具和环境。例如:docker镜像库、本地开发环境等。
本地开发环境(必须)
此处为语雀内容卡片,点击链接查看:https://yunteng.yuque.com/avshoi/hlzqwf/ttyhd4v2z5a0z3sg
打包
1/5:准备业务数据表的初始化脚本
数据传输:克隆数据库
将数据库中的业务数据表(tk_*
、sys_*
和qrtz_*
)克隆到新库中。
脏数据清理
删除不需要的测试数据。
- 业务表
sys_area
、sys_dict
、sys_dict_item
、tk_map_geo_json
和sys_menu
等表的数据都需要,无需清除。 - 业务表
sys_role
、sys_role_menu
、sys_user
、sys_user_role
、sys_tenant
、tk_data_view_interface
和tk_java_script
等表的数据需要选择性清除。
delete from sys_role where id not in ('81818181-8181-8181-8181-818181818181','0644c9e0-0e03-42c5-9a7f-bc2eea2b13dc');
delete from sys_role_menu where role_id not in ('81818181-8181-8181-8181-818181818181','0644c9e0-0e03-42c5-9a7f-bc2eea2b13dc') ;
delete from sys_user where username not in ('sysadmin');
delete from sys_user_role where role_id not in ('81818181-8181-8181-8181-818181818181','0644c9e0-0e03-42c5-9a7f-bc2eea2b13dc') or user_id not in('80808080-8080-8080-8080-808080808080');
delete from sys_tenant where tenant_id not in ('13814000-1dd2-11b2-8080-808080808080');
delete from tk_java_script where tenant_id not in ('13814000-1dd2-11b2-8080-808080808080');
delete from tk_data_view_interface where interface_type!='SYSTEM';
- 其他表的数据可以全部清除。
测试数据清除后,将业务数据表导出生成SQL文件。将生成的SQL文件的DROP
语句用替换功能注释掉并放入项目目录。
还需要删除
2/5:准备业务数据表的升级脚本
表结构同步
使用结构同步
工具,对两个版本之间的表结构进行差异化比较并同步。
表数据同步
💡 提示
进行数据之前必须对旧版本的表结构进行升级。否则生成的数据同步的SQL有缺失。
SQL脚本检视
- 升级脚本不能修改用户表(sys_user)的密码(password),例如:
"password" =
3/5:配置编译打包信息
启动加密模式
💡 提示
加密插件Xjar
与spring-boot-maven-plugin
的 配置executable = true
和embeddedLaunchScript
存在兼容问题。
需要修改根pom.xml
文件中相关插件的配置。
启用微服务包(可选)
打包时,默认没有执行docker镜像相关的操作。首先需要在根pom.xml
文件中编辑模块管理功能如下:
<modules>
<module>netty-mqtt</module>
<module>common</module>
<module>rule-engine</module>
<module>dao</module>
<module>transport</module>
<module>ui-ngx</module>
<module>tools</module>
<module>application</module>
<module>msa</module> #微服务组件的docker镜像
<module>rest-client</module>
</modules>
4/5:执行编译打包命令
编译打包
mvn clean install -DskipTests=true #不打包docker镜像
#同时打包docker镜像
mvn clean install -DskipTests=true -P push-docker-image -Ddockerfile.username=仓库用户名 -Ddockerfile.password=仓库用户密码
打包输出
monolith(单机模式)/tb-core(核心组件)/tb-core(规则引擎)部署包
编译打包后在对应服务的target目录下有如下文件清单。
微服务模式部署包:MQTT设备接入
编译打包后在对应服务的target目录下有如下文件清单。
微服务模式部署包:TCP/UDP设备接入
编译打包后在对应服务的target目录下有如下文件清单。
5/5:jar包加密(可选)
1/4:创建maven管理的java项目
2/4:引入xjar依赖配置
<project>
<!-- 设置 jitpack.io 仓库 -->
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<!-- 添加 XJar 依赖 -->
<dependencies>
<dependency>
<groupId>com.github.core-lib</groupId>
<artifactId>xjar</artifactId>
<version>4.0.2</version>
<!-- <scope>test</scope> -->
</dependency>
</dependencies>
</project>
3/4:创建并配置加密类
public class XjarApplication {
public static void main(String[] args) throws Exception {
XCryptos.encryption()
.from("./application/target/thingsboard-3.3.4-SNAPSHOT-boot.jar")//被加密的jar包
.use("加密密码")
.include("/org/thingsboard/server/**/*.class")
.to("xjar/输出包名.xjar");
}
}
4/4:执行程序XjarApplication
的main方法对jar包进行加密
💡 提示
xjar加密输出的文件**.xjar和xjar.go是配套的,不能交叉使用。
部署
💡 提示
部署包所在的文件目录中,不能包含中文。
1/4:创建数据库ThingsKit
💡 提示
所有的部署方式都是基于数据库postgresql
已经安装完毕且可以访问的前提。
此处为语雀内容卡片,点击链接查看:https://yunteng.yuque.com/avshoi/v1xdocs/ymc726m07slmhwfk
2/4:编辑配置文件
日志配置文件(可选)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration>
<configuration scan="true" scanPeriod="10 seconds">
<appender name="fileLogAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>thingskit.log</file>
<rollingPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>thingskit.%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>
<logger name="org.thingsboard.server" level="INFO" />
<logger name="com.microsoft.azure.servicebus.primitives.CoreMessageReceiver" level="OFF" />
<root level="INFO">
<appender-ref ref="fileLogAppender"/>
</root>
</configuration>
JVM配置文件
💡 提示
【非Docker部署】部署包的运行环境,可以通过该文件内声明的环境变量修改,
例如:export DATABASE_TS_TYPE=sql。
#物联网平台重要配置
# monolith or tb-core or tb-rule-engine;tb-transport
export TB_SERVICE_TYPE=monolith
export SPRING_DATASOURCE_URL="jdbc:postgresql://${SERVER_HOST_IP}:5432/thingskit"
export SPRING_DATASOURCE_USERNAME=postgres
export SPRING_DATASOURCE_PASSWORD=thingskit
#cassandra, sql, or timescale (for hybrid mode, DATABASE_TS_TYPE value should be cassandra, or timescale)
export DATABASE_TS_TYPE=sql
#cassandra, sql, or timescale (for hybrid mode, DATABASE_TS_TYPE value should be cassandra, or timescale)
export DATABASE_TS_LATEST_TYPE=sql
export MINIO_URL=http://localhost:9000
export MINIO_BUCKET_NAME=yunteng-test
export ACCOUNT_EMAIL_SUFFIX=thingskit.com
export MINIO_NAME=thingskit
export MINIO_PWD=thingskit
export ACCOUNT_PASSWORD_FORCE_RESET=true
export DEFAULT_PASSWORD=123456
# WECHAT_APP_ID: 微信小程序APP_ID
# WECHAT_APP_SECRET: 微信小程序APP_SECRET
export JAVA_OPTS="$JAVA_OPTS -Dinstall.data_dir=data"
export JAVA_OPTS="$JAVA_OPTS -Dlogging.config=logback.xml"
export JAVA_OPTS="$JAVA_OPTS -Xlog:gc*,heap*,age*,safepoint=debug:file=gc.log:time,uptime,level,tags:filecount=10,filesize=10M"
export JAVA_OPTS="$JAVA_OPTS -XX:+IgnoreUnrecognizedVMOptions -XX:+HeapDumpOnOutOfMemoryError"
export JAVA_OPTS="$JAVA_OPTS -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark"
export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=500 -XX:+UseStringDeduplication -XX:+ParallelRefProcEnabled -XX:MaxTenuringThreshold=10"
3/4:初始化数据库
部署包初始化相关的【数据目录】如图:
💡 提示
需要将上面的数据库初始化执行程序下载并解压后,将里面的文件xjar.go和initDb.xjar上传到【数据目录】中的sql目录下。上传后data目录如下:
💡 提示
可以使用开发环境对部署环境的数据库进行初始化。
💡 提示
数据库的初始化必须基于部署包的运行参数,例如:DATABASE_TS_TYPE和DATABASE_TS_LATEST_TYPE。
##########################
########初始化数据库########
##########################
cd /thingskit/data/sql
go build xjar.go
./xjar java -jar -Dinstall.data_dir=/thingskit/data -Dfile.encoding=UTF-8 --add-opens java.base/jdk.internal.loader=ALL-UNNAMED ./initDb.xjar
💡 提示
数据库是否初始化成功,需要从数据库的表admin_settings是否存在2条数据。
4/4:启动ThingsKit物联网平台
💡 提示
首次部署或升级部署时,需要先删除可xjar的执行文件,对应的部署包thingsKit.xjar和xjar.go必须一对一匹配。
#########################
#########编译加载器#########
#########################
go build xjar.go
./xjar java -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom \
--add-opens java.base/jdk.internal.loader=ALL-UNNAMED \
-Dinstall.data_dir=/thingskit/data -jar ./thingsKit.xjar