FastBee 2.0 开源版极速部署指南:Docker Compose 全流程解析
物联网技术正在重塑各行各业的运营模式,而一个稳定可靠的物联网平台是连接物理世界与数字世界的桥梁。FastBee 作为一款轻量级开源物联网平台,凭借其简洁的架构设计和丰富的功能集,成为中小企业快速搭建物联网系统的优选方案。本文将带您从零开始,通过 Docker Compose 完成 FastBee 2.0 开源版的完整部署,并深入解析平台的核心组件与使用技巧。
1. 环境准备与前置条件
在开始部署之前,我们需要确保基础环境满足运行要求。以下是经过验证的推荐配置:
- 操作系统:Ubuntu 20.04/22.04 LTS 或 CentOS 7/8(其他 Linux 发行版也可运行,但可能需要额外配置)
- 硬件资源:
- 最低配置:2核CPU / 4GB内存 / 50GB磁盘空间
- 推荐配置:4核CPU / 8GB内存 / 100GB SSD(适用于设备量较大的场景)
- 软件依赖:
- Docker 20.10.0+
- Docker Compose 1.29.0+
- Git(用于获取部署脚本)
对于 Docker 和 Docker Compose 的安装,可以使用以下快速安装命令:
# Docker 安装(适用于Ubuntu) sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io # Docker Compose 安装 sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose提示:生产环境建议使用固定版本的 Docker 和 Docker Compose,避免因版本更新导致兼容性问题。
2. 一键部署 FastBee 2.0
FastBee 提供了自动化部署脚本,极大简化了安装流程。以下是详细步骤:
获取部署脚本:
wget -c https://hub.fastbee.cn/resource/install.sh -O fastbee-install.sh chmod +x fastbee-install.sh执行部署:
sudo ./fastbee-install.sh脚本运行后会出现版本选择界面:
======================================== 请选择要安装的版本: 1. 开源版 2. 商业版 3. 集群版 ========================================输入
1选择开源版,脚本将自动完成以下操作:- 下载必要的 Docker 镜像
- 创建持久化数据卷
- 配置网络连接
- 启动所有服务容器
验证服务状态:
docker-compose ps正常运行的输出应类似:
Name Command State Ports ---------------------------------------------------------------------------- fastbee-mysql docker-entrypoint.sh mysqld Up 3306/tcp fastbee-redis docker-entrypoint.sh redis Up 6379/tcp fastbee-emqx /bin/sh -c /usr/bin/start.sh Up 4369/tcp, 8083/tcp, 8084/tcp, 8883/tcp, 18083/tcp fastbee-backend java -jar fastbee.jar Up 8080/tcp fastbee-frontend nginx -g daemon off; Up 80/tcp
部署完成后,可以通过浏览器访问http://<服务器IP>(默认端口80)进入平台。首次登录使用默认账号:
- 用户名:admin
- 密码:admin123
注意:出于安全考虑,首次登录后请立即修改默认密码,并在"系统管理"中配置适当的权限策略。
3. 平台核心组件解析
FastBee 2.0 采用模块化设计,各组件协同工作形成完整的物联网解决方案。以下是主要服务的功能说明:
| 组件名称 | 技术栈 | 默认端口 | 功能描述 |
|---|---|---|---|
| MySQL | MySQL 5.7 | 3306 | 存储平台配置信息、产品定义、设备元数据等结构化数据 |
| Redis | Redis 7 | 6379 | 缓存设备状态、会话信息,提供高速数据访问 |
| EMQX | EMQX 5.0 | 1883/8083 | MQTT 消息代理,处理设备连接与消息路由(TCP 1883,WebSocket 8083) |
| 后端服务 | Spring Boot | 8080 | 提供 REST API,处理业务逻辑,包括设备管理、规则引擎、权限控制等 |
| 前端界面 | Vue.js + Element | 80 | 管理控制台,提供可视化操作界面 |
网络通信架构:
设备端 → (MQTT/TCP/HTTP) → EMQX → 后端服务 → 数据库 ↑ └── 规则引擎 → 第三方系统4. 设备接入实战
FastBee 支持多种协议接入,下面以最常见的 MQTT 协议为例,演示设备接入流程:
创建产品:
- 登录控制台,进入"产品管理" → "新增产品"
- 填写产品名称(如"温湿度传感器"),选择接入协议为"MQTT"
- 配置认证方式(推荐使用"设备密钥")
定义物模型:
{ "properties": [ { "name": "temperature", "identifier": "temp", "dataType": "decimal", "unit": "℃", "accessMode": "readOnly" }, { "name": "humidity", "identifier": "humi", "dataType": "decimal", "unit": "%", "accessMode": "readOnly" } ] }创建设备:
- 在产品详情页点击"新增设备"
- 记录自动生成的设备密钥(用于MQTT连接认证)
设备端代码示例(Python):
import paho.mqtt.client as mqtt import json, random, time # 配置参数 BROKER = "your_server_ip" PORT = 1883 DEVICE_KEY = "device_123456" PRODUCT_KEY = "product_abc" # MQTT连接回调 def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) client = mqtt.Client(client_id=DEVICE_KEY) client.on_connect = on_connect client.username_pw_set(DEVICE_KEY, DEVICE_KEY) client.connect(BROKER, PORT, 60) # 模拟数据上报 while True: payload = { "temp": round(random.uniform(20, 30), 1), "humi": round(random.uniform(40, 80), 1) } client.publish(f"/{PRODUCT_KEY}/{DEVICE_KEY}/property/report", json.dumps(payload)) time.sleep(30)数据验证:
- 在控制台"设备管理"中找到对应设备
- 查看"实时状态"页签,应能看到定期更新的温湿度数据
- 在"数据监测"中可查看历史数据曲线
提示:生产环境中应考虑实现断线重连机制,并添加TLS加密传输以提高安全性。
5. 进阶配置与优化
5.1 性能调优建议
对于设备量较大的场景,建议调整以下参数:
EMQX 配置优化:
# 编辑 docker-compose.yml,在emqx服务下添加环境变量 environment: - EMQX_LISTENERS__TCP__DEFAULT__ACCEPTORS=64 - EMQX_LISTENERS__TCP__DEFAULT__MAX_CONNECTIONS=102400 - EMQX_LISTENERS__SSL__DEFAULT__ACCEPTORS=32 - EMQX_NODE__PROCESS_LIMIT=2097152MySQL 性能优化:
# 在MySQL容器中创建 /etc/mysql/conf.d/custom.cnf [mysqld] innodb_buffer_pool_size = 1G innodb_log_file_size = 256M max_connections = 500
5.2 安全加固措施
启用TLS加密:
# 生成自签名证书(生产环境建议使用CA签发证书) openssl req -x509 -newkey rsa:4096 -nodes -keyout emqx.key -out emqx.pem -days 365 # 修改EMQX配置 volumes: - ./emqx.pem:/etc/emqx/certs/cert.pem - ./emqx.key:/etc/emqx/certs/key.pem environment: - EMQX_LISTENERS__SSL__DEFAULT__ENABLED=true - EMQX_LISTENERS__SSL__DEFAULT__CERTFILE=/etc/emqx/certs/cert.pem - EMQX_LISTENERS__SSL__DEFAULT__KEYFILE=/etc/emqx/certs/key.pem防火墙规则配置:
# 仅开放必要端口 sudo ufw allow 80/tcp # 前端 sudo ufw allow 443/tcp # HTTPS(如需) sudo ufw allow 8883/tcp # MQTT over SSL sudo ufw enable
5.3 数据持久化配置
为防止容器重启导致数据丢失,应配置持久化存储:
# 在docker-compose.yml中添加以下卷配置 volumes: mysql_data: driver: local redis_data: driver: local emqx_data: driver: local services: mysql: volumes: - mysql_data:/var/lib/mysql redis: volumes: - redis_data:/data emqx: volumes: - emqx_data:/opt/emqx/data6. 常见问题排查
部署和使用过程中可能会遇到以下典型问题:
问题1:前端访问显示502错误
- 检查Nginx容器是否正常运行:
docker logs fastbee-frontend - 验证后端API是否可用:
curl http://localhost:8080/api/v1/system/health
问题2:设备无法连接MQTT
- 检查EMQX服务状态:
docker exec -it fastbee-emqx emqx_ctl status - 查看连接日志:
docker logs fastbee-emqx | grep "connection" - 验证网络连通性:
telnet your_server_ip 1883
问题3:数据上报但平台不显示
- 检查物模型定义是否匹配设备上报的JSON字段
- 查看后端日志:
docker logs fastbee-backend | grep "device message" - 验证Redis是否正常工作:
docker exec -it fastbee-redis redis-cli ping
问题4:系统运行缓慢
- 检查资源使用情况:
docker stats - 分析MySQL慢查询:
docker exec -it fastbee-mysql mysql -uroot -p -e "SHOW FULL PROCESSLIST" - 调整JVM参数(后端服务):
environment: - JAVA_OPTS=-Xms2g -Xmx2g -XX:+UseG1GC
7. 平台功能扩展与实践
FastBee 开源版虽然功能完备,但实际项目中往往需要根据业务需求进行扩展。以下是几个典型场景的实现思路:
场景1:自定义告警规则
- 通过"规则引擎"创建新规则
- 设置触发条件(如温度>30℃持续5分钟)
- 配置动作(发送邮件/短信通知)
场景2:第三方系统集成
# 示例:通过FastBee API获取设备数据 import requests api_url = "http://your_server_ip/api/v1/device/data" headers = {"Authorization": "Bearer your_access_token"} params = { "productKey": "product_abc", "deviceKey": "device_123456", "limit": 100 } response = requests.get(api_url, headers=headers, params=params) data = response.json() print(data)场景3:数据可视化大屏
- 使用内置的ECharts组件创建仪表盘
- 配置数据源为设备物模型属性
- 设置自动刷新间隔(如30秒)
- 通过iframe嵌入到第三方系统
对于需要更高性能或更复杂功能的场景,可以考虑升级到商业版,获得以下增强能力:
- 可视化规则引擎
- 多租户支持
- 集群部署
- 工业协议(Modbus/JT808)支持