2、环境准备:Linux服务器选型、JDK安装配置、PostgreSQL部署、Redis缓存搭建
好,咱们正式开始动手了。这一章我带你搞定环境准备。说白了,ThingsBoard 再牛,也得有个安稳的家。我见过太多项目,部署方案看着挺美,结果服务器选型就翻车了。嗯,咱们一步步来。
2.1 Linux 服务器选型:别在这上面省钱
我个人习惯,生产环境首选 Ubuntu 20.04 LTS 或 CentOS 7.9。为什么?社区活跃,坑少,ThingsBoard 官方文档也是基于这两个系统写的。
你想想看,如果选个冷门发行版,出问题了连个问的人都没有,多难受。
硬件配置建议(单节点部署)
| 场景 | CPU | 内存 | 磁盘 | 备注 |
|---|---|---|---|---|
| 开发/测试 | 4核 | 8GB | 50GB SSD | 够用,别跑压力 |
| 小规模生产(<1000设备) | 8核 | 16GB | 200GB SSD | 我常用的配置 |
| 中规模生产(<5000设备) | 16核 | 32GB | 500GB NVMe | 磁盘IO是关键 |
避坑指南: 我曾经在云服务器上选了"突发性能实例",结果设备一多,CPU被限流,整个平台直接卡死。记住,ThingsBoard 对 CPU 的稳定性要求很高,别用 t5、t6 这类突发实例跑生产。
2.2 JDK 安装配置:版本选对,事半功倍
ThingsBoard 3.x 系列,官方推荐 JDK 11。我试过 JDK 17,也能跑,但有些第三方库兼容性不太好。所以,听我一句劝,老老实实用 JDK 11。
安装其实很简单,但有个细节很多人忽略——环境变量。
# 下载 JDK 11(以 OpenJDK 为例)
sudo apt update
sudo apt install openjdk-11-jdk -y
# 验证安装
java -version
# 配置环境变量(写入 /etc/profile 或 ~/.bashrc)
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
# 使配置生效
source /etc/profile
我的小技巧: 配置完记得执行 echo $JAVA_HOME 检查一下。我遇到过好几次,明明装了 JDK,但系统 PATH 没生效,ThingsBoard 启动时直接报 "Java not found"。嗯,这种低级错误最坑人。
2.3 PostgreSQL 部署:数据是命根子
ThingsBoard 用 PostgreSQL 存储元数据、设备信息、告警规则等。我个人推荐 PostgreSQL 12 或 14,性能稳定,而且 ThingsBoard 官方测试最多的就是这两个版本。
安装过程不复杂,但有几个参数必须调,不然高并发时你会哭。
# 安装 PostgreSQL
sudo apt install postgresql postgresql-contrib -y
# 启动并设置开机自启
sudo systemctl start postgresql
sudo systemctl enable postgresql
# 切换到 postgres 用户创建数据库
sudo -u postgres psql
# 在 psql 中执行
CREATE DATABASE thingsboard;
CREATE USER tb_user WITH PASSWORD 'your_strong_password';
GRANT ALL PRIVILEGES ON DATABASE thingsboard TO tb_user;
\q
关键参数调整(/etc/postgresql/12/main/postgresql.conf)
| 参数 | 默认值 | 建议值 | 说明 |
|---|---|---|---|
| shared_buffers | 128MB | 内存的25% | 比如16GB内存设4GB |
| work_mem | 4MB | 16-64MB | 排序操作的内存 |
| maintenance_work_mem | 64MB | 1GB | VACUUM等维护操作 |
| effective_cache_size | 4GB | 内存的50% | 帮助查询规划器 |
我曾经踩过的坑: 有次部署完,设备一上报数据,PostgreSQL 的 CPU 直接飙到 100%。查了半天,发现是 work_mem 设得太小,排序操作频繁使用磁盘临时文件。调大之后,CPU 直接降到了 30%。所以,这些参数别看小,影响巨大。
2.4 Redis 缓存搭建:给 ThingsBoard 装上加速器
Redis 在 ThingsBoard 里主要干两件事:缓存设备属性、缓存 RPC 请求。说白了,就是给数据库减负。没有 Redis,设备一多,PostgreSQL 直接扛不住。
安装 Redis 很简单,但配置上有个关键点——持久化策略。
# 安装 Redis
sudo apt install redis-server -y
# 启动并设置开机自启
sudo systemctl start redis-server
sudo systemctl enable redis-server
# 验证
redis-cli ping
# 返回 PONG 就对了
Redis 配置优化(/etc/redis/redis.conf)
| 参数 | 默认值 | 建议值 | 说明 |
|---|---|---|---|
| maxmemory | 0(无限制) | 总内存的70% | 比如16GB内存设11GB |
| maxmemory-policy | noeviction | allkeys-lru | 内存满时淘汰最近最少使用 |
| save | 900 1 / 300 10 | 保留默认 | RDB持久化,别关 |
| appendonly | no | yes | AOF持久化,数据更安全 |
我的经验: 生产环境我建议同时开启 RDB 和 AOF。RDB 用于快速恢复,AOF 用于防止数据丢失。你想想看,如果缓存里的设备属性丢了,设备重新上报还好说,但 RPC 请求丢了,那可就麻烦了。
2.5 环境验证:别急着部署 ThingsBoard
所有组件装完后,我习惯先做个快速验证,确保每个服务都正常。
# 1. 检查 JDK
java -version
# 2. 检查 PostgreSQL
sudo -u postgres psql -c "SELECT version();"
# 3. 检查 Redis
redis-cli ping
# 4. 检查端口监听
ss -tlnp | grep -E '5432|6379'
如果以上都返回正常,恭喜你,环境准备就绪。下一章咱们开始正式部署 ThingsBoard。
嗯,这里再啰嗦一句:别图省事跳过环境验证。我见过太多人,装完就急着跑 ThingsBoard,结果报错了才回头查,浪费时间。磨刀不误砍柴工,对吧?