1 编译
官方文档:Building from sources | ThingsBoard Community Edition
1.1 基本环境和流程
安装 JDK 17+
安装 Node.js 和 Angular CLI(前端编译)
数据库:PostgreSQL 或 Cassandra(默认支持 PostgreSQL)
代码必须要git直接拉,如果不是编译不过。。。
git clone https://github.com/thingsboard/thingsboard.git
cd thingsboard
构建后端
mvn clean install -DskipTests
构建前端
cd ui-ngx
npm install
npm run build
1.2 编译
遇到的问题和之前yotco很类似,最大就是墙内墙外的问题。
1.2.1 maven下载慢
修改~/.m2/settings.xml,换成国内镜像。
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>Aliyun Maven</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
<mirror>
<id>tencent</id>
<mirrorOf>central</mirrorOf>
<name>Tencent Maven</name>
<url>https://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
</mirror>
</mirrors>
</settings>
1.2.2 无法下载gradle-7.3.3-bin.zip
[ERROR] Failed to execute goal org.thingsboard:gradle-maven-plugin:1.0.12:invoke (default) on project edqs: org.gradle.tooling.GradleConnectionException: Could not install Gradle distribution from 'https://services.gradle.org/distributions/gradle-7.3.3-bin.zip'. -> [Help 1]
手动下载https://services.gradle.org/distributions/gradle-7.3.3-bin.zip,拷贝到~/.gradle/wrapper/dists/gradle-7.3.3-bin/xxxxxxx
xxxxxxx是下载系统随机创建的文件夹
1.2.3 前端下载加速
[INFO] Downloading https://nodejs.org/dist/v20.18.0/node-v20.18.0-linux-x64.tar.gz to /home/tom/.m2/repository/com/github/eirslett/node/20.18.0/node-20.18.0-linux-x64.tar.gz
[INFO] No proxies configured
[INFO] No proxy was configured, downloading directly
NPM_CONFIG_REGISTRY=https://registry.npmmirror.com \
YARN_DOWNLOAD_ROOT=https://registry.npmmirror.com/yarn \
NODEJS_DOWNLOAD_ROOT=https://npmmirror.com/mirrors/node \
mvn clean install -DskipTests
yarn这一步的时候也经常超时。
yarn install --non-interactive --network-concurrency 4 --network-timeout 100000 --mutex network
yarn config set registry https://registry.npmmirror.com
用yarn config get registry来验证。
yarn这个工具在ubuntu下面有两个,还有一个是apt install cmdtest,这个不对。要使用
npm install -g yarn安装。
1.2.4 前端编译报错
如果单独编译前端时报错:
npm ERR! command git --no-replace-objects ls-remote ssh://git@github.com/thingsboard/flot.git
npm ERR! git@github.com: Permission denied (publickey).
直接nano ~/.npmrc
增加git+ssh://git@github.com/:git+https://github.com/
再重新npm install
1.2.5 frontend-maven-plugin:1.12.0:yarn (yarn pkg) @ web-ui报错
基本就是这样的信息:
[INFO] --- frontend-maven-plugin:1.12.0:yarn (yarn pkg) @ web-ui ---
[INFO] Running 'yarn run pkg' in /home/hp/thingsboard/thingsboard/msa/web-ui
[INFO] yarn run v1.22.22
[INFO] $ tsc && pkg -t node18-linux-x64,node18-win-x64 --out-path ./target ./target/src && node install.js
[INFO] > pkg@5.8.1
[INFO] > Fetching base Node.js binaries to PKG_CACHE_PATH
下载NodeJS安装包,但是运行这个超时。这个是下载github的包,取决于网络环境,在家里移动的宽带就没问题,但是在办公室电信的宽带就速度很慢死活没法下载,最后超时报错。
解决的办法就是自己手动下载:
wget https://github.com/vercel/pkg-fetch/releases/download/v3.4/node-v18.5.0-linux-x64
wget https://github.com/vercel/pkg-fetch/releases/download/v3.4/node-v18.5.0-win-x64
之后拷贝到默认的.pkg-cache/v3.4/
改名为
fetched-v18.5.0-linux-x64
fetched-v18.5.0-win-x64
这样就可以通过了。
1.3 编译完成
大概耗时1个小时,之后就能编过了。
最后的生成物如下:
参考:
thingsboard 源码搭建过程_failed to execute goal org.thingsboard:gradle-mave-CSDN博客
ThingBoard编译问题记录_failed to execute goal org.thingsboard:gradle-mave-CSDN博客
2 运行
运行应该是两种方式,一种是jar包直接运行,一种是docker。
2.1 docker运行
docker的话就是这三个命令。在docker/文件夹
docker-compose -f docker-compose.yml -f docker-compose.postgres.yml down -v
docker-compose -f docker-compose.yml -f docker-compose.postgres.yml up -d
docker-compose -f docker-compose.yml -f docker-compose.postgres.yml ps
在中间core要报错,必须增加几个文件夹。
./tb-node/
./tb-transports
大概是这几个,但是有一个tb-js-executor还是死活报错,查一下大概是集群的原因。算了,暂时先放弃吧。
2.2 直接运行jar
编译的生成物是thingsboard/application/target/thingsboard-4.2.0-SNAPSHOT-boot.jar
可以直接运行:
java -jar thingsboard-4.2.0-SNAPSHOT-boot.jar
但是运行中也非常多报错。都基本上和数据库有关。这部分官方好像也没有太详细的手册。
首先还是参考官方文档:Installing ThingsBoard CE on Ubuntu Server | ThingsBoard Community Edition
首先是安装PostgreSQL数据库。
默认的配置是这样的。thingsboard/application/src/main/resources/thingsboard.yml
datasource:
# Database driver for Spring JPA - org.postgresql.Driver
driverClassName: "${SPRING_DRIVER_CLASS_NAME:org.postgresql.Driver}"
# Database connection URL
url: "${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/thingsboard}"
# Database user name
username: "${SPRING_DATASOURCE_USERNAME:postgres}"
# Database user password
password: "${SPRING_DATASOURCE_PASSWORD:postgres}"
不过默认安装完是没有密码的,要手动设置密码。
hp@DESKTOP-430500P:~/thingsboard/thingsboard/application/target/bin/install$ sudo -u postgres psql
psql (16.9 (Ubuntu 16.9-0ubuntu0.24.04.1))
Type "help" for help.
postgres=# \password postgres
Enter new password for user "postgres":
Enter it again:
之后还要手动新增一个表。
hp@DESKTOP-430500P:~/thingsboard/thingsboard/application/target/bin/install$ sudo -u postgres psql
psql (16.9 (Ubuntu 16.9-0ubuntu0.24.04.1))
Type "help" for help.
postgres=# CREATE DATABASE thingsboard;
CREATE DATABASE
postgres=# \q
不过安装了数据库之后,死活说defaultMailService不对。
这个问题我查了很久,后面才知道是数据库的初始化没做。但是初始化这一步和官网是不同的。因为自己编译的版本是没有/usr/share/thingsboard/bin/install/install.sh这个文件。而且编译的版本怎么弄是找不到说明。。。
搞了很久,最后发现可以用的初始化脚本是在thingsboard/application/target/bin/install。执行install_dev_db.sh 这个是可以的。用install.sh --loadDemo反而会报错。。。(好像是要专门创建一个thingsboard用户才行)
执行这个还有一个注意的,它莫名其妙的要用8080端口,所以要把之前占8080的程序也关掉,否则也要报错。
之后再运行java -jar thingsboard-4.2.0-SNAPSHOT-boot.jar就可以了。
访问地址是:http://localhost:8080/login
这里用127.0.0.1是不行的。 估计是和某个配置文件有关吧,回头再看看,起码现在终于可以运行起来了。。。
3 参考
Windows 源码运行 ThingsBoard_failed to update mail configuration. settings not -CSDN博客