Come installare e configurare il broker MQTT “Mosquitto” su Docker (su Raspbian)

3 minuti di lettura
SCOPI DELLA GUIDA:
  • Installare e configurare il broker MQTT Eclipse Mosquitto come container Docker
  • Livello di difficoltà: basso
CONCETTI AFFRONTATI:
  • installazione e configurazione software
COMPONENTI SOFTWARE UTILIZZATE:
PREREQUISITI:
DISPOSITIVI FISICI UTILIZZATI:
GUIDA MAGGIORMENTE INDICATA PER:

Raspbian

Note e disclaimer
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata ed realizzata SOLO da personale qualificato;
  • qualsiasi modifica attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno puro scopo didattico);
  • qualsiasi modifica attuata in proprio a un dispositivo ne fa decadere garanzia, omologazioni e certificazioni di qualità.
Revisione guida: 2.0

Mosquitto + Docker

Abstract

Per qualsiasi implementazione per la propria domotica personale che preveda l’utilizzo del protocollo Message Queue Telemetry Transport (MQTT), è necessario che sulla rete sia disponibile un broker MQTT, ovvero un “instradatore” dei messaggi generati tramite questo protocollo. In questa guida affronteremo la procedura di installazione su Raspberry Pi di Eclipse Mosquitto, uno dei broker opensource più diffusi.

In questa guida, a differenza di quella tradizionale come applicativo server su Raspbian, utilizzeremo un approccio diverso ovvero quello di adottare un pratico container Docker, il che consente di isolare i processi del server, di essere facilmente aggiornato e molto altro. Solitamente questo approccio viene seguito da chi preferisce utilizzare questo tipo di astrazione piuttosto che la via più tradizionale. Un esempio? Chi usa Home Assistant Core installato come Docker container.

Si parte

Assunti

Per la realizzazione della presente guida si assume che:

  • Raspberry Pi sia dotato di sistema operativo Raspbian (vedi guida);
  • Sul sistema operativo Raspbian sia stato precedentemente installato Docker (vedi guida).

Prima configurazione

Come prima cosa creeremo, sul file system del sistema operativo di Raspberry Pi, un percorso nel quale salvare la configurazione del server Mosquitto, i suoi log, il database delle retain (e altro) e il file degli utenti e relative password.

Colleghiamoci via SSH a Raspberry Pi utilizzando l’utenza “pi” e creiamo tale percorso:

sudo mkdir /srv/mosquitto/config /srv/mosquitto/data /srv/mosquitto/log -p

Creato il percorso, creiamo un primo file di configurazione:

sudo nano /srv/mosquitto/config/mosquitto.conf

Nell’editor che apparirà inseriamo la seguente configurazione:

pid_file /var/run/mosquitto.pid

persistence true
persistence_location /mosquitto/data/

log_dest file /mosquitto/log/mosquitto.log
log_dest stdout

Dopodiché usciamo salvando (CTRL+X, y, invio).

Installare Docker

Installare Docker su Raspberry Pi dotato di sistema operativo Raspbian è piuttosto semplice, esiste una procedura completamente automatica e una manuale. Entrambe le procedure sono illustrate in dettaglio in questa breve guida.

Se si ha già provveduto all’installazione di Docker, va da sé che questo passaggio possa essere saltato.

Istanziare Mosquitto su Docker

Una volta installato Docker è dunque il momento di installare (o meglio, “istanziarvi sopra”) Eclipse Mosquitto, il nostro broker MQTT.

In ambito Docker, l’istanziamento dell’applicazione può essere effettuato tramite esecuzione di un comando manuale (più immediato) oppure tramite una configurazione del tool di gestione Docker Compose, approccio inizialmente più ostico ma che consigliamo per tutta una serie di motivi. Entrambe le scelte sono valide, ma in prospettiva (specie in ottica di aggiornamento) imparare ad usare Docker Compose è altamente consigliato.

ATTENZIONE: affinché i comandi a seguire funzionino, è necessario aver aggiunto Docker al gruppo sudoers, come spiegato in guida d’installazione Docker.

Tramite comando “docker run”

Istanziamo dunque Mosquitto su Docker tramite il comando:

docker run --init -d -it -p 1883:1883 --name mosquitto --restart unless-stopped -v /srv/mosquitto/config:/mosquitto/config -v /srv/mosquitto/log:/mosquitto/log -v /srv/mosquitto/data/:/mosquitto/data eclipse-mosquitto:1.6.13

Al termine dell’esecuzione, Mosquitto sarà in esecuzione come container Docker.

Tramite Docker Compose

Se astutamente si sceglie di utilizzare Docker Compose, allora è semplicemente necessario aggiungere al proprio file docker-compose.yaml la seguente configurazione (sotto il bocco services):

  mosquitto:
    container_name: mosquitto
    image: eclipse-mosquitto:1.6.13
    volumes:
    - "/srv/mosquitto/config:/mosquitto/config"
    - "/srv/mosquitto/log:/mosquitto/log"
    - "/srv/mosquitto/data/:/mosquitto/data"
    restart: unless-stopped
    ports:
    - "1883:1883" 

Una volta salvato il file docker-compose.yaml, eseguire il comando:

docker-compose up -d

il quale provvederà a istanziare il container.
Lanciato il comando, attendere il completamente del primo avvio. Per leggere in tempo reale i log e verificare quindi cosa stia succedendo all’interno del container, eseguire il comando:

docker container logs mosquitto -f

Utenze

Giunti a questo punto è necessario creare una o più utenze alle quali garantire accesso al broker. Al momento, infatti, l’accesso è libero e anonimo – e ovviamente la cosa non va bene.

Accediamo al container col comando:

docker exec -it mosquitto sh

A questo punto lanciare la creazione del file delle utenze/password:

mosquitto_passwd -c /mosquitto/config/mosquitto.passwd NOME_UTENTE

verrà dunque chiesta, due volte, la password per l’utente indicato (nell’esempio NOME_UTENTE).
Al termine, uscire con:

exit

Sarà stato così definito un primo utente/password, il quale potrà essere successivamente utilizzato per configurare i propri client MQTT sulla propria rete.

Seconda configurazione

Ora dobbiamo indicare a Mosquitto di utilizzare l’elenco username/password appena creato. Per farlo andiamo a modificare il file definito all’inizio col comando:

sudo nano /srv/mosquitto/config/mosquitto.conf

al quale andremo ad aggiungere, in coda, la seguente configurazione:

password_file /mosquitto/config/mosquitto.passwd
allow_anonymous false

Uscire salvando (CTRL+X, y, invio).
Al termine, riavviare il container per rendere le modifiche operative:

docker container restart mosquitto

Configurazioni dispositivi e risoluzione problemi

Si consiglia la lettura attenta della guida dedicata alla configurazione dei componenti MQTT nella propria domotica.
Per risolvere problemi legati alle comunicazioni MQTT, si consiglia di leggere quest’altra guida.

   
Telegram News Channel