2. ThingsBoard 安装部署:Docker 方式安装、PostgreSQL 配置、初始化与启动、访问控制台
本章将带领你使用 Docker 容器化方式完成 ThingsBoard 的完整部署。Docker 方式具有环境隔离、依赖自动解决、升级回滚便捷等优势,是生产环境与开发环境中最推荐的部署方案。我们将依次完成 PostgreSQL 数据库配置、ThingsBoard 服务初始化、启动以及首次访问控制台验证。
2.1 部署架构概览
ThingsBoard 采用微服务架构,核心组件包括 ThingsBoard 服务节点、数据库(PostgreSQL + Cassandra/TimescaleDB)、消息队列(Kafka/RabbitMQ)以及 Web UI 控制台。本章使用单节点 Docker Compose 部署,包含以下核心容器:
- thingsboard/tb-postgres:集成 PostgreSQL 数据库的 ThingsBoard 单节点镜像
- postgres:独立 PostgreSQL 数据库容器(可选分离部署)
- redis:缓存服务,用于提升系统响应速度
2.2 环境准备与前提条件
在开始部署之前,请确保你的服务器或开发机满足以下最低要求:
| 资源项 | 最低配置 | 推荐配置 | 说明 |
|---|---|---|---|
| CPU | 2 核 | 4 核 | ThingsBoard 服务与数据库并行运行 |
| 内存 | 4 GB | 8 GB | PostgreSQL 与 Redis 占用较大内存 |
| 磁盘 | 20 GB | 50 GB SSD | 数据库持久化与日志存储 |
| Docker | 24.0+ | 26.0+ | 支持 Compose v3.8 |
| 操作系统 | Ubuntu 20.04 / CentOS 7+ | Ubuntu 22.04 | Linux 内核 4.0+ |
2.3 获取 Docker Compose 部署文件
ThingsBoard 官方提供了多种部署模板。我们使用集成 PostgreSQL 的单节点版本,该版本适合中小规模项目(设备数 < 10,000)。
步骤 1:创建部署目录
mkdir -p ~/thingsboard-deploy
cd ~/thingsboard-deploy
步骤 2:下载 Docker Compose 文件
wget https://raw.githubusercontent.com/thingsboard/thingsboard/release-3.6/docker/docker-compose-postgres.yml -O docker-compose.yml
如果无法访问 GitHub,也可以使用以下命令直接创建 docker-compose.yml 文件:
cat << 'EOF' > docker-compose.yml
version: '3.8'
services:
mytb:
restart: always
image: "thingsboard/tb-postgres:3.6.2"
ports:
- "8080:9090"
- "1883:1883"
- "5683:5683/udp"
environment:
TB_QUEUE_TYPE: in-memory
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/thingsboard
SPRING_DATASOURCE_USERNAME: postgres
SPRING_DATASOURCE_PASSWORD: postgres
volumes:
- tb-data:/data
- tb-logs:/var/log/thingsboard
depends_on:
- postgres
networks:
- tb-net
postgres:
restart: always
image: "postgres:15"
ports:
- "5432:5432"
environment:
POSTGRES_DB: thingsboard
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- tb-net
redis:
restart: always
image: "redis:7-alpine"
ports:
- "6379:6379"
volumes:
- redis-data:/data
networks:
- tb-net
volumes:
tb-data:
tb-logs:
postgres-data:
redis-data:
networks:
tb-net:
driver: bridge
EOF
TB_QUEUE_TYPE: in-memory— 使用内存队列,适合单节点测试环境;生产环境建议改为kafka或rabbitmq。SPRING_DATASOURCE_URL— 指定 PostgreSQL 连接地址,容器间使用服务名postgres通信。volumes— 持久化数据卷,确保容器重启后数据不丢失。
2.4 PostgreSQL 配置详解
PostgreSQL 是 ThingsBoard 的核心元数据存储。在 Docker Compose 中,我们通过环境变量完成基础配置:
| 环境变量 | 值 | 作用 |
|---|---|---|
POSTGRES_DB |
thingsboard | 指定初始数据库名称 |
POSTGRES_USER |
postgres | 数据库超级用户 |
POSTGRES_PASSWORD |
postgres | 数据库密码(生产环境请修改为强密码) |
生产环境 PostgreSQL 优化建议:
- 修改默认密码:使用
openssl rand -base64 16生成随机密码。 - 限制端口暴露:仅允许 ThingsBoard 容器访问,避免
0.0.0.0:5432暴露到公网。 - 调整共享缓冲区:在
postgres服务中添加command: postgres -c shared_buffers=256MB -c effective_cache_size=768MB。 - 启用 SSL 连接:生产环境建议配置 PostgreSQL SSL 证书。
2.5 初始化与启动服务
完成配置后,按照以下步骤启动 ThingsBoard 服务:
步骤 1:拉取镜像
docker compose pull
步骤 2:启动所有服务(后台模式)
docker compose up -d
步骤 3:查看启动日志
docker compose logs -f mytb
首次启动时,ThingsBoard 会自动执行数据库初始化脚本(创建表结构、索引、默认数据)。该过程通常需要 2~5 分钟,日志中出现以下内容表示初始化完成:
2024-01-15 10:23:45.678 INFO 1 --- [main] o.t.s.ThingsboardServerApplication : Started ThingsboardServerApplication in 142.567 seconds
2024-01-15 10:23:46.012 INFO 1 --- [main] o.t.s.ThingsboardServerApplication : ThingsBoard Web UI available at http://localhost:9090
docker compose ps 查看所有容器状态,确保 mytb、postgres、redis 均为 Up 状态。如果 mytb 反复重启,使用 docker compose logs mytb 查看错误详情。
2.6 访问控制台与初始配置
服务启动成功后,通过浏览器访问 ThingsBoard Web 控制台:
访问地址: http://<服务器IP>:8080
默认登录凭据:
| 角色 | 用户名 | 密码 | 说明 |
|---|---|---|---|
| 系统管理员 | sysadmin@thingsboard.org | sysadmin | 最高权限,可管理租户与系统设置 |
| 租户管理员 | tenant@thingsboard.org | tenant | 管理设备、仪表板、规则链等 |
| 客户用户 | customer@thingsboard.org | customer | 查看分配的仪表板与设备数据 |
验证部署是否成功:
- 使用
sysadmin@thingsboard.org / sysadmin登录。 - 检查左侧菜单是否完整显示:仪表组、设备、资产、规则链、客户等。
- 点击“设备”页面,确认页面正常加载且无报错。
- 点击“仪表板”页面,查看是否有预置的“温度湿度演示”仪表板。
2.7 常见问题与故障排除
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 容器反复重启 | 数据库连接失败或端口冲突 | 检查 docker compose logs mytb 中数据库连接错误;确保 8080/1883/5683 端口未被占用 |
| 控制台无法访问 | 防火墙未放行 8080 端口 | 执行 sudo ufw allow 8080/tcp 或在云平台安全组添加入站规则 |
| 数据库初始化超时 | 服务器性能不足或磁盘 I/O 瓶颈 | 增加 Docker 资源限制;使用 SSD 磁盘;适当增加 spring.datasource.hikari.connection-timeout 值 |
| 登录后页面空白 | 浏览器缓存或 WebSocket 连接失败 | 清除浏览器缓存;检查网络是否阻止 WebSocket(端口 9090) |
# 查看所有容器状态
docker compose ps
# 查看 ThingsBoard 实时日志
docker compose logs -f --tail=100 mytb
# 测试数据库连接
docker exec -it thingsboard-deploy-postgres-1 psql -U postgres -d thingsboard -c "\dt"
# 检查端口监听
ss -tlnp | grep -E '8080|5432|6379'
2.8 本章小结
通过本章的学习,你已经完成了 ThingsBoard 的 Docker 部署全流程:
- 理解了 ThingsBoard 的容器化部署架构与组件关系
- 掌握了 Docker Compose 文件的编写与关键参数配置
- 完成了 PostgreSQL 数据库的初始化与优化配置
- 成功启动服务并首次访问 ThingsBoard Web 控制台
- 学会了常见故障的排查方法