Mosquitto 2 Installation (Docker)
Vorbereitung
Download des Mosquitto 2 Docker Image und erstellen der Ordner, die später in den laufenden Container eingebunden werden:
docker pull eclipse-mosquitto:2-openssl
sudo mkdir -p /opt/mosquitto/{data,log,config}
sudo chmod -R 777 /opt/mosquitto
tree -ph /opt/mosquitto
[drwxrwxrwx 4.0K] /opt/mosquitto
├── [drwxrwxrwx 4.0K] config
├── [drwxrwxrwx 4.0K] data
└── [drwxrwxrwx 4.0K] log
Erstellen der Konfigurationsdatei
Die Standard Konfiguration kann von Github heruntergeladen werden:
cd /opt/mosquitto/config
wget https://raw.githubusercontent.com/eclipse-mosquitto/mosquitto/2c671de72a0aebff0f3896a1b7dab2f2dfe51c26/mosquitto.conf
Und dann nach eigenen Bedürfnissen angepasst werden:
# Config file for mosquitto
#
# See mosquitto.conf(5) for more information.
#
per_listener_settings false
allow_zero_length_clientid true
auto_id_prefix zeroid-
check_retain_source true
max_inflight_messages 20
max_keepalive 65535
max_qos 2
max_queued_messages 1000
memory_limit 0
persistent_client_expiration 1d
queue_qos0_messages false
retain_available true
set_tcp_nodelay false
sys_interval 10
upgrade_outgoing_qos false
listener 1883
max_connections 1024
protocol mqtt
autosave_interval 7200
autosave_on_changes false
persistence false
persistence_file /mosquitto/config/mosquitto.db
log_dest file /mosquitto/log/logfile
log_type all
connection_messages true
log_timestamp true
log_timestamp_format %Y-%m-%dT%H:%M:%S
allow_anonymous false
password_file /mosquitto/config/passwordfile
acl_file /mosquitto/config/acl
Beschränken der Kamera MQTT Topics
Die Konfigurationsdatei hat bereits eine ACL (Access Control List) verlinkt, die noch angelegt werden muss, um festzulegen welche MQTT Topics der Kamera wir verwenden möchten:
nano /opt/mosquitto/config/acl
topic readwrite +/+/status/alarm/#
topic readwrite +/+/alarm/#
topic read $SYS/#
Hier können alle gewünschten Topics aufgelistet werden - entweder mit read
, write
oder readwrite
Rechten. Man kann entweder alle gewünschten Topics separate auflisten oder „wildcards“ nutzen, um Gruppen von Topics hinzuzufügen.
Die beiden +
Zeichen am Anfang bedeuten, dass man alle Topics anspricht, unabhängig vom MQTT Präfix und Klienten-ID. Das #
Symbol am Ende bedeutet das alle Topics, die unter alarm/
liegen mit eingeschlossen werden. Es werden also alle Status und Befehl Alarm Topics durchgelassen. Alle Anderen - features/
, smarthome/
, system/
usw. - stehen somit nicht mehr zur Verfügung!
Diese Datei kann ganz nach Bedarf angepasst werden.
Erstellen der Login Daten
Mosquitto hat ein Tool mit dem das Login automatisch erstellt werden kann. Da wir aber Mosquitto in Docker nutzen und der Container noch nicht läuft, werde ich einfach erstmal Benutzername admin
und Kennwort instar
als Datei anlegen. Das ganze sieht dann so aus:
nano /opt/mosquitto/config/passwordfile
admin:$7$101$bvT+wpQDxOnSx37x$jzMPWSG/gJ5BnoBd6wEbbUrCfjhOrrRs7eXJnz99CfEIQXDBNf6otaXi9g0hBqXwz6obwz8E8uGTcXPsP4Emag==
tree -ph /opt/mosquitto
[drwxrwxrwx 4.0K] /opt/mosquitto
├── [drwxrwxrwx 4.0K] config
│ ├── [-rwxrwxrwx 132] acl
│ ├── [-rwxrwxrwx 40K] mosquitto.conf
│ └── [-rwxrwxrwx 119] passwordfile
├── [drwxrwxrwx 4.0K] data
├── [drwxrwxrwx 4.0K] log
Später kann, wenn der Container läuft, kann man sich dann die Datei nochmal öffnen und ein beliebiges Kennwort in Klartext eingeben - hier nochmal mit admin:instar
gezeigt:
vi /opt/mosquitto/config/passwordfile
admin:instar
Wenn man sich jetzt in den laufenden Container verbindet, steht einem das Kennwort Tool zur Verfügung mit dem man die Datei bearbeiten kann:
mosquitto_passwd -U /mosquitto/config/passwordfile
Wenn man die Datei jetzt nochmal öffnet, wird man sehen, dass das Kennwort nicht mehr im Klartext ist:
cat /mosquitto/config/passwordfile
Start des Containers
Nachdem man die Konfiguration erstellt hat, kann man den Container starten und alle erstellten Verzeichnisse mitsamt der erstellten Dateien in den Container linken:
docker run -it -p 1883:1883 -v "/opt/mosquitto/config:/mosquitto/config" -v "/opt/mosquitto/data:/mosquitto/data" -v "/opt/mosquitto/log:/mosquitto/log" eclipse-mosquitto:2-openssl
Wenn der Container nicht starten will hilft ein Blick ins Logbuch - oft hat man hier noch Probleme mit Schreib- oder Leserechten zu beseitigen:
tail -f /opt/mosquitto/log/logfile
2025-06-20T10:08:37: mosquitto version 2.0.21 starting
2025-06-20T10:08:37: Config loaded from /mosquitto/config/mosquitto.conf.
2025-06-20T10:08:37: Opening ipv4 listen socket on port 1883.
2025-06-20T10:08:37: Opening ipv6 listen socket on port 1883.
2025-06-20T10:08:37: mosquitto version 2.0.21 running