thingsboard源码编译安装

1、准备条件

Centos7.9

JAVA11下载     安装

maven3.8.1下载   安装

node16下载    安装

以上三个都安装完之后开始拉取thingsboard源码,目前最新版本是 3.5(我这里win环境已经安装过了,再重复安装基本上不会出错,我在linux安装一次,碰到问题再贴出来,过程与步骤是一样的)

2、源码下载

 源码地址:https://github.com/thingsboard/thingsboard.git

执行 git clone  https://github.com/thingsboard/thingsboard.git 此处需要安装 git (yum install -y git)

如果执行上面的github拉取代码比较慢,可以把github的代码导入到我们的gitee再下载,速度比较快

注册登录:https://gitee.com/

 选择新建仓库

 点击选择导入

 在上面填入github的地址即可,完成之后就可以使用gitee的地址下载,可以很大提高下载速度

3、查看源码目录并编译源码

 主要的模块

application: tb应用后端核心模块

dao: 操作数据库的模块

msg:各个模块打包镜像的(微服务部署打包镜像)

rule-engine: 规则引擎

transport: 传输协议模块 比如:mqtt 、http、 coap等等

ui-ngx: 前端页面模块

其他的模块,大家大概看下名称就能大概了解是干什么的了,接下来看下系统的配置文件,进入application模块的resources下的 thingsboard.yml 文件

主要配置:

server.port=${HTTP_BIND_PORT:8080} 启动端口(可以看到所有的配置都是有默认值,我们启动的时候传参就可以覆盖了,配置非常的灵活)

queue.type=${TB_QUEUE_TYPE:in-memory} 这里是选择使用哪一种组件,我们目前启动就是用in-memory内存的方式即可,实际应用可以选择 kafka 、rabbitmq 等等

queue.kafka 如果上面选择了kafka,这里填入相关kafka的配置即可,下面的rabbitmq以及其他的mq也是同理

zk.enabled=${ZOOKEEPER_ENABLED:false} 这里是zk相关配置,我们上面的队列选择了in-memory内存内存的方式,这里设置为false不开启即可

security.jwt 这一部分可以看到,tb的登录是使用 springSecurity + jwt的实现方式的

database.ts.type=${DATABASE_TS_TYPE:sql} 这里选择了 sql表示数据库使用 pgsql ,也可以选择 cassandra 等等

cache.type=${CACHE_TYPE:caffeine} 这里是选择缓存的类型 我们这里使用caffeine 即可,实际使用这里改为 redis

transport.sessions.inactivity_timeout=${TB_TRANSPORT_SESSIONS_INACTIVITY_TIMEOUT:300000} 这里默认表示,当设备5分钟内没有遥测或者其他的活动,session链接就回断开(不代表设备掉线)

transport.sessions.report_timeout=${TB_TRANSPORT_SESSIONS_REPORT_TIMEOUT:3000}  每间隔3s检查一次,设备是否超过5分钟没有活动了

state.defaultInactivityTimeoutInSec="${DEFAULT_INACTIVITY_TIMEOUT:600}" 最后一次活动时间跟当前时间的间隔超过这个配置,设备掉线

state.defaultStateCheckIntervalInSec="${DEFAULT_STATE_CHECK_INTERVAL:60}" 每间隔1分钟检查一次,是否超时

transport.mqtt 这个是mqtt协议的相关配置(tb的mqtt协议是使用 netty实现的),下面的http与coap等配置同理

edges.enabled=${EDGES_ENABLED:true} 这里是编译服务的相关配置

swagger.api_path_regex=${SWAGGER_API_PATH_REGEX:/api/.*} 这里是tb提供给第三方接口的swagger配置,访问地址 http://tb地址:端口/swagger-ui/#/

metrics.enabled=${METRICS_ENABLED:true} 这里是开启监控

management.endpoints.web.exposure.include=${METRICS_ENDPOINTS_EXPOSE:prometheus} 这里填入prometheus就是使用prometheus组件进行监控

以上就是对配置的简单说明,下面我们来进行漫长的源码编译,我们先配置一下maven的仓库,个人使用一下两个

<mirror>
  <id>alimaven</id>
  <name>aliyun maven</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  <mirrorOf>central</mirrorOf>
</mirror>

<mirror>
  <id>alimaven</id>
  <name>aliyun maven</name>
  <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
  <mirrorOf>central</mirrorOf>
</mirror>

 

,cd到源码根目录执行 mvn clean install -DskipTests,整个过程比较漫长

 

 可以看到 一共有54个模块需要安装,比较容易出错的是编译前端,后端的话基本都是拉取jar网络不是太差都没问题的,耐心等待

到这一步网路不好,就会报错了,上面第一个以及第二个红框都是下载相关的node和yarn的,我们可以自己去下载对应的版本,然后放到对应的 to 哪个目录即可,或者重新执行  mvn clean install -DskipTests 命令编译网络不好的话,报错的概率也很大,我们看到第三个框,有个

Running 'yarn install' in /root/tb/thingsboard/ui-ngx 提示,所以我们只需要 cd 进去 /root/tb/thingsboard/ui-ngx  然后执行 yarn install 即可直接,而不是直接重新再根目录 mvn clean install -DskipTests 编译,那样很耗费时间,等我们单独把这个模块编译通过了(其他的模块也一样的操作即可,后端模块的话进入相关模块的目录执行 mvn clean install -DskipTests )再跑根目录的编译即可,这时候不需要再去下载jar,速度比较快,接下来我们执行 yarn install

 人都傻了,竟然没有这个命令,在执行yarn -v,还是报一样的错误证明yarn没有安装,不慌,那我们就安装yarn吧,npm install yarn@v1.22.17 --save -g 这v1.22.7就是上面红框哪里提示的版本,再一次执行 yarn install

 ok,执行成功,然后再回到项目跟目录执行 mvn clean install -DskipTests,这时候依然会执行这里的编译

 但是轻松的通过了,接着往下继续等待 。。。

 到了 执行 yarn run pkg 的时候可能会非常的卡 ,报了一下错误

 cd到msa/web-ui重新执行 yarn run pkg 

 缺少了 pkg-fetch 去github下载 https://github.com/vercel/pkg-fetch/releases 按照上面的提示 v16.15.0下载对应的版本,把node-v16.5.0-linux-x64 改为 fetched-v16.5.0-linux-x64 放到 find / -name .pkg-cache 这个命令查找出来的 .pkg-cache目录下,或者这里下载,cd到msa/web-ui重新执行 yarn run pkg  ,ok编译通过,再去项目根目录执行 mvn clean install -DskipTests

 可以看到再一次执行到这里,直接就成功过去了

 

 经过漫长的等待,终于是全部都成功了,源码编译成功通过。

4、项目启动

我们刚刚是在linux编译的,启动演示比较难,我们直接用本地win的来演示就行了,编译过程是一样的,都是要全部成功才能启动

 首先要先安装一下pgsql数据库,我们直接使用docker来安装就行了,比较方便直接
 拉取镜像 :docker pull postgres:12
运行数据库:docker run  --name pgsql -e POSTGRES_PASSWORD=postgres -p 5432:5432 -v /usr/local/pgsql/data:/var/lib/postgresql/data -d postgres:12  账号密码均为postgres 端口 5432 
修改applicaiton哪里的配置文件  thingsboard.yaml 一下配置项,改为刚刚安装的pgsql配置即可

 看到上面的截图可以知道,tb链接的数据库名称叫thingsboard,所以通过navicate链接pgsql,创建名称为thingsboard的数据库

查看application的启动类有两个,一个是更新或者安装pgsql数据的另一个是启动application服务的

 先执行ThingsboardInstallApplication 的main方法,会自动的在pgsql里面创建55张表,并且有一些初始化数据,管理员账号 sysadmin@thingsboard.org 密码 sysadmin 

 接下来我们启动ThingsboardServerApplication类的main方法,观察一下控制台

 

用过springboot框架都知道,显示这个表示已经启动成功了,我这里使用的是9090端口,默认应该是8080的,接下来我们访问http://localhost:9090,由于我之前已经访问过所以直接就进入首页了

 可以看到首页的内容,还有就是3.5版本目前是最新的,还有一部分菜单还是显示的英文,所以不知道官方什么时候才能完全的汉化,所以目前还是建议使用 3.4版本的,接下来我们看一下设备列表页

 上图是3.4的设备列表

 上图是3.5的设备列表

可以看到3.5有一个很明显的改进把设备的在线状态放到了列表页,而不是每次都要去设备的属性哪里查看,更加的直观

5、简单的二次开发

本次我们进行一下简单的二次开发,把上面的因为菜单改为中文的,但是显示英文的地方还比较多,我就演示一下即可,通过F12可以看到,加载了以下两个文件

 我们,大概估计这里就是多语言的配置文件,我们就在这两个文件入手,找到US里面有的,而CN里面没有的,然后补充回去

 打开前端项目,可以看到,这里有很多的语言包,找到US和CN

 这两个是英文的,我们在US搜索 Notification center ,可以查到

 然后我们拿着notification-center 这个key去CN哪边搜索

 不错所料,是没有的,所以我们再CN哪里补充这个key以及对于value为中文即可,按照US的层级结构,添加如下内容

 我们重启一下系统看下效果

重启完成,一刷新,哎呀,没有效果,然后我们需要重新编译一下ui-ngx模块,cd进去执行 mvn clean install -DskipTests,经过一番等待,重新启动ctrl + F5刷新 

可以看到上面已经修改成功了

总结一下:上面的修改固然可以实现,但是每次都要编译,太耗费时间了,所以我们可以把这个前端代码分离出来,前后端分离,然后每次编译前端代码即可,但是tb前端用的是angular,无能为力,有能力的兄弟,可以自己去实现这个,提高开发的效率

6、总结

tb的源码编译模块比较多,非常的耗费时间,条件也算是比较苛刻,有时候jdk11的小版本不对也会报错,需要重新安装jdk11,还会因网速和系统环境的不同而报不同的错误,所以,大家在编译的时候,要保持耐心,多点百度,你遇到的问题绝对不是唯一,网上都几乎能找到答案,接下来,会介绍一下如何使用源码编译之后打包镜像,使用k8s部署

 

posted @ 2023-06-08 08:49  Vayne_Chen  阅读(4140)  评论(1)    收藏  举报