Cursus
La configuration d'un courtier MQTT à partir de zéro ne devrait pas nécessiter des heures de configuration et de dépannage.
Eclipse Mosquitto est un courtier MQTT open source qui implémente les protocoles MQTT v5, 3.1.1 et 3.1, ce qui le rend idéal pour les appareils IoT, les systèmes domotiques, les applications cloud et toute architecture orientée messages. Cependant, l'installation et la configuration de Mosquitto directement sur votre système entraînent souvent des conflits de dépendances, des problèmes d'autorisation et des difficultés spécifiques à la plateforme qui peuvent nuire à votre temps de développement. Vous finissez par consacrer plus de temps à la configuration qu'au développement de votre application proprement dite.
Docker élimine ces difficultés en fournissant un environnement cohérent et isolé pour exécuter Mosquitto sur n'importe quelle plateforme. Vous pouvez disposer d'un courtier MQTT entièrement fonctionnel en quelques minutes, avec des configurations personnalisées, une authentification et une persistance.
Dans ce guide, je vous guiderai à travers le déploiement d'Eclipse Mosquitto à l'aide de Docker et Docker Compose, la configuration de l'authentification et de la journalisation, la mise en place de la persistance des données et le test de votre courtier avec de véritables clients MQTT.
Êtes-vous totalement novice en matière de Docker ? Je vous recommande de commencer par notre cours d'introduction à Docker pour acquérir les bases.
Qu'est-ce que Mosquitto et pourquoi l'utiliser dans Docker ?
Vous n'avez pas besoin d'un système de messagerie complexe lorsque vous recherchez simplement une communication rapide et fiable entre les appareils.
MQTT est un protocole de publication-abonnement léger conçu pour les situations où la bande passante est limitée et où la fiabilité est essentielle. Pensez aux capteurs IoT, aux applications mobiles ou à tout scénario dans lequel des appareils doivent échanger rapidement de petits messages sans interrogation constante.
Mosquitto agit en tant qu'intermédiaire, ou courtier, entre les éditeurs et les abonnés.
Les éditeurs transmettent des messages sur des sujets spécifiques. Les abonnés suivent ces sujets. Mosquitto gère le routage, garantissant que les messages sont acheminés aux bons endroits sans que les éditeurs et les abonnés aient besoin de se connaître.
Voici pourquoi Docker améliore encore davantage les configurations Docker Mosquitto :
- Configuration cohérente sur toutes les plateformes : Windows, macOS ou Linux : le conteneur Docker fonctionne exactement de la même manière. Il n'est pas nécessaire de rechercher des programmes d'installation spécifiques à une plateforme ni de gérer les conflits de dépendances.
- Gestion simplifiée des versions : Vous pouvez épingler des versions spécifiques de Mosquitto à l'aide de balises d'image, revenir en arrière en cas de problème et tester de nouvelles versions sans affecter votre système hôte.
- Véritable portabilité : La même configuration Docker Mosquitto est applicable en développement, en préproduction et en production. Votre environnement local correspond à ce qui est exécuté sur vos serveurs.
Mosquitto est disponible en deux versions : la version open source (qui couvre la plupart des cas d'utilisation) et la version commerciale Pro Edition de Cedalo, qui offre des fonctionnalités avancées telles que le clustering et une sécurité renforcée. Pour la plupart des projets, la version open source répond à tous vos besoins.
Ensuite, je vais passer en revue les prérequis, puis nous allons nous plonger dans l'installation de Mosquitto.
Conditions préalables
Il est nécessaire que Docker soit installé et opérationnel sur votre système avant de pouvoir déployer Mosquitto.
Docker Desktop est particulièrement adapté aux utilisateurs Windows et macOS, car il regroupe tous les éléments nécessaires dans un seul package. Les utilisateurs Linux peuvent installer l'interfaceCLI Docker d' directement via leur gestionnaire de paquets ou à partir du référentiel officiel de Docker.
Docker Compose n'est pas obligatoire, mais il facilite considérablement la gestion des configurations multi-conteneurs. La plupart des installations de Docker Desktop incluent Compose par défaut. Si vous utilisez Linux, il se peut que vous deviez l'installer séparément.
Vous devrez également posséder des compétences de base en matière de ligne de commande. Rien d'extraordinaire, simplement la possibilité d'exécuter des commandes, de naviguer dans les répertoires et de modifier des fichiers texte.
Configuration étape par étape
Pour exécuter Mosquitto Docker, trois étapes sont nécessaires : créer des répertoires, exécuter le conteneur et, éventuellement, configurer Docker Compose pour faciliter la gestion.
Création des répertoires requis
Mosquitto nécessite un stockage organisé pour sa configuration, ses données et ses journaux.
Veuillez les créer pour commencer :
mkdir mosquitto-docker
cd mosquitto-docker
mkdir config data logs
Cela vous fournit des dossiers organisés pour les fichiers de configuration de Mosquitto, les données persistantes et la sortie des journaux.
Voici les fonctions de chaque répertoire :
/mosquitto/configstockemosquitto.confet tout fichier de configuration supplémentaire/mosquitto/datacontient des données de messages persistants et des informations d'abonnement/mosquitto/logcontient les fichiers journaux de Mosquitto destinés au débogage et à la surveillance.
Ces répertoires sont montés en tant que volumes à l'intérieur du conteneur Docker, ce qui permet de conserver vos paramètres et vos données après le redémarrage du conteneur.
Exécution de Mosquitto avec Docker
La commande Docker de base permet de lancer Mosquitto avec un mappage de ports et des montages de volumes appropriés.
docker run -d \
--name mosquitto \
-p 1883:1883 \
-v $(pwd)/mosquitto/config:/mosquitto/config \
-v $(pwd)/mosquitto/data:/mosquitto/data \
-v $(pwd)/mosquitto/log:/mosquitto/log \
eclipse-mosquitto:latest

Image 1 - Exécution de Mosquitto avec Docker
Permettez-moi de vous expliquer ces drapeaux :
-dexécute le conteneur en arrière-plan (mode détaché)--name mosquittoattribue au conteneur un nom convivial pour faciliter la référence-p 1883:1883mappe le port 1883 de votre hôte vers le port 1883 du conteneur-vmonte les répertoires locaux en tant que volumes à l'intérieur du conteneur
Mosquitto 2.0+ fonctionne par défaut en mode local uniquement. Cela signifie qu'il n'accepte que les connexions provenant de localhost, à moins que vous ne le configuriez autrement. Il vous sera nécessaire de créer un fichier de configuration pour autoriser les connexions externes.
Utilisation de Docker Compose
Mosquitto Docker Compose simplifie considérablement la gestion de l'installation, en particulier lorsque vous exécutez plusieurs services.
Veuillez créer un fichier docker-compose.yml et y insérer le contenu suivant :
services:
mosquitto:
image: eclipse-mosquitto:latest
container_name: mosquitto
restart: unless-stopped
ports:
- "1883:1883" # MQTT
- "8883:8883" # MQTTS (secure)
- "9001:9001" # WebSockets
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log
Commencez par :
docker-compose up -d

Image 2 - Exécution de Mosquitto avec Docker Compose
Les mappages de volume fonctionnent de la même manière que la commande Docker, mais Compose gère la complexité. La configuration du port couvre tous les protocoles MQTT courants : MQTT standard (1883), MQTTS sécurisé (8883) et connexions WebSocket (9001).
Compose est particulièrement performant dans les configurations multiservices. Par exemple, si vous utilisez Home Assistant, Node-RED ou d'autres outils IoT avec Mosquitto, vous pouvez définir tous les paramètres dans un seul fichier et démarrer tous les services simultanément.
Examinons maintenant la configuration plus en détail.
Trouvez-vous les concepts avancés de Docker complexes ? Notre cours Docker intermédiaire va au-delà des notions fondamentales.
Configuration de Mosquitto
Mosquitto n'accepte pas les connexions externes par défaut. Un fichier de configuration est nécessaire pour activer cette fonctionnalité.
Configuration de base (mosquitto.conf)
Veuillez créer un fichier mosquitto.conf dans votre répertoire mosquitto/config et y ajouter les éléments suivants :
# Basic listener configuration
listener 1883
allow_anonymous true
# WebSocket listener
listener 9001
protocol websockets
allow_anonymous true
# Persistence
persistence true
persistence_location /mosquitto/data/
# Logging
log_dest file /mosquitto/log/mosquitto.log
log_type error
log_type warning
log_type notice
log_type information
Le paramètre allow_anonymous true permet aux clients de se connecter sans informations d'identification. Cela fonctionne bien pour le développement ou les réseaux internes, mais il est recommandé de le désactiver pour les environnements de production. Lorsque vous définissez allow_anonymous false, chaque client doit s'authentifier à l'aide d'un nom d'utilisateur et d'un mot de passe.
Le récepteur WebSocket sur le port 9001 permet l'utilisation de clients MQTT basés sur un navigateur. Les applications Web peuvent se connecter directement à votre courtier à l'aide de bibliothèques JavaScript telles que Paho MQTT.
Configuration de l'authentification
L'authentification nécessite la création d'un fichier de mots de passe et la mise à jour de votre configuration.
Veuillez générer un fichier de mots de passe à l'intérieur du conteneur :
docker exec -it mosquitto mosquitto_passwd -c /mosquitto/config/passwd username

Image 3 - Authentification Mosquitto
Cela crée un nouveau fichier de mot de passe et vous invite à saisir un mot de passe. Pour les utilisateurs supplémentaires, veuillez désactiver le drapeau d'-c:
docker exec -it mosquitto mosquitto_passwd /mosquitto/config/passwd another_user
Veuillez maintenant mettre à jour votre fichier mosquitto.conf afin de forcer l'authentification :
# Disable anonymous access
allow_anonymous false
# Point to password file
password_file /mosquitto/config/passwd
# Basic MQTT listener
listener 1883
# WebSocket listener
listener 9001
protocol websockets
# Persistence
persistence true
persistence_location /mosquitto/data/
# Logging
log_dest file /mosquitto/log/mosquitto.log
log_type error
log_type warning
log_type notice
log_type information
Le fichier de mot de passe est stocké dans votre volume de configuration monté, il est donc conservé entre les redémarrages du conteneur.
Activation de TLS/SSL
Le chiffrement TLS protège votre trafic MQTT contre l'espionnage et la falsification.
Veuillez ajouter ces lignes à votre fichier mosquitto.conf:
# Secure MQTT listener
listener 8883
cafile /mosquitto/config/ca.crt
certfile /mosquitto/config/server.crt
keyfile /mosquitto/config/server.key
# Secure WebSocket listener
listener 9002
protocol websockets
cafile /mosquitto/config/ca.crt
certfile /mosquitto/config/server.crt
keyfile /mosquitto/config/server.key
Il vous sera nécessaire d'obtenir des certificats SSL pour votre domaine. Let's Encrypt fournit des certificats gratuits, ou vous pouvez utiliser des proxys inversés tels que Caddy Server qui gèrent automatiquement la génération de certificats. Veuillez placer vos fichiers de certificats dans le répertoire mosquitto/config afin qu'ils soient accessibles à l'intérieur du conteneur.
Persistance et journalisation
La persistance enregistre les messages et les abonnements sur le disque, tandis qu'une journalisation adéquate vous aide à résoudre les problèmes de connexion.
Vous pouvez configurer la persistance dans mosquitto.conf de la manière suivante :
# Enable persistence
persistence true
persistence_location /mosquitto/data/
# Save to disk every 300 seconds
autosave_interval 300
# Keep messages for offline clients
persistent_client_expiration 1d
En ce qui concerne la journalisation, voici comment vous pouvez configurer une journalisation détaillée :
# Log to file and stdout
log_dest file /mosquitto/log/mosquitto.log
log_dest stdout
# Choose what to log
log_type error
log_type warning
log_type notice
log_type information
log_type debug
# Log connection details
connection_messages true
log_timestamp true
Les options de l'log_type permettent de filtrer les éléments enregistrés :
erroretwarningpour le suivi de la productionnoticeetinformationpour des informations générales sur le fonctionnement.debugpour le dépannage des problèmes de connexion
Vos montages de volume garantissent que les données persistantes et les journaux sont conservés après le redémarrage des conteneurs. Le répertoire de données stocke tous les messages persistants et les informations d'abonnement, tandis que le répertoire de journaux conserve vos informations de débogage accessibles depuis le système hôte.
Les fichiers de configuration vous permettent de contrôler entièrement le comportement de Mosquitto sans avoir à reconstruire les conteneurs.
Vérification de la configuration
Votre courtier n'est utile qu'une fois que vous avez vérifié que les clients peuvent se connecter et échanger des messages.
Utilisation de mosquitto_pub et mosquitto_sub
Les outils en ligne de commande mosquitto_pub et mosquitto_sub constituent le moyen le plus rapide de tester votre courtier.
Veuillez commencer par installer Mosquitto, en fonction de votre plateforme :
- Linux (Ubuntu/Debian) :
sudo apt-get install mosquitto-clients - macOS :
brew install mosquitto - Windows : Veuillez télécharger depuis le site officiel d'Eclipse Mosquitto ou utiliser WSL.
Commençons par le tester sans authentification. Vous aurez besoin de deux fenêtres ou onglets de terminal. Veuillez exécuter ces commandes dans des sessions distinctes :
# Subscribe to a topic (run this first)
mosquitto_sub -h localhost -p 1883 -t test/topic
# Publish a message (run in another terminal)
mosquitto_pub -h localhost -p 1883 -t test/topic -m "Hello MQTT"
Dans l'onglet Publication, vous constaterez ce qui suit :

Image 4 - Publication d'un message
Dans l'onglet « S'abonner », vous verrez immédiatement le message suivant :

Image 5 - Abonnement à un sujet Mosquitto
Si une authentification est requise, les commandes sont similaires ; il vous suffira de fournir votre nom d'utilisateur et votre mot de passe :
# Subscribe with username and password
mosquitto_sub -h localhost -p 1883 -t test/topic -u username -P password
# Publish with credentials
mosquitto_pub -h localhost -p 1883 -t test/topic -m "Authenticated message" -u username -P password
Si vous ne souhaitez pas installer les clients Mosquitto localement, veuillez les exécuter dans votre conteneur Docker :
# Subscribe using the container
docker exec -it mosquitto mosquitto_sub -h localhost -t test/topic
# Publish using the container
docker exec -it mosquitto mosquitto_pub -h localhost -t test/topic -m "Container message"
Vous trouverez ceci dans l'onglet « Publication » :

Image 6 - Publication d'un message sans authentification
Dans l'onglet « S'abonner », vous verrez le message suivant :

Image 7 - Abonnement à un sujet Mosquitto sans authentification
Test avec des clients MQTT
Les clients GUI facilitent le test de scénarios complexes et la surveillance du trafic de messages en cours.
MQTT Explorer offre une interface claire pour parcourir les sujets et envoyer des messages. Veuillez vous connecter à localhost:1883 et vous verrez une arborescence de tous les sujets actifs. Il est idéal pour déboguer les flux de messages et comprendre la structure de vos sujets.

Image 8 - Application MQTT Explorer
MQTTX propose des fonctionnalités plus avancées telles que la création de scripts et l'envoi groupé de messages. Les deux clients prennent en charge l'authentification, les connexions TLS et les protocoles WebSocket.
Les utilisateurs de Home Assistant peuvent tester l'intégration MQTT directement à partir des outils de développement. Veuillez ajouter les informations relatives à votre courtier à l'intégration MQTT et utiliser l'interface de publication/abonnement intégrée.
Pour les tests programmatiques, le client Python Paho MQTT fonctionne efficacement :
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print(f"Connected with result code {rc}")
client.subscribe("test/topic")
def on_message(client, userdata, msg):
print(f"Received: {msg.payload.decode()}")
client = mqtt.Client()
# client.username_pw_set("username", "password") # If using auth
client.on_connect = on_connect
client.on_message = on_message
client.connect("localhost", 1883, 60)
client.loop_forever()
Veuillez exécuter ce script dans un terminal, puis publier les messages à partir d'un autre terminal ou d'un client GUI. Le script affichera tous les messages qu'il reçoit, confirmant ainsi que votre courtier achemine correctement le trafic.
Voici la procédure à suivre pour publier un message :

Image 9 - Publication d'un message pour l'exemple Python
Vous constaterez cela dans la session du terminal où le script Python est exécuté :

Image 10 - Réception d'un message pour l'exemple Python
Les opérations de publication et d'abonnement fonctionnelles indiquent que votre configuration Docker Mosquitto est prête pour des applications réelles.
Intégration de Mosquitto Docker avec Home Assistant
L'exécution de Mosquitto parallèlement à Home Assistant dans Docker permet de créer un hub de messagerie IoT complet sans aucune configuration réseau complexe.
Docker Compose simplifie considérablement cette opération. Les deux services peuvent communiquer via le réseau interne de Docker sans exposer de ports supplémentaires ni gérer d'adresses IP.
Voici un exemple complet d'docker-compose.yml ation qui exécute les deux services :
services:
mosquitto:
image: eclipse-mosquitto:latest
container_name: mosquitto
restart: unless-stopped
ports:
- "1883:1883"
- "9001:9001"
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log
networks:
- homeassistant
homeassistant:
image: ghcr.io/home-assistant/home-assistant:stable
container_name: homeassistant
restart: unless-stopped
ports:
- "8123:8123"
volumes:
- ./homeassistant:/config
- /etc/localtime:/etc/localtime:ro
networks:
- homeassistant
depends_on:
- mosquitto
networks:
homeassistant:
driver: bridge
La section networks crée un réseau partagé où les deux conteneurs peuvent se joindre mutuellement par leur nom. Home Assistant peut se connecter à mosquitto:1883 au lieu d'utiliser localhost ou des adresses IP.
Veuillez démarrer les deux services avec :
docker-compose up -d
Veuillez ensuite configurer l'intégration MQTT via l'interface web de Home Assistant. Veuillez vous rendre dans Paramètres > Appareils et services > Ajouter une intégration, puis recherchez « MQTT ».
Veuillez saisir les informations de connexion suivantes :
- Courtier :
mosquitto(nom du conteneur) - Port :
1883 - Nom d'utilisateur/Mot de passe : Vos identifiants si l'authentification est activée
- Veuillez conserver les autres paramètres par défaut.
Veuillez cliquer sur « Soumettre » et Home Assistant testera la connexion. Si l'opération est réussie, MQTT apparaîtra dans votre liste d'intégrations.

Image 11 - Configuration de Mosquitto avec Homelab
Vous pouvez désormais ajouter des appareils MQTT, créer des automatisations qui publient des messages et surveiller les données des capteurs via des sujets. L'intégration MQTT de Home Assistant gère automatiquement la détection des appareils compatibles.
Dépannage des problèmes courants
La plupart des problèmes rencontrés avec Docker Mosquitto sont liés à des autorisations, des ports ou des erreurs de configuration qui bloquent les connexions.
Erreurs d'autorisation avec les volumes montés
Ces problèmes surviennent lorsque le conteneur ne peut pas écrire dans vos répertoires hôtes. Vous observerez des messages d'erreur tels que « Permission refusée » ou « Impossible de créer le répertoire » dans les journaux.
Veuillez corriger cela en définissant les droits d'accès appropriés sur vos répertoires :
sudo chown -R 1883:1883 mosquitto/
Le conteneur Mosquitto s'exécute sous l'ID utilisateur 1883, il est donc nécessaire que vos répertoires hôtes correspondent. Sur certains systèmes, il peut être nécessaire de créer l'utilisateur au préalable :
sudo useradd -u 1883 mosquitto
sudo chown -R mosquitto:mosquitto mosquitto/
Conflits de ports
Ces problèmes surviennent lorsque le port 1883 est déjà utilisé par un autre élément. Veuillez vérifier ce qui est en cours d'exécution sur ce port :
# Linux/macOS
sudo lsof -i :1883
# Windows
netstat -an | findstr :1883
Si un autre service utilise le port, veuillez soit l'arrêter, soit attribuer un autre port à Mosquitto :
docker run -p 1884:1883 eclipse-mosquitto:latest
Le mode local uniquement empêche les connexions externes.
Ceci se produit même lorsque votre conteneur est en cours d'exécution. Mosquitto 2.0+ accepte par défaut uniquement les connexions provenant de localhost, sauf si vous le configurez autrement.
Veuillez créer un fichier mosquitto.conf de base pour autoriser les connexions externes :
listener 1883
allow_anonymous true
Veuillez placer ce fichier dans votre répertoire mosquitto/config et redémarrer le conteneur.
Vider les répertoires au démarrage
Cela signifie que vos montages de volume ne fonctionnent pas correctement. Veuillez vérifier que vos chemins d'accès sont absolus et que les répertoires existent :
# Wrong - relative path might not work
-v ./mosquitto/config:/mosquitto/config
# Better - absolute path
-v $(pwd)/mosquitto/config:/mosquitto/config
Veuillez créer les répertoires avant de démarrer le conteneur :
mkdir -p mosquitto/{config,data,log}
Conflit entre les identifiants UID/GID de l'hôte et du conteneur
Cela entraînera des problèmes persistants liés aux autorisations. Le conteneur est configuré pour fonctionner sous l'utilisateur 1883, mais il est possible que votre système hôte ait des exigences différentes en matière de propriété.
Veuillez forcer le conteneur à s'exécuter en tant qu'utilisateur :
docker run --user $(id -u):$(id -g) eclipse-mosquitto:latest
Ou modifiez les autorisations de votre répertoire hôte afin qu'elles correspondent aux attentes du conteneur. L'approche par conteneur est plus efficace pour le développement, tandis que la correction des autorisations de l'hôte est plus efficace pour les déploiements en production.
Veuillez vérifier les journaux du conteneur lorsque les éléments ne fonctionnent pas correctement ; ils indiquent généralement avec précision le problème rencontré.
Avancé : Fonctionnalités de Mosquitto Pro Edition
La version open source de Mosquitto couvre la plupart des cas d'utilisation, mais les environnements d'entreprise nécessitent des fonctionnalités que seule la version Pro Edition offre.
L' s de gestion des utilisateurs basée sur les rôles vous permet de définir des autorisations granulaires pour différents groupes d'utilisateurs. Au lieu de gérer l'accès de chaque utilisateur individuellement, vous pouvez créer des rôles tels que « lecteurs de capteurs », « contrôleurs d'actionneurs » ou « utilisateurs administrateurs » et attribuer des autorisations à l'ensemble des rôles. Les utilisateurs héritent des autorisations des rôles qui leur sont attribués, ce qui facilite la gestion des accès sur des centaines, voire des milliers d'appareils.
Vous pouvez restreindre l'accès par modèles de sujets, plages d'adresses IP ou fenêtres temporelles. Cela est plus efficace que de configurer manuellement les fichiers ACL lorsque vous gérez des déploiements IoT complexes avec différentes exigences de sécurité.
Les options d'authentification avancées vont au-delà des simples combinaisons nom d'utilisateur/mot de passe. L'authentification par jeton JWT s'intègre aux fournisseurs d'identité existants tels que Auth0, Okta ou le système SSO de votre entreprise. L'intégration LDAP se connecte directement à Active Directory ou à d'autres services d'annuaire d'entreprise.
L'inspection approfondie et l' de surveillance vous offrent une visibilité en temps réel sur les flux de messages, les modèles de connexion et les performances des courtiers. La version Pro comprend des tableaux de bord intégrés qui indiquent quels clients consomment le plus de bande passante, quels sujets génèrent le plus grand nombre de messages et où se forment les goulots d'étranglement.
Vous obtenez des mesures détaillées sur la latence des messages, la profondeur des files d'attente et les modèles de comportement des clients. Ces données vous permettent d'optimiser les structures thématiques et d'identifier les clients problématiques avant qu'ils n'aient un impact sur l'ensemble du système.
Les intégrations de bases de données et de services cloud éliminent le besoin d'applications passerelles personnalisées. La version Pro peut transférer automatiquement les messages vers PostgreSQL, MongoDB, InfluxDB, AWS IoT Core, Azure IoT Hub ou Google Cloud IoT. Vous définissez des règles de routage qui déterminent la destination des messages en fonction des modèles de sujet, du contenu des messages ou des métadonnées client.
Les files d'attente persistantes gèrent les scénarios à haut volume où la persistance standard de Mosquitto n'est pas suffisante. La version Pro peut mettre en mémoire tampon des millions de messages pour les clients hors ligne et répartir la charge sur plusieurs instances de courtier. Il comprend une gestion automatique des files d'attente qui empêche l'épuisement de la mémoire et garantit l'ordre des messages.
La prise en charge du clustering vous permet d'exécuter plusieurs instances de courtier qui partagent la charge des messages et offrent une protection en cas de défaillance. Lorsqu'un courtier tombe en panne, les clients se reconnectent automatiquement à des instances saines sans perdre de messages ni d'abonnements.
La version Pro est particulièrement utile lorsque vous avez besoin d'une fiabilité et de fonctionnalités de gestion de niveau professionnel qui prendraient des mois à développer par vous-même.
Avantages et inconvénients de l'utilisation de Mosquitto dans Docker
Docker facilite le déploiement, mais ce n'est pas la solution idéale dans tous les cas.
Avantages
- La cohérence multiplateforme élimine les difficultés liées aux installations spécifiques à chaque système d'exploitation. La même commande Docker fonctionne sous Windows, macOS et Linux sans qu'il soit nécessaire de rechercher différents gestionnaires de paquets ou de gérer les conflits de dépendances. Votre environnement de développement correspond exactement à l'environnement de production, ce qui réduit les imprévus lors du déploiement.
- Les mises à niveau de version simples s'effectuent en modifiant les balises d'image. Au lieu de désinstaller l'ancienne version et d'espérer que la mise à niveau ne perturbe pas votre configuration, il vous suffit de télécharger une nouvelle image et de redémarrer le conteneur. La restauration ne prend que quelques secondes en cas de problème.
- La facilité de sauvegarde et de migration est obtenue grâce à l'utilisation de volumes pour vos données. Veuillez copier le répertoire
mosquittosur un autre ordinateur, exécutez la même commande Docker, et vous serez de nouveau en ligne. Le transfert entre différents fournisseurs de services cloud ou la mise à niveau du matériel informatique se résume à un simple transfert de fichiers.
Inconvénients
Docker ne présente pas que des avantages.
- Les problèmes d'autorisation de volume affectent certains systèmes d'exploitation, en particulier lors du passage entre des hôtes Windows et Linux. Vous devrez consacrer du temps à résoudre des problèmes de propriété et à gérer des incompatibilités UID/GID qui n'existeraient pas avec une installation native.
- La configuration supplémentaire requise pour l' s de sécurité de niveau production implique que Docker ajoute de la complexité plutôt que de la supprimer. Il est nécessaire de gérer les politiques réseau, les contextes de sécurité des conteneurs et le chiffrement des volumes en plus des fonctionnalités de sécurité propres à Mosquitto. Les installations natives vous permettent d'utiliser directement les cadres de sécurité existants de votre système d'exploitation.
- Une baisse potentielle des performances peut survenir dans les scénarios à haut débit où chaque microseconde compte. La couche réseau du conteneur et les montages de volumes ajoutent une surcharge que les installations natives évitent. Pour la plupart des applications IoT, cette différence est négligeable, mais les systèmes industriels en temps réel pourraient être affectés par la latence.
Docker est la solution idéale lorsque vous avez besoin de déploiements cohérents et d'une gestion simplifiée dans différents environnements.
Conclusion
L'exécution de Mosquitto dans Docker vous offre un courtier MQTT fiable qui fonctionne de manière cohérente dans tous les environnements. Que vous réalisiez des prototypes d'appareils IoT, développiez des systèmes domotiques ou connectiez des capteurs, Docker élimine la complexité de la configuration et vous permet de vous concentrer sur votre projet.
Si vous envisagez d'utiliser Mosquitto en production, veuillez garder à l'esprit les points suivants :
- Veuillez sécuriser votre courtier avant de l'exposer à Internet.
- Veuillez activer l'authentification avec
mosquitto_passwdet configurer le chiffrement TLS avec les certificats appropriés. - Limiter l'accès aux clients qui en ont besoin
Un courtier MQTT non sécurisé constitue une porte ouverte aux attaquants qui souhaitent surveiller les communications des appareils ou injecter des commandes malveillantes.
Pour les déploiements d'entreprise qui nécessitent des fonctionnalités avancées telles que le contrôle d'accès basé sur les rôles, le clustering ou l'intégration LDAP, Mosquitto Pro Edition fournit des outils de gestion et une évolutivité qui surpassent la version open source.
Êtes-vous prêt à améliorer vos compétences en matière de Docker et Kubernetes ? Inscrivez-vous à notre formation sur la conteneurisation et la virtualisation avec Docker et Kubernetes pour suivre un cursus de compétences pertinentes et trouver un emploi.
FAQ sur Mosquitto Docker
Quelle est la différence entre l'exécution native de Mosquitto et son exécution dans Docker ?
Docker assure une cohérence multiplateforme et élimine les conflits de dépendances qui affectent les installations natives. Votre configuration Mosquitto fonctionne de manière identique sous Windows, macOS et Linux, sans qu'il soit nécessaire de rechercher des paquets spécifiques à chaque plateforme. Docker simplifie également les mises à niveau et les restaurations de versions : il suffit de modifier la balise de l'image et de redémarrer le conteneur. Cependant, les installations natives peuvent offrir des performances légèrement supérieures dans les scénarios à haut débit.
Ai-je besoin de Docker Compose pour exécuter Mosquitto, ou puis-je utiliser les commandes Docker habituelles ?
Vous pouvez tout à fait exécuter Mosquitto avec les commandes Docker habituelles en utilisant docker run. Docker Compose simplifie la gestion, en particulier lorsque vous exécutez plusieurs services tels que Home Assistant ou Node-RED en parallèle de Mosquitto. Si vous utilisez uniquement Mosquitto, une simple commande docker run fonctionne parfaitement.
Mosquitto dans Docker est-il suffisamment sécurisé pour une utilisation en production ?
Mosquitto Docker peut être utilisé en production avec une configuration adéquate. Il sera nécessaire de désactiver l'accès anonyme, de configurer l'authentification avec mosquitto_passwd, de paramétrer le chiffrement TLS et de limiter l'accès au réseau aux clients de confiance uniquement. Le conteneur en lui-même ne présente pas de failles de sécurité, mais il est de votre responsabilité de sécuriser à la fois la configuration de Mosquitto et l'environnement Docker.
Pourquoi mon conteneur Mosquitto démarre-t-il mais refuse-t-il les connexions externes ?
Mosquitto 2.0+ est configuré par défaut en mode local uniquement, ce qui signifie qu'il n'accepte que les connexions provenant de localhost à l'intérieur du conteneur. Il est nécessaire de créer un fichier mosquitto.conf avec listener 1883 et allow_anonymous true (à des fins de test) ou les paramètres d'authentification appropriés. Veuillez placer ce fichier de configuration dans votre répertoire /mosquitto/config monté et redémarrer le conteneur.
Comment puis-je résoudre les erreurs « Permission refusée » lorsque Mosquitto tente d'écrire sur des volumes montés ?
Le conteneur Mosquitto s'exécute sous l'ID utilisateur 1883, mais vos répertoires hôtes peuvent avoir des propriétaires différents. Veuillez exécuter la commande « sudo chown -R 1883:1883 mosquitto/ » pour corriger les droits d'accès, ou bien créez d'abord l'utilisateur «mosquitto» à l'aide de la commande « sudo useradd -u 1883 mosquitto », puis modifiez les droits d'accès. Sur certains systèmes, il est également possible d'exécuter le conteneur avec l'option ` --user $(id -u):$(id -g) ` afin de l'associer à votre utilisateur hôte.
