此方案用于IOT方案
esp32 使用 MQTT 协议 上传数据到 rabbitmq , 使用NodeRed订阅topic ,将数据插入到数据库中实现持久化。
目录结构
docker-compose.yml
version: '3'
services:
rabbitmq:
build: ./rabbitMq
container_name: rabbitmq
environment:
RABBITMQ_DEFAULT_USER: "root" # 定义RabbitMQ的默认用户
RABBITMQ_DEFAULT_PASS: "batata" # 定义RabbitMQ的默认密码
ports:
- "5672:5672" # 映射AMQP端口
- "15672:15672" # 映射管理界面端口
- "1883:1883"
networks:
- node-network
nodered:
# image: nodered/node-red # 使用官方Node-RED镜像
build: ./nodeRed # 使用官方Node-RED镜像
container_name: nodered
environment:
NODE_RED_ENABLE_PROJECTS: "true" # 启用Node-RED的项目功能
volumes:
- /nodered-data:/data # 映射Node-RED的数据卷
ports:
- "1880:1880" # 映射Node-RED的HTTP端口
depends_on:
- rabbitmq
networks:
- node-network
db:
image: postgres:latest
container_name: postgres_db
environment:
POSTGRES_DB: pgsql
POSTGRES_USER: root
POSTGRES_PASSWORD: batata
volumes:
- /pgdata:/var/lib/postgresql/data
ports:
- "5432:5432"
restart: always
networks:
- node-network
networks:
node-network:
driver: bridge
rabbitMq默认关闭MQTT协议,使用dockerfile的形式去创建容器。
rabbit 文件夹内的 Dockerfile文件内容如下
from rabbitmq:3-management
# 启用mqtt扩展
RUN rabbitmq-plugins enable rabbitmq_mqtt
node 文件夹 Dockerfile文件内容如下
from nodered/node-red
# 设置 npm 使用淘宝镜像
RUN npm config set registry https://registry.npmmirror.com
# 安装 node-red-contrib-postgresql 插件
RUN npm install node-red-contrib-postgresql
进入构建好的文件夹然后执行下面的命令
docker-compose build
docker-compoer up -d