预置条件
打包部署时,需要事先准备好工具和环境。例如:docker镜像库、本地开发环境等。
本地开发环境(必须)
此处为语雀内容卡片,点击链接查看:https://yunteng.yuque.com/avshoi/hlzqwf/ttyhd4v2z5a0z3sg
打包
1/4:准备业务数据表的初始化脚本
数据传输:克隆数据库
将数据库中的业务数据表(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_device_access_information
和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_device_access_information where tenant_id not in ('13814000-1dd2-11b2-8080-808080808080');
delete from tk_data_view_interface where interface_type!='SYSTEM';
- 其他表的数据可以全部清除。
测试数据清除后,将业务数据表导出生成SQL文件。将生成的SQL文件的DROP
语句用替换功能注释掉并放入项目目录。
还需要删除
2/4:准备业务数据表的升级脚本
表结构同步
使用结构同步
工具,对两个版本之间的表结构进行差异化比较并同步。
表数据同步
💡 提示
进行数据之前必须对旧版本的表结构进行升级。否则生成的数据同步的SQL有缺失。
SQL脚本检视
- 升级脚本不能修改用户表(sys_user)的密码(password),例如:
"password" =
3/4:配置编译打包信息
启用微服务包(可选)
在根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>
修改版本信息
在配置文件thingsboard.xml
文件中将环境变量SWAGGER_VERSION的默认值修改为对应的版本号。
swagger:
api_path_regex: "${SWAGGER_API_PATH_REGEX:/api/.*}"
security_path_regex: "${SWAGGER_SECURITY_PATH_REGEX:/api/.*}"
non_security_path_regex: "${SWAGGER_NON_SECURITY_PATH_REGEX:/api/(?:noauth|v1)/.*}"
title: "${SWAGGER_TITLE:ThingsBoard REST API}"
description: "${SWAGGER_DESCRIPTION: ThingsBoard open-source IoT platform REST API documentation.}"
contact:
name: "${SWAGGER_CONTACT_NAME:ThingsBoard team}"
url: "${SWAGGER_CONTACT_URL:https://thingsboard.io}"
email: "${SWAGGER_CONTACT_EMAIL:info@thingsboard.io}"
license:
title: "${SWAGGER_LICENSE_TITLE:Apache License Version 2.0}"
url: "${SWAGGER_LICENSE_URL:https://github.com/thingsboard/thingsboard/blob/master/LICENSE}"
version: "${SWAGGER_VERSION:}"
4/4:执行编译打包命令
编译打包
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目录下有如下文件清单。
部署
💡 提示
部署包所在的文件目录中,不能包含中文。
1/4:创建数据库ThingsKit
💡 提示
所有的部署方式都是基于数据库postgresql
已经安装完毕且可以访问的前提。
此处为语雀内容卡片,点击链接查看:https://yunteng.yuque.com/avshoi/v1xdocs/ymc726m07slmhwfk
2/4:编辑配置文件
日志配置文件(可选)
💡 提示
【在线Docker镜像】使用打包生成的在线Docker镜像时,需要映射相关的配置文件。
<?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:初始化数据库
💡 提示
需要将源码中的【数据目录】和部署包一起上传到部署环境,例如:/thingskit
部署包初始化相关的【数据目录】如图:
💡 提示
可以使用开发环境对部署环境的数据库进行初始化。
💡 提示
数据库的初始化必须基于部署包的运行参数,例如:DATABASE_TS_TYPE和DATABASE_TS_LATEST_TYPE。
##########################
########初始化数据库########
##########################
java -cp thingskit-3.3.4-SNAPSHOT-boot.jar \
-Dinstall.data_dir=/thingskit/data \
-Dinstall.load_demo=false -Dinstall.upgrade=false \
-Dloader.main=org.thingsboard.server.ThingsboardInstallApplication org.springframework.boot.loader.PropertiesLauncher
💡 提示
数据库是否初始化成功,需要从数据库的表admin_settings是否存在2条数据。
4/4:启动ThingsKit物联网平台
💡 提示
服务器上已经安装JDK版本不能低于11.0.12
#########################
#########启动应用#########
#########################
java -cp thingskit-3.3.4-SNAPSHOT-boot.jar \
-Dinstall.data_dir=/thingskit/data \
-Dlogging.config=${CONF_FOLDER}/logback.xml \
-Dloader.main=org.thingsboard.server.ThingsboardServerApplication org.springframework.boot.loader.PropertiesLauncher