2、环境搭建:Docker部署ThingsBoard、源码编译部署、PostgreSQL与Cassandra配置

好,咱们正式开始动手了。这一章我带你把环境搭起来。说实话,环境搭建这事儿,看着简单,但坑不少。我当年第一次部署ThingsBoard时,光数据库配置就折腾了一下午。嗯,咱们今天争取半小时搞定。

2.1 两种部署方式,你选哪种?

ThingsBoard的部署,主流就两条路:Docker部署源码编译部署。我个人习惯用Docker,省心。但如果你要二次开发,或者想深入理解内部机制,那源码编译是必经之路。

一句话总结:生产环境用Docker,开发调试用源码。

2.2 Docker部署(推荐新手)

Docker部署,说白了就是拉几个镜像,跑几个容器。但这里有个关键点——你得搞清楚ThingsBoard依赖哪些服务。

ThingsBoard的核心依赖有两个:

  • PostgreSQL:存元数据、用户、租户、设备信息等
  • Cassandra:存时序数据,比如设备上报的温度、湿度

当然,如果你只是测试,可以只用PostgreSQL。Cassandra不是必须的。但生产环境我建议两个都上。

2.2.1 快速部署脚本

我写了个一键部署脚本,你直接复制运行就行。注意,先确保你装了Docker和Docker Compose。

# 创建目录
mkdir -p ~/thingsboard && cd ~/thingsboard

# 下载docker-compose文件
wget https://raw.githubusercontent.com/thingsboard/thingsboard/master/docker/docker-compose.yml

# 启动服务
docker-compose up -d

# 查看日志
docker-compose logs -f

等个两三分钟,访问 http://localhost:8080,看到登录页面就说明成功了。默认账号:sysadmin@thingsboard.org,密码:sysadmin

小技巧:我第一次部署时,等了五分钟还没反应,后来发现是内存不够。ThingsBoard的Java进程默认吃2G内存,你虚拟机至少得4G。

2.2.2 自定义配置

如果你要改端口或数据库配置,编辑 docker-compose.yml 就行。比如把8080改成9090:

services:
  thingsboard:
    ports:
      - "9090:8080"  # 左边是宿主机端口,右边是容器端口

2.3 源码编译部署(进阶路线)

源码编译,说白了就是自己从GitHub拉代码,然后打包。为什么要这么做?因为你可以改源码啊。我在项目中就遇到过,客户要求改登录页面的Logo,Docker部署改起来麻烦,源码编译直接改HTML就行。

2.3.1 环境准备

你需要装这些东西:

  • Java 11(必须是11,17不行,我踩过坑)
  • Maven 3.6+
  • Node.js 12+(用于前端编译)
  • Git

2.3.2 编译步骤

# 克隆代码
git clone https://github.com/thingsboard/thingsboard.git
cd thingsboard

# 编译后端(耗时较长,约10分钟)
mvn clean install -DskipTests

# 编译前端
cd ui-ngx
npm install
npm run build

# 启动
cd ..
java -jar application/target/thingsboard-*.jar

注意:编译时如果报内存不足,加个参数:export MAVEN_OPTS="-Xmx1024m"。我曾经在2G内存的服务器上编译,直接OOM了。

2.4 PostgreSQL与Cassandra配置

数据库配置,这是整个环境搭建中最容易出问题的环节。我见过太多人卡在这里了。

2.4.1 PostgreSQL配置

ThingsBoard默认使用PostgreSQL。你只需要创建一个数据库和一个用户:

# 进入PostgreSQL
sudo -u postgres psql

# 创建数据库
CREATE DATABASE thingsboard;

# 创建用户
CREATE USER tbuser WITH PASSWORD 'tbpassword';

# 授权
GRANT ALL PRIVILEGES ON DATABASE thingsboard TO tbuser;

# 退出
\q

然后在ThingsBoard的配置文件 thingsboard.yml 中修改:

spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/thingsboard
    username: tbuser
    password: tbpassword

2.4.2 Cassandra配置(可选但推荐)

Cassandra用于存储时序数据。如果你设备多、数据量大,一定要配。配置方式类似:

cassandra:
  url: localhost:9042
  keyspace: thingsboard
  username: cassandra
  password: cassandra

避坑指南:我曾经在生产环境只用了PostgreSQL,结果设备量到5000台时,查询历史数据慢得像蜗牛。后来加上Cassandra,查询速度提升了10倍。所以,别省这一步。

2.5 验证环境是否正常

部署完成后,做几个简单检查:

  1. 访问 http://localhost:8080,看登录页面是否正常
  2. 用默认账号登录,看能否进入控制台
  3. 创建一个测试设备,看能否添加成功
  4. 查看日志,确认没有报错

如果以上都OK,恭喜你,环境搭建完成了。接下来咱们就可以开始玩规则引擎了。

最后说一句:如果你在部署过程中遇到任何问题,先看日志。日志在 /var/log/thingsboard 目录下。90%的问题都能从日志里找到答案。剩下的10%,嗯,咱们下节课再说。