# Externer Mosquitto MQTT Broker (Docker mit ACLs)

**URL:** https://forum.instar.com/t/externer-mosquitto-mqtt-broker-docker-mit-acls/30813
**Category:** INSTAR MQTT
**Tags:** smarthome, entwickler, mqtt
**Created:** [20. Juni 2025 um 10:11 UTC](https://forum.instar.com/t/externer-mosquitto-mqtt-broker-docker-mit-acls/30813 "2025-06-20T10:11:45Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![INSTAR](https://forum.instar.com/user_avatar/forum.instar.com/instar/32/871_2.png) [@INSTAR](https://forum.instar.com/u/INSTAR)
#### Post date: [20. Juni 2025 um 10:11 UTC](https://forum.instar.com/t/externer-mosquitto-mqtt-broker-docker-mit-acls/30813/1 "2025-06-20T10:11:45Z")

</div>

# Mosquitto 2 Installation (Docker)

## Vorbereitung

Download des Mosquitto 2 Docker Image und erstellen der Ordner, die später in den laufenden Container eingebunden werden:

```bash
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](https://github.com/eclipse-mosquitto/mosquitto/) heruntergeladen werden:

```bash
cd /opt/mosquitto/config

wget https://raw.githubusercontent.com/eclipse-mosquitto/mosquitto/2c671de72a0aebff0f3896a1b7dab2f2dfe51c26/mosquitto.conf

```

Und dann nach eigenen Bedürfnissen angepasst werden:

```bash
# 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:

```bash
nano /opt/mosquitto/config/acl

```

```bash
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:

```bash
nano /opt/mosquitto/config/passwordfile

```

```bash
admin:$7$101$bvT+wpQDxOnSx37x$jzMPWSG/gJ5BnoBd6wEbbUrCfjhOrrRs7eXJnz99CfEIQXDBNf6otaXi9g0hBqXwz6obwz8E8uGTcXPsP4Emag==

```

```bash
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:

```bash
vi /opt/mosquitto/config/passwordfile

```

```auto
admin:instar

```

Wenn man sich jetzt in den [laufenden Container verbindet](https://docs.docker.com/reference/cli/docker/container/exec/), steht einem das Kennwort Tool zur Verfügung mit dem man die Datei bearbeiten kann:

```bash
mosquitto_passwd -U /mosquitto/config/passwordfile

```

Wenn man die Datei jetzt nochmal öffnet, wird man sehen, dass das Kennwort nicht mehr im Klartext ist:

```bash
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:

```bash
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:

```bash
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

```
