Mosquitto Broker einrichten
Um Mosquitto als MQTT-Broker auf deinem Raspberry Pi mittels Docker zu betreiben, solltest du zunächst eine
passende Verzeichnisstruktur anlegen, in der die Konfigurationsdateien und
Passwortdateien abgelegt werden. Empfehlenswert ist es, dafür einen Ordner wie ~/mosquitto/config
zu
erstellen. Das machst du mit dem Befehl:
mkdir -p ~/mosquitto/config
Anschließend musst du eine Passwortdatei erzeugen, da du den Broker idealerweise mit Benutzername und Passwort absichern möchtest. Hierfür benötigst du das Tool mosquitto_passwd , welches du mit sudo apt-get install mosquitto-clients installieren kannst, falls es noch nicht auf deinem System ist. Die Passwortdatei erzeugst du dann mit:
mosquitto_passwd -c ~/mosquitto/config/passwordfile myuser
Dabei wirst du aufgefordert, ein Passwort für den Benutzer myuser einzugeben. Diese Datei enthält die verschlüsselten Zugangsdaten, die der Broker später beim Verbindungsaufbau prüft.
Im nächsten Schritt erstellst du eine neue Mosquitto-Konfigurationsdatei namens mosquitto.conf im selben Verzeichnis ~/mosquitto/config . Diese Datei sollte mindestens folgende Zeilen enthalten:
allow_anonymous false password_file /mosquitto/config/passwordfile listener 1883 log_dest stdout
Wichtig ist hier, dass der Pfad zur Passwortdatei auf den Pfad innerhalb des Containers verweist, also /mosquitto/config/passwordfile. Das Verzeichnis ~/mosquitto/config auf deinem Raspberry Pi wird später in den Container gemountet und steht dort unter /mosquitto/config zur Verfügung.
Nachdem die Konfiguration und die Passwortdatei vorbereitet sind, kannst du den Mosquitto-Docker-Container starten. Dabei bindest du die Konfigurationsdatei und die Passwortdatei als Volumes ein, damit der Broker sie nutzen kann. Der Befehl dafür lautet:
docker run -d --name mosquitto -p 1883:1883 \ -v ~/mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf \ -v ~/mosquitto/config/passwordfile:/mosquitto/config/passwordfile \ eclipse-mosquitto
Falls beim Starten des Containers eine Fehlermeldung erscheint, dass der Containername bereits vergeben ist, kannst du zuerst den bestehenden Container stoppen und löschen:
docker stop mosquitto docker rm mosquitto
Danach startest du den Container mit dem obigen Befehl erneut. Sollte der Port 1883 bereits auf deinem Raspberry Pi belegt sein, etwa durch einen laufenden Mosquitto-Dienst, kannst du diesen Dienst mit sudo systemctl stop mosquitto stoppen oder den Docker-Container auf einem anderen Port starten, z.B.:
docker run -d --name mosquitto -p 1884:1883 ...
Nach erfolgreichem Start des Containers kannst du die Funktionalität testen, indem du mit einem MQTT-Client Nachrichten abonnierst und veröffentlichst. Beispiel mit dem mosquitto_sub und mosquitto_pub Befehl:
mosquitto_sub -h localhost -t test/topic -u myuser -P deinpasswort
mosquitto_pub -h localhost -t test/topic -m "Hallo MQTT" -u myuser -P deinpasswort
Damit wird sichergestellt, dass dein Mosquitto-Broker korrekt mit Passwortschutz läuft und MQTT-Nachrichten verarbeitet.