MQTT - Broker : Docker Setup

MQTT (Message Queuing Telemetry Transport) ist ein offenes Netzwerkprotokoll für das Übertragen von Nachrichten zwischen Geräten. Ein MQTT-Broker, wie der Open Source Mosquitto-Server, ist eine einfache Lösung um Daten von SmartHome-Geräten zu empfangen oder diese zu steuern. Als Beispiel setze ich MQTT mit einem ESP32-Microcontroller ein, damit dieser Werte an den MQTT-Broker sendet, welche über die MQTT-Integration in HomeAssistant abgerufen werden können. Zudem verwende ich den MQTT-Broker für die Kommunikation meiner Zigbee-Geräte über Zigbee2MQTT, siehe: Home-Assistant Docker Conbee 2 und Zigbee2MQTT / deCONZ. 

Docker Basics

Docker ermöglicht es, Services oder Applikationen per Befehl in einem sogenannten Container zu starten.
Ein Container ist eine vom Betriebssystem (OS) unabhängige isolierte Umgebung:
Beim ersten Start eines Containers, lädt Docker selbstständig alle notwendigen Quellen
aus dem Internet.
Docker kann unter Windows, macOS oder einer Linux-Distribution installiert werden,
siehe auch: Docker

Wer Docker und Docker-Compose auf seinem System installiert hat, kann nach Anlage der folgenden Datei den MQTT-Broker Mosquitto starten, fürs Erste ohne den Ordner config damit wir für MQTT ein Passwort vergeben können:

Um MQTT mittels docker compose zu starten, kann das Docker-Image mit einer simplen docker-compose.yml Datei heruntergeladen, erstellt und gestartet werden. Die Datei kann mit einem beliebigen Texteditor wie folgt befĂĽllt und dann angepasst werden:

Dateiname: docker-compose.yml, Inhalt:

version: "2"
 services:
  mosquitto:
    image: eclipse-mosquitto
    container_name: mqtt
    restart: always
    volumes:
      - ./mosquitto/data:/mosquitto/data
      - ./mosquitto/log:/mosquitto/log
    ports:
      - "1883:1883"
      - "9001:9001"

Das Beispiel verwendet Bind-Mounts und keine Docker Volumes für das permanente Speichern der Daten. Siehe: Docker Daten speichern: Docker Volumes vs. Host-Ordner

docker-compose up startet den Container:

docker-compose up

Achtung der Ordner /mosquitto/config  und somit die Konfig-Datei: mosquitto.conf fehlt in dem docker-compose-File fürs Erste noch. Diese wird beim Starten initial erzeugt und befindet sich nur innerhalb des Containers, alle Einstellungen würden somit beim Neustart des Containers verloren gehen. Der Container funktioniert an dieser Stelle mit den Standardeinstellungen bereits, lässt aber sämtliche Geräte ohne Passwort mit dem Broker kommunizieren:

c:\temp\mosquitto>docker-compose up
Recreating mqtt ... done
Attaching to mqtt
mqtt         | 1642331896: mosquitto version 2.0.14 starting
mqtt         | 1642331896: Config loaded from /mosquitto/config/mosquitto.conf.
mqtt         | 1642331896: Starting in local only mode. Connections will only be possible from clients running on this machine.
mqtt         | 1642331896: Create a configuration file which defines a listener to allow remote access.
mqtt         | 1642331896: For more details see https://mosquitto.org/documentation/authentication-methods/
mqtt         | 1642331896: Opening ipv4 listen socket on port 1883.
mqtt         | 1642331896: Opening ipv6 listen socket on port 1883.
mqtt         | 1642331896: Error: Address not available
mqtt         | 1642331896: mosquitto version 2.0.14 running

Damit ich fĂĽr MQTT ein Passwort vergeben kann und die Einstellungen nach dem Neustart des Containers vorhanden bleiben, habe ich mich in den Container verbunden und darin eine Passwort-Datei erzeugt:

c:\temp\mosquitto> docker exec -it mqtt sh
/ # mosquitto_passwd -b -c passwd mqttUser myMQTTPassword
/ # cat passwd
mqttuser:???x

Der Inhalt der Ausgabe mqttuser:???, kann dann im Ordner /config in die Datei passwd gegeben werden:

Dann sollte noch eine neue Datei "mosquitto.conf" fĂĽr dir Konfiguration mit folgendem Inhalt angelegt werden:

port 1883
listener 9001
protocol websockets
persistence true
persistence_location /mosquitto/data
allow_anonymous false
password_file /mosquitto/config/passwd

Im Anschluss kann der Docker-Container gestoppt, der Ordner /mosquitto/config hinzugefĂĽgt und wieder gestartet werden:

Anpassungen an der docker-compose.yml-Datei: HinzufĂĽgen von /config:

version: "2"
services:
  mosquitto:
    image: eclipse-mosquitto
    container_name: mqtt
    restart: always
    volumes:
      - ./mosquitto/config:/mosquitto/config
      - ./mosquitto/data:/mosquitto/data
      - ./mosquitto/log:/mosquitto/log
    ports:
      - "1883:1883"
      - "9001:9001"

Ein erneuter Start des Containers verwendet die erstellte Konfiguration und das vergebene Passwort:

docker-compose up -d

Ein Blick in die Ausgabe des Containers (docker logs) zeigt uns den erfolgreichen Start:

c:\temp\mosquitto>docker logs mqtt -f
1642333000: mosquitto version 2.0.14 starting
1642333000: Config loaded from /mosquitto/config/mosquitto.conf.
1642333000: Opening websockets listen socket on port 9001.
1642333000: Opening ipv4 listen socket on port 1883.
1642333000: Opening ipv6 listen socket on port 1883.
1642333000: mosquitto version 2.0.14 running

FĂĽr eine Integration in Home Assistant, siehe: Home Assistant Integrationen

Anzeige der Verbindungen: Logs

In den Docker-Logs kann die Verbindung einzelner Geräte beobachtet werden:

docker logs mqtt -f
1641494340: New connection from 172.22.0.4:44135 on port 1883.
1641494340: New client connected from 172.22.0.4:44135 as ?????? (p2, c1, k60, u'mqtt').
1641494608: Client ??? closed its connection.
1641496053: Saving in-memory database to /mosquitto/data/mosquitto.db.

 

Dienste, die den MQTT-Broker verwenden

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE fĂĽr deine Bewertung!

Aktualisiert: 11.12.2022 von Bernhard | Translation English |đź””


Top-Artikel in diesem Bereich


ioBroker installieren - Docker

Mit ioBroker können verschiedene Automatisierungslösungen oder Geräte in einem System zusammengefasst werden. Um bestimmte Gateways oder Geräte ansprechen zu können, werden in ioBroker verschiedene Adapter verwendet.


Smart-Home-Plattform - Systeme: ioBroker vs. Home-Assistant

Meine Empfehlung, müsste ich mich zwischen ioBroker und Home Assistant entscheiden, würde zugunsten von Home Assistant fallen. Mit Home Assistant fällt der Start wesentlich leichter und dank der zahlreichen Plugins kann Home Assistent allen Bedürfnissen angepasst werden


Bitwarden in Docker betreiben - Setup Schritt fĂĽr Schritt

Bitwarden ist ein webbasierter Passwort-Manager, ähnlich LastPass, aber Open Source und der Möglichkeit diesen selbst zu betreiben (hosten). Wie sich Bitwarden im Vergleich zu anderen Passwort-Managern einordnet, habe ich auf folgender Seite überlegt: Passwort-Manager sicher? KeePass vs. LastPass vs. Bitwarden. Bitwarden besteht aus mehreren Services, welche über verschiedene Container bereitgestellt werden können. Das relativ aufwändige Setup wurde mit "Bitwarden Unified" speziell für ein Selbs...


Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]

✍anonym
02.12.2022 22:20
Guten Abend,
ich bin bislang noch nicht angemeldet auf Ihrer Seite, möchte aber trotzdem mal (zuerst) meinen Dank aussprechen für diese Anleitung. Ich bin soweit, dass Portainer das mqtt-image als "running" ausweisst... ;)
Meine Frage ist folgende: In Homeassistant werde ich nei der MQTT-Integration nach "server" und nach "Benutzernamen" und seinem Passwort gefragt. Letzteres habe ich (wobei ich "mosquitto_passwd -b -c passwd mqtt myMQTTPassword" so interpretiert habe, dass myMQTTPassword durch mein eigenes ersetzt werden musste).
Wie aber ist der Name des Servers, und wie heisst der Benutzer?
Besten Dank vorab von einem Einsteiger,
Klaus
↳
✍anonym
gepostet am 11.12.2022 11:57
Hallo Klaus,
der Benutzer im Beispiel oben heiĂźt "mqtt". Ist ein bisschen unglĂĽcklich im Kontext :-)

Liebe GrĂĽĂźe,
Manuel

Beitrag erstellt von anonym
↳
✍Bernhard
gepostet am 11.12.2022 14:20
Stimmt, vielen Dank: habe den Usernamen auf mqttuser geändert.

Beitrag erstellt von Bernhard

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details