Mosquitto est un service MQTT (Message Queuing Telemetry Transport) permettant de mettre en place facilement du queuing de message grace à son protocole publish-subscribe. Il est très largement utilisé dans des applications liées aux objets communiquants.

Il servira a collecter les données de différents capteurs et les rendre accessibles en un point unique, sous forme de queue, à d’autres outils exploitant ces données.

Installation

  1. Créer le répertoire pour Mosquitto :

    $ sudo mkdir /opt/mosquitto
    
  2. Dans Portainer, créer un nouveau stack nommé mosquitto.

  3. Ajouter le contenu du fichier compose ci-dessous :

    Sans Traefik :

    ---
    version: "3"
    
    services:
      mosquitto:
        image: eclipse-mosquitto
        container_name: mosquitto_broker
        volumes:
          - /opt/mosquitto/config:/mosquitto/config
          - /opt/mosquitto/data:/mosquitto/data
          - /opt/mosquitto/log:/mosquitto/log
        ports:
          - 1884:1883
          - 9001:9001
        restart: unless-stopped
        networks:
            - default
    

    Il n’y a pas de frontal web, donc pas besoin de configuration spécifique pour le reverse proxy. De plus, j’ai modifié le port exposé par défaut, car le port 1883 était déjà utilisé par un autre service.

  4. Cliquer sur Deploy the stack en bas de la page.

  5. Depuis le client MQTT Explorer, vous pouvez vérifier que l’accès au serveur fonctionne bien. Néanmoins, vous ne verrez pas grand chose tant qu’aucune donnée ne lui est envoyé.

Utilisateurs

Gestion des utilisateurs

La manuipulation des utilisateur se fait directement depuis la console du container, celui-ci disposant de l’outil nécessaire.

Attacher la console du container :

$ sudo docker exec -it mosquitto_broker sh
/ # mosquitto_passwd -c /mosquitto/config/pwfile <USERNAME>
/ # mosquitto_passwd /mosquitto/config/pwfile <USERNAME>
/ # mosquitto_passwd -D /mosquitto/config/pwfile <USERNAME>

ACLs

La gestion des ACLs peut se faire depuis l’hôte, car il ne s’agit que d’un fichier texte. Editer le fichier /opt/mosquitto/config/acl :

# Allow anonymous to read all
topic read #

# Allow readwrite to user1
user user1
topic readwrite foo/bar/#

# Allow readwrite to user2
user user2
topic readwrite foo/+/bar

+: wildcard simple

#: wildcard multiple

Sources :