ThingsKit开发指南-jar包部署

预置条件

打包部署时,需要事先准备好工具和环境。例如:docker镜像库、本地开发环境等。

本地开发环境(必须)

此处为语雀内容卡片,点击链接查看:https://yunteng.yuque.com/avshoi/hlzqwf/ttyhd4v2z5a0z3sg

打包

1/4:准备业务数据表的初始化脚本

数据传输:克隆数据库

将数据库中的业务数据表(tk_*sys_*qrtz_*)克隆到新库中。

ThingsKit开发指南-jar包部署

脏数据清理

删除不需要的测试数据。

  • 业务表sys_areasys_dictsys_dict_itemtk_map_geo_jsonsys_menu等表的数据都需要,无需清除。
  • 业务表sys_rolesys_role_menusys_usersys_user_rolesys_tenanttk_data_view_interfacetk_device_access_informationtk_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:准备业务数据表的升级脚本

表结构同步

使用结构同步工具,对两个版本之间的表结构进行差异化比较并同步。

ThingsKit开发指南-jar包部署

表数据同步

💡 提示

进行数据之前必须对旧版本的表结构进行升级。否则生成的数据同步的SQL有缺失。

ThingsKit开发指南-jar包部署

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目录下有如下文件清单。

ThingsKit开发指南-jar包部署

微服务模式部署包:MQTT设备接入

编译打包后在对应服务的target目录下有如下文件清单。

ThingsKit开发指南-jar包部署

微服务模式部署包:TCP/UDP设备接入

编译打包后在对应服务的target目录下有如下文件清单。

ThingsKit开发指南-jar包部署

部署

💡 提示

部署包所在的文件目录中,不能包含中文。

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

部署包初始化相关的【数据目录】如图:

ThingsKit开发指南-jar包部署

💡 提示

可以使用开发环境对部署环境的数据库进行初始化。

💡 提示

数据库的初始化必须基于部署包的运行参数,例如:DATABASE_TS_TYPEDATABASE_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条数据。

ThingsKit开发指南-jar包部署

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