边缘计算部署实战:用Docker搭建轻量级边缘处理节点
为什么需要边缘计算部署
很多场景下,数据在云端处理延迟太高或带宽成本较大。
边缘计算部署就是把计算能力下沉到靠近数据源的位置(比如工厂车间、门店、IoT网关),在本地完成预处理、过滤或简单分析,再按需上传结果。
对于零基础用户,最实用的入口是用Docker在Linux服务器上跑一套轻量边缘处理环境,成本低、容易试错。
部署前需要准备什么
- 一台Linux服务器(Ubuntu 20.04以上或CentOS 7+),可用云服务器或本地虚拟机,至少1核1G内存。
- 服务器已安装Docker和Docker Compose。如果没装,执行以下命令快速安装Docker:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
# 退出当前终端重新登录后生效
- 了解基本Linux命令(cd、ls、sudo等),会使用文件编辑器(vi或nano)。
一步步部署边缘计算环境
本次教程将部署两个核心组件:
- Mosquitto:轻量MQTT消息代理,用于边缘设备上报数据。
- eKuiper:SQL-based边缘流处理引擎,可实时订阅MQTT主题、做过滤/聚合,结果可转发回MQTT或本地数据库。
1. 创建Docker Compose配置文件
新建一个目录,比如edge-deploy,然后在里面创建docker-compose.yml:
version: '3'
services:
mosquitto:
image: eclipse-mosquitto:2
container_name: mqtt-broker
ports:
- "1883:1883"
- "9001:9001"
volumes:
- ./mosquitto.conf:/mosquitto/config/mosquitto.conf
restart: unless-stopped
kuiper:
image: lfedge/ekuiper:latest
container_name: edge-stream
ports:
- "9081:9081"
depends_on:
- mosquitto
environment:
- KUIPER__DEFAULT_DATATOPIC=devices/+/data
restart: unless-stopped
同一目录下创建mosquitto.conf,写入:
listener 1883
allow_anonymous true
listener 9001
protocol websockets
生产环境请务必设置认证,这里为了快速试验开放了匿名。
2. 启动边缘节点
进入edge-deploy目录,执行:
docker-compose up -d
等待几秒,用docker ps查看两个容器是否都处于Up状态。
如果kuiper容器重启,可以检查依赖顺序或拉取最新镜像。
3. 配置eKuiper流处理规则
访问eKuiper的REST API(默认端口9081)来创建规则。
也可以在容器内用命令行,这里演示API方式:
# 创建流,订阅MQTT主题 devics/+/data(+是通配符)
curl -X POST http://localhost:9081/streams -H 'content-type: application/json' -d '{
"sql": "CREATE STREAM deviceStream () WITH (FORMAT=\"JSON\", DATASOURCE=\"devices/+/data\")"
}'
# 创建规则:过滤温度大于30的数据,并输出到 MQTT 主题 edge/alerts
curl -X POST http://localhost:9081/rules -H 'content-type: application/json' -d '{
"id": "tempAlert",
"sql": "SELECT * FROM deviceStream WHERE temperature > 30",
"actions": [{
"mqtt": {
"server": "tcp://mosquitto:1883",
"topic": "edge/alerts"
}
}]
}'
这样,当设备往devices/xxx/data发送温度超过30的JSON时,eKuiper会把结果推送到edge/alerts主题。
避坑要点
- 端口冲突:如果本机已占用1883或9081,可以在
docker-compose.yml中改成其他端口,注意映射时保持一致。 - Mosquitto配置权限:
allow_anonymous true仅在测试环境使用,线上务必设置用户密码。 - eKuiper无法连接MQTT:检查
depends_on不能保证服务就绪,可通过健康检查或稍等几秒再发请求。 - Docker版本:
docker-compose命令取决于安装方式,如果系统只有docker compose(新版),请用docker compose up -d(去掉中线)。
验证边缘节点是否正常工作
- 使用MQTT客户端(如
mosquitto_sub)订阅edge/alerts:
docker exec -it mqtt-broker mosquitto_sub -t edge/alerts -v
- 另开终端,模拟设备发送数据:
docker exec -it mqtt-broker mosquitto_pub -t devices/sensor1/data -m '{"temperature":35}'
- 观察订阅终端应收到
edge/alerts消息,内容为经过eKuiper过滤的JSON。如果收不到,检查eKuiper日志:docker logs edge-stream。 - 发送温度低于30的数据(如
{"temperature":20}),则不会触发警报,验证过滤逻辑正确。
至此,一个基础的边缘计算部署环境搭建完成。
你在本地编辑规则、对接真实设备,就能跑通边缘数据预处理流程。
遇到异常时优先回看避坑和高频问题部分,也可查看eKuiper官方文档进一步探索。