Mqtt Mosquitto con Docker
Implementación de servicio Mqtt con Docker
El protocolo MQTT se utiliza para transmitir información entre dispositivos, básicamente consiste en crear y subscribirse a colas de mensajes.
Se requiere un archivo de configuración (mosquitto.conf) para definir los parámetros básicos y un archivo vacio para almacenar los usuarios y claves de acceso (password.txt):
mkdir config
touch config/mosquitto.conf
touch config/password.txt
touch docker-compose.yml
mosquitto.conf
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
listener 1883
## Authentication ##
allow_anonymous false
password_file /mosquitto/config/password.txt
docker-compose.yml
version: '3'
services:
mqtt:
container_name: mqtt
image: eclipse-mosquitto:2.0
restart: unless-stopped
volumes:
- ./config:/mosquitto/config
- ./data:/mosquitto/data
- ./log:/mosquitto/log
ports:
- 1883:1883
- 9001:9001
Ejecutar servicio mqtt y verificar estado de la instancia:
docker-compose up -d
docker-compose ps
Acceder a contenedor mqtt y crear un usuario y clave para temas de acceso y autenticación (reemplazar username por nombre de usuario)
docker exec -it mqtt sh
/# mosquitto_passwd -c /mosquitto/config/password.txt username
Reiniciar contenedor mqtt (por alguna razón no funciona si no se reinicia antes..) y abrir puerto tcp 1883 del firewall local (en mi caso fedora linux 34)
docker-compose restart
sudo firewall-cmd --permanent --zone=public --add-port=1883/tcp
sudo firewall-cmd --reload
Instalar contenedor docker con cliente mqtt:
docker pull efrecon/mqtt-client
Subscripción a topic 'test/device' de instancia docker mqtt (en mi caso 172.25.0.2), con usuario 'lab' y clave '12345':
docker run -it --rm efrecon/mqtt-client sub \
-h 172.25.0.2 \
-p 1883 \
-t "test/device" \
-u lab -P 12345 \
-v
Publicar mensaje con formato json a topic 'test/device' en instancia docker mqtt (en mi caso 172.25.0.2), con usuario 'lab' y clave '12345', mas feedback de resultados (-d):
docker run -it --rm efrecon/mqtt-client pub \
-h 172.25.0.2 \
-p 1883 \
-t "test/device" \
-m '[{"json":"validated","data":42},{"to":2,"test":"with"}]' \
-u lab -P 12345 -d
Subscripción a todos los topic '#' de instancia docker mqtt (en mi caso 172.25.0.2), con usuario 'lab' y clave '12345':
docker run -it --rm efrecon/mqtt-client sub \
-h 172.25.0.2 \
-p 1883 \
-t "#" \
-u lab -P 12345 \
-v
¿Tienes alguna consulta?
Puedes contactarme enviándome un mensaje desde aquí.

diciembre 16, 2022 Backend

septiembre 19, 2022 Redes/Networking, Embedded Systems

julio 20, 2022 Cloud
- Backend(4)
- Redes/Networking(4)
- Embedded Systems(2)
- Cloud(2)
- Frontend(3)
- Microservicios(4)