Docker Compose
Come installare Eclipse Mosquitto MQTT con Docker Compose
Installa Eclipse Mosquitto come broker MQTT persistente, configura autenticazione con password, verifica la porta 1883 e collega Home Assistant in sicurezza.
Prerequisiti & Hardware Necessario
- Hardware: server Linux, Raspberry Pi 5 o VM Debian con Docker Engine, rete locale stabile e storage persistente. Per un host compatto puoi usare un Raspberry Pi 5 4GB con alimentatore ufficiale.
- Software: Docker Engine, Docker Compose v2 ed Eclipse Mosquitto, broker MQTT open source. Mosquitto è il software broker; Home Assistant è un client MQTT e non sostituisce il broker.
- Rete: porta TCP 1883 per MQTT non cifrato nella LAN. Non esporla direttamente su Internet; per accesso remoto usa VPN o configura TLS con certificati.
- Dati: directory persistenti per
/mosquitto/config,/mosquitto/datae/mosquitto/log.
Procedura passo-passo
- Crea le directory del broker.
sudo install -d -m 0755 /opt/mosquitto/config /opt/mosquitto/data /opt/mosquitto/log cd /opt/mosquitto - Crea la configurazione iniziale. Salva in
/opt/mosquitto/config/mosquitto.conf:persistence true persistence_location /mosquitto/data/ log_dest stdout listener 1883 allow_anonymous false password_file /mosquitto/config/password_fileDefinire un listener richiede esplicitamente autenticazione: non abilitare
allow_anonymous truesu una rete domestica non isolata. - Crea il file delle credenziali. Sostituisci il nome utente e inserisci una password lunga quando richiesto:
docker run --rm -it -v /opt/mosquitto/config:/mosquitto/config eclipse-mosquitto:2 mosquitto_passwd -c /mosquitto/config/password_file homeassistant - Crea
/opt/mosquitto/compose.yaml.services: mosquitto: image: eclipse-mosquitto:2 container_name: mosquitto restart: unless-stopped ports: - "1883:1883" volumes: - /opt/mosquitto/config:/mosquitto/config - /opt/mosquitto/data:/mosquitto/data - /opt/mosquitto/log:/mosquitto/log - Avvia e controlla il broker.
Lo stato deve esserecd /opt/mosquitto docker compose config docker compose up -d docker compose ps docker compose logs --tail=100 mosquittoUpe il log non deve riportare errori di lettura di configurazione o password. - Prova autenticazione e pubblicazione. Apri un terminale e sottoscrivi un topic:
In un secondo terminale pubblica:docker run --rm -it --network host eclipse-mosquitto:2 mosquitto_sub -h 127.0.0.1 -p 1883 -u homeassistant -P 'PASSWORD_REALE' -t domotica/test -vdocker run --rm eclipse-mosquitto:2 mosquitto_pub -h HOST_MQTT -p 1883 -u homeassistant -P 'PASSWORD_REALE' -t domotica/test -m 'ok' - Collega Home Assistant. Vai in Impostazioni → Dispositivi e servizi → Aggiungi integrazione → MQTT. Inserisci hostname o IP del server Mosquitto, porta
1883, utentehomeassistante password. Se Home Assistant gira sulla stessa macchina ma in un container separato, usa l’IP del server o una rete Docker condivisa: non assumere che127.0.0.1punti al broker. - Verifica MQTT Discovery. Pubblica solo dopo aver collegato l’integrazione. Il prefisso discovery predefinito di Home Assistant è
homeassistant; controllalo nelle opzioni MQTT e non usare topic casuali per i messaggi di discovery. - Aggiorna con backup. Salva
/opt/mosquitto/confige/opt/mosquitto/data, poi esegui
Non usarecd /opt/mosquitto docker compose pull docker compose up -d docker compose logs --tail=100 mosquittodocker compose down -v: potrebbe eliminare volumi e dati persistenti.
Verifica del funzionamento
La configurazione è corretta quando il container Mosquitto è attivo, la porta 1883 è in ascolto, una sottoscrizione autenticata riceve il messaggio di test e Home Assistant completa la configurazione MQTT. Una connessione senza credenziali deve essere rifiutata. Riavvia il server e verifica che i messaggi retained e la persistenza restino disponibili dove previsto.
Problemi comuni
| Problema | Causa | Soluzione |
|---|---|---|
| Connection refused | Container fermo, IP errato o porta non pubblicata | Controlla docker compose ps, log, firewall e ss -lnt | grep 1883. |
| Not authorised | Utente/password errati o password file non letto | Ricrea la credenziale con mosquitto_passwd e verifica il percorso in mosquitto.conf. |
| Il broker parte ma non conserva messaggi | Directory data non montata o persistence disattivata | Controlla il bind mount e mantieni persistence true. |
| Home Assistant non trova dispositivi | Broker raggiungibile ma discovery disabilitato o topic errato | Controlla l’integrazione MQTT e il prefisso discovery homeassistant. |
| Broker esposto su Internet | Port forwarding della porta 1883 | Rimuovi il port forwarding e usa VPN; MQTT su 1883 non è cifrato. |
FAQ essenziali
Posso usare Mosquitto senza password?
Solo in un ambiente isolato e temporaneo. Per una rete domotica usa autenticazione; allow_anonymous false evita client sconosciuti.
Devo usare MQTT 1883 o 8883?
1883 è MQTT TCP senza TLS, adatto alla LAN protetta. 8883 è una convenzione comune per MQTT con TLS, ma richiede certificati e una configurazione esplicita del listener.
Prodotti consigliati
Hardware pertinente alla guida
I collegamenti portano alle pagine dei prodotti indicati. Il prezzo Amazon, quando disponibile, proviene dall’API ufficiale ed è aggiornato con data e ora; prezzo e disponibilità finali sono quelli della pagina Amazon.