当前位置: 首页 > news >正文

ThingsBoard实战部署:从零到一的Ubuntu生产环境搭建指南

1. 项目背景与环境规划

第一次接触ThingsBoard时,我被它强大的物联网设备管理能力吸引。这次我们要为一个单位部署物联网管理系统,管理分散在不同地点的空调、用电设备,未来还可能接入消防系统。选择ThingsBoard 3.7版本是因为它稳定且功能完善,而Ubuntu 24.04 LTS作为服务器系统,长期支持周期和丰富的软件源让我们后续维护更轻松。

在硬件规划阶段,我建议先评估项目规模。虽然ThingsBoard官方文档说能轻松管理上万设备,但我们的项目预计不会超过1000台设备。经过多次测试,最终确定虚拟机配置为2个处理器、8个内核和16GB内存。这个配置不仅能流畅运行ThingsBoard核心服务,还能支持后续的界面定制开发工作。

提示:如果项目后期需要扩展,建议预留30%的性能余量,避免频繁调整虚拟机配置。

2. 虚拟机配置详解

2.1 计算资源分配

CPU和内存配置需要根据实际业务场景决定。我们选择8核CPU主要考虑两点:一是ThingsBoard的处理能力,二是PostgreSQL数据库的需求。实测发现,当设备数在500台左右时,系统负载通常在30%以下,这说明我们的配置足够应对当前业务量。

内存分配16GB是经过仔细计算的:

  • PostgreSQL最小需求4GB
  • ThingsBoard服务约占用2GB
  • 系统和其他服务需要2GB
  • 剩余8GB作为缓冲,应对突发流量

2.2 存储规划

磁盘空间是最容易被低估的配置项。根据前期测试,300台设备全量数据存储一个月大约需要10GB空间。考虑到日志文件和系统备份,我们最终配置了2TB存储空间。这个容量可以支持:

  • 3年以上的设备数据存储
  • 系统日志保留6个月
  • 足够的空间进行数据库维护操作
# 查看磁盘使用情况的常用命令 df -h # 查看磁盘总空间 du -sh /var/lib/postgresql # 查看数据库目录大小

3. Ubuntu Server安装实战

3.1 系统安装准备

从Ubuntu官网下载24.04 LTS服务器版镜像时,建议选择国内镜像站点加速下载。安装时选择英文界面可以减少后续开发中的编码问题,这点在实际项目中非常重要。

网络配置环节需要特别注意:

  • 必须使用静态IP,避免DHCP导致的地址变化
  • 网关和DNS要配置正确,否则后续软件安装会失败
  • 测试网络连通性后再继续安装

我的网络配置示例:

IP地址: 192.168.1.100 子网掩码: 255.255.255.0 网关: 192.168.1.1 DNS: 114.114.114.114

3.2 关键安装选项

在软件选择界面,务必勾选OpenSSH server。这样安装完成后就能通过SSH远程管理服务器,大大提高工作效率。其他服务如LXD、snapd等可以根据实际需求选择,我们项目中没有使用这些功能。

分区方案对新手来说可能比较复杂,我建议使用默认的LVM方案。它提供了良好的扩展性,当磁盘空间不足时可以方便地扩容。安装完成后,记得移除安装介质,否则系统可能会反复进入安装界面。

4. 基础环境配置

4.1 系统更新与安全加固

安装完成后第一件事就是更新系统:

sudo apt update sudo apt upgrade -y sudo apt autoremove

接着配置防火墙规则,只开放必要的端口:

sudo ufw allow 22/tcp # SSH sudo ufw allow 8080/tcp # ThingsBoard默认端口 sudo ufw enable

4.2 性能优化设置

调整swappiness值可以减少系统使用交换分区的频率,提升性能:

echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf sudo sysctl -p

对于数据库服务器,还需要调整内核参数:

echo 'kernel.shmmax=17179869184' | sudo tee -a /etc/sysctl.conf echo 'kernel.shmall=4194304' | sudo tee -a /etc/sysctl.conf sudo sysctl -p

5. 数据库选型建议

5.1 PostgreSQL基础配置

根据ThingsBoard官方文档,当消息量小于5000条/秒时,PostgreSQL完全够用。我们的项目预计峰值不会超过1000条/秒,所以选择PostgreSQL单机部署。

安装PostgreSQL时要注意版本兼容性:

sudo apt install postgresql-16 -y

创建数据库用户和数据库:

sudo -u postgres psql -c "CREATE USER thingsboard WITH PASSWORD '你的密码';" sudo -u postgres psql -c "CREATE DATABASE thingsboard OWNER thingsboard;"

5.2 性能调优技巧

修改PostgreSQL配置文件可以提高性能:

sudo nano /etc/postgresql/16/main/postgresql.conf

关键参数调整:

shared_buffers = 4GB effective_cache_size = 12GB work_mem = 16MB maintenance_work_mem = 1GB

6. ThingsBoard安装与配置

6.1 安装依赖环境

首先安装Java环境:

sudo apt install openjdk-17-jdk -y

验证Java版本:

java -version

接着安装ThingsBoard的deb包:

wget https://github.com/thingsboard/thingsboard/releases/download/v3.7/thingsboard-3.7.deb sudo dpkg -i thingsboard-3.7.deb

6.2 数据库连接配置

修改ThingsBoard配置文件:

sudo nano /etc/thingsboard/conf/thingsboard.yml

更新数据库连接部分:

spring: datasource: url: "jdbc:postgresql://localhost:5432/thingsboard" username: "thingsboard" password: "你的密码"

7. 服务启动与验证

7.1 初始化数据库

运行数据库初始化脚本:

sudo /usr/share/thingsboard/bin/install/install.sh --loadDemo

这个命令会创建必要的数据库表结构,并可选地加载演示数据。

7.2 启动服务

启动ThingsBoard服务并设置开机自启:

sudo systemctl enable thingsboard sudo systemctl start thingsboard

检查服务状态:

sudo systemctl status thingsboard

8. 常见问题排查

8.1 服务启动失败

如果ThingsBoard启动失败,首先检查日志:

sudo tail -f /var/log/thingsboard/thingsboard.log

常见问题包括:

  • 数据库连接失败:检查用户名密码和网络连接
  • 端口冲突:确保8080端口没有被其他程序占用
  • 内存不足:调整JVM参数或增加系统内存

8.2 性能优化

当系统运行缓慢时,可以尝试以下优化:

  1. 调整ThingsBoard的JVM参数
  2. 优化PostgreSQL配置
  3. 考虑使用Redis缓存
  4. 对高频访问的数据建立索引

修改JVM参数:

sudo nano /etc/thingsboard/conf/thingsboard.conf

调整内存分配:

JAVA_OPTS="$JAVA_OPTS -Xms2048M -Xmx4096M"
http://www.jsqmd.com/news/515385/

相关文章:

  • 【大模型专栏—科研篇】手把手教你用 Zotero 打造 AI 驱动的文献知识库
  • Nanbeige 4.1-3B应用场景:用像素终端构建AI驱动的互动式学习路径
  • LiuJuan20260223Zimage镜像部署详解:基于Xinference的快速搭建与使用
  • Qwen-Image定制镜像实战:媒体公司用RTX4090D镜像自动化生成新闻配图图文摘要
  • Java SpringBoot+Vue3+MyBatis 社区防疫物资申报系统系统源码|前后端分离+MySQL数据库
  • 如何提升翻译准确率?HY-MT1.8B术语干预功能部署实操
  • Janus-Pro-7B快速上手:Gradio Blocks高级定制——多Tab界面与状态管理
  • Cosmos-Reason1-7B开源方案:教育机构私有云部署学生AI推理实训平台
  • ELK 7.8.0全套密码配置指南:从es到kibana再到logstash的完整流程
  • jobexec.dll文件丢失怎么修复? 免费下载修复方法分享
  • AI读脸术镜像体验:轻量高效,快速实现人脸年龄性别识别
  • 极简衍射光学神经网络(m-DONN)
  • WeeESP8266库:Arduino与ESP8266 AT通信全指南
  • Trelby:免费开源的跨平台专业屏幕剧本写作软件终极指南
  • 从OCR到智能判卷:五种手写识别方案的实战评测与选型指南
  • Realtek 8852CE无线网卡驱动实战指南:从故障诊断到性能调优
  • 企业微信会话存档SDK加载失败:NoClassDefFoundError深度解析与解决方案
  • 【毕业设计】SpringBoot+Vue+MySQL 社区帮扶对象管理系统平台源码+数据库+论文+部署文档
  • HLK-LD245X毫米波雷达嵌入式C++库深度解析
  • HNU-电路电子学-实战第16讲(2021级)-卡诺图化简与异或门应用实例
  • 打开软件弹出jscript.dll丢失如何修复? 分享免费解决方法
  • 3分钟掌握AI 3D重建:从单图到高质量模型的技术革命
  • 线性代数实战:用Python快速计算特征值和特征向量(附完整代码)
  • 用18×18像素当分水岭——OpenCV模板匹配的DFT加速策略和你不知道的4条加速路径
  • Pixel Dimension Fissioner参数详解:Temperature=0.3~1.2区间对文案专业性的影响实验
  • GPT-oss:20b新手入门:完全开源可控的AI模型体验
  • Nanbeige 4.1-3B WebUI应用:打造个人专属编程问答助手
  • 从逻辑门到CPU:32位加法器硬件实现全解析
  • Materials Project API终极指南:解锁材料科学数据宝库
  • 数字条纹投影轮廓术最新进展(2022-2025):技术、应用与计量挑战