thingsboard源码编译安装
1、准备条件
Centos7.9

maven3.8.1下载 安装


以上三个都安装完之后开始拉取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 命令编译网络不好的话,报错的概率也很大,我们看到第三个框,有个

人都傻了,竟然没有这个命令,在执行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的来演示就行了,编译过程是一样的,都是要全部成功才能启动

看到上面的截图可以知道,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部署

浙公网安备 33010602011771号