Bentrovati amici smart!
Nel video precedente, abbiamo dato uno sguardo alle schermate principali di Home Assistant. Prima di entrare nel dettaglio delle singole schermate, è importante conoscere alcuni comandi essenziali da eseguire da linea di comando. Questi comandi ci aiuteranno non solo a tenere aggiornato e in ordine il sistema operativo, ma anche a gestire i servizi principali che abbiamo installato o installeremo con Docker Compose, prendendo maggiore dimestichezza e controllo del nostro setup e rendendo, a sua volta, la gestione della nostra Smart Home più semplice ed efficiente.
Iniziamo
Per prima cosa, accediamo al terminale del Raspberry Pi tramite SSH, utilizzando qualsiasi dispositivo, come discusso nei video precedenti.
Pertanto, apriamo PuTTY se stiamo usando Windows, oppure apriamo il terminale se stiamo usando macOS o Linux.
Breve ripasso
Per chi utilizza PuTTY dovrà semplicemente compilare il campo "Host Name" inserendo homeassistant.local oppure l'indirizzo IP del Raspberry Pi. Infine, dovrà cliccare su Open per avviare la connessione.
Per chi utilizza il terminale del macOS o Linux, dovrà semplicemente digitare il seguente comando seguito dal tasto invio:
ssh pi@homeassistant.local
oppure, se conosciamo l'indirizzo IP del Raspberry Pi, digitiamo:
ssh pi@indirizzo_ip_del_raspberry
Dopo esserci collegati, partiamo con il primo punto:
Mantenere il Sistema Operativo aggiornato
Come abbiamo già affrontato in un video precedente, è importante mantenere aggiornato il sistema operativo nel tempo, perché questo può aiutarci a risolvere eventuali problematiche, migliorare la sicurezza del sistema e supportare nuove funzionalità e librerie. Un sistema aggiornato, infatti, rende la gestione della Smart Home, ma in generale del sistema operativo stesso, più stabile e pronta ad accogliere qualsiasi altra integrazione futura, che sia per la SmartHome o per altri progetti.
Per aggiornare Raspberry Pi OS è necessario procedere dal terminale eseguendo i seguenti comandi uno alla volta seguiti dal tasto invio.
sudo apt-get update
sudo apt-get upgrade -y
Nota:
Il primo comando scarica la lista dei pacchetti aggiornati disponibili, preparando il sistema a ricevere le ultime versioni.
Il secondo comando installa gli aggiornamenti per i pacchetti già presenti sul sistema, utilizzando la lista scaricata in precedenza e senza richiedere conferma, grazie al flag -y.
Una volta eseguiti, vedremo scorrere a video una serie di LOG. Questo processo potrebbe richiedere diversi minuti, attendiamo che finisca.
Al termine del processo, è sempre bene riavviare il sistema operativo per consentire al Raspberry Pi di finalizzare gli aggiornamenti. Quindi eseguiamo il seguente comando seguito dal tasto invio:
sudo reboot
Per chi se lo stesse chiedendo, la procedura di aggiornamento può essere resa automatica e schedulandola a qualsiasi ora, preferibilmente durante le ore notturne, quando il sistema è meno utilizzato.
Personalmente preferisco e vi consiglio di gestire gli aggiornamenti manualmente per avere il pieno controllo su quali aggiornamenti installare e quando. Questo approccio ci permette di valutare se un aggiornamento è necessario in un determinato momento oppure no, evitandoci di installare qualcosa che potrebbe comportare malfunzionamenti per motivi di incompatibilità con altri elementi del nostro setup.
Ricordiamo infatti che aggiornare un sistema non equivale sempre ad apportare migliorie. Alle volte potrebbero insorgere dei problemi, magari per via di un bug o semplicemente per dipendenze o librerie nuove non compatibili con determinati elementi del nostro setup, che potrebbero creare disservizi. Per questo motivo, preferisco essere consapevole di cosa e quando aggiorno.
Al momento, per non complicare troppo le cose, ci concentreremo solamente sull'esecuzione manuale degli aggiornamenti del sistema operativo. Questo vi permetterà di acquisire dimestichezza e consapevolezza dei comandi appena discussi, rendendovi, oltretutto, parte attiva nella gestione del sistema. Il motivo di questa scelta didattica, se cosi possiamo definirla, è per ricordarvi che è buona pratica aggiornare periodicamente il vostro setup. Pertanto, la manualità iniziale aiuterà a sviluppare sicuramente maggiori competenze. Più avanti vedremo come schedulare e automatizzare l'esecuzione di qualsiasi comando utilizzando uno strumento molto conosciuto e potente.
Come gestire e mantenere aggiornati i container
Detto questo passiamo ai principali comandi di Docker e DockerCompose che utilizzeremo con maggiore frequenza per gestire e mantenere i nostri container o micro servizi.
Vi ricordo che tutti i container, come accennato in un video precedente, li installeremo utilizzando il tool Docker Compose, incluso in Docker. Per chi si fosse perso la lezione 10, consiglio di recuperarla sul mio profilo Instagram o direttamente su dm-smartech.it.
Per chi è già allineato, invece, saprà che Docker Compose richiede la creazione di un file di configurazione appositamente strutturato, che consente di installare e gestire contemporaneamente molteplici container/micro servizi all'interno di un unico file.
In questo file, ogni container è identificato con un nome univoco rappresentato dal nodo principale. Sotto al nodo principale troviamo tutti i parametri di configurazione che servono a Docker Compose per installare, configurare e avviare quel determinato container. Ad esempio, nel nostro caso, il servizio di Home Assistant, l'unico attualmente presente nella nostra configurazione, è identificato con il nome home_assistant e al suo interno contiene tutti i suoi parametri di configurazione che servono a DockerCompose per inizializzarlo. home_assistant, quindi, è il nome univoco identificativo del servizio all'interno di Docker e che noi stessi utilizzeremo per identificare il servizio ed eseguire comandi specifici per quel container. Ovviamente lo stesso concetto vale per qualsiasi altro container che installeremo: ognuno avrà un nome univoco identificativo.
La formulazione di tale identificativo è a nostra discrezione, nel senso che possiamo essere noi stessi a definirlo, senza vincoli, all'interno del file di configurazione di DockerCompose. Quindi, ad esempio, anziché di usare home_assistant come nome identificativo, potremo usare home-assistant o utilizzare qualsiasi altro nome di vostra preferenza. Da quel momento il servizio Home Assistant verrà identificato e riconosciuto da DockerCompose con il nuovo nome assegnato
Il file di configurazione di cui parlo è docker-compose.yaml che, per chi ha seguito la configurazione da me esposta nei video precedenti, dovrebbe essere contenuto all'interno del seguente percorso:
/home/pi/homeassistant_hub/docker-config
Vi ricordo, quindi, prima di poter eseguire qualsiasi comando di Docker Compose è necessario spostarsi all'interno di questo percorso, utilizzando il comando cd da linea di comando. Precisamente, dobbiamo eseguire il seguente comando seguito dal tasto Invio:
cd /home/pi/homeassistant_hub/docker-config
così facendo saremo entrati all'interno della cartella docker-config. Per accertarcene, digitiamo il comando pwd seguito dal tasto invio. Il terminale dovrebbe confermarci che siamo nella cartella giusta.
/home/pi/homeassistant_hub/docker-config
In caso contrario sarà necessario rieseguire il comando cd e riprovare.
Dopo aver verificato di essere nel percorso corretto, ovvero quello contenente il file di configurazione YAML di Docker Compose, possiamo iniziare ad analizzare i comandi principali che ci servono per gestire i nostri container. Ricordo che tutti i comandi che vedremo d'ora in poi potranno essere eseguiti solo dopo essere entrati nel percorso appena citato.
Inizializzare i container
Il primo comando lo abbiamo già visto quando abbiamo installato il container di Home Assistant. Come si può intuire, il comando che sto per mostrarvi nuovamente serve a indicare a Docker Compose di scaricare (se non già presenti), creare e avviare tutti i container definiti nel file di configurazione docker-compose.yaml, eseguendoli in background. Ricapitolando, abbiamo un file di configurazione in cui definiamo tutti i container o micro servizi che vogliamo installare con Docker Compose. Una volta definito o modificato il file docker-compose.yaml, sarà sufficiente eseguire il seguente comando seguito dal tasto invio per consentire a Docker Compose di capire come procedere.
sudo docker compose up -d
In linea di massima, quando diremo a Docker Compose di analizzare il nostro file di configurazione mediante il comando appena visto:
- Se l'intero setup in configurazione è già avviato e installato, Docker Compose non farà nulla.
- Se vengono individuati nuovi micros ervizi configurati ma non installati, Docker Compose li installerà, scaricando le immagini necessarie, e li avvierà.
- Se trova container non avviati, Docker Compose li riavvierà.
Se invece vogliamo che il comando appena visto agisca solamente su un determinato micro servizio del nostro file di configurazione, possiamo eseguire lo stesso comando seguito dal nome univoco identificativo del container che abbiamo specificato nel file di configurazione stesso. Ad esempio, nel caso di Home Assistant il comando da eseguire sarà:
sudo docker compose up -d home_assistant
In questo modo il comando scaricherà, creerà, o avvierà solamente il container specificato (Home Assistant in questo caso), tralasciando tutti gli altri. Utile quando vogliamo solamente agire su un solo container.
Rimuovere i container
Al contrario, quando vogliamo rimuovere tutti i container presenti in configurazione da Docker, possiamo eseguire il seguente comando seguito dal tasto invio:
sudo docker compose down
Se invece vogliamo rimuovere tutti i container presenti in configurazione insieme a tutti i volumi e le immagini correlate, come se non fossero mai stati eseguiti e installati, possiamo farlo eseguendo il seguente comando seguito dal tasto invio:
sudo docker compose down --volumes --rmi all
Se invece vogliamo che il comando appena visto agisca solamente su un determinato micro servizio del nostro file di configurazione, possiamo eseguire lo stesso comando seguito dal nome univoco identificativo del container. Ad esempio, nel caso di Home Assistant possiamo eseguire il seguente comando seguito dal tasto invio:
sudo docker compose down home_assistant
oppure per rimuovere anche immagini e volumi possiamo eseguire il seguente comando seguito dal tasto invio:
sudo docker compose down home_assistant --volumes --rmi all
Nota:
In merito a immagini e volumi, cerchiamo di fare un po’ di chiarezza per capire cosa sono. Quando installiamo un container, questo viene creato a partire da un’immagine predefinita, scaricata in locale e inizializzata da Docker. Possiamo pensare alle immagini come a un pacchetto di installazione del micro servizio. Successivamente all'installazione, quando un container viene avviato, Docker crea dei volumi, che sono essenzialmente lo spazio di archiviazione usato dal container per i dati che genera e utilizza durante l’esecuzione. Ogni Container ovviamente avrà il suo volume dedicato.
Ricapitolando
Le immagini Docker contengono tutto il necessario per eseguire un'applicazione, inclusi il sistema operativo di base, le librerie e il codice dell'applicazione.
I volumi, invece, sono la memoria persistente del container, attiva una volta che il container è avviato e in funzione.
Conoscere l’esistenza e la differenza di questi dati è utile per stabilire, al momento della rimozione di un container, se vogliamo eliminare anche le immagini e i volumi associati. Questo ci permette di liberare spazio e mantenere il sistema più pulito e snello.
Detto questo possiamo proseguire.
Riavviare i container
Quando abbiamo la necessità di stoppare, avviare o riavviare tutti i container del file di configurazione, possiamo procedere con uno dei seguenti comandi:
sudo docker compose start
sudo docker compose stop
sudo docker compose restart
Se invece vogliamo agire su un determinato container, ad esempio Home Assistant, possiamo procedere con uno dei seguenti comandi:
sudo docker compose start home_assistant
sudo docker compose stop home_assistant
sudo docker compose restart home_assistant
I comandi appena visti dovrebbero essere molto esplicativi, start avvia, stop ferma e restart riavvia il o i container
Aggiornare i container
Quando invece vogliamo aggiornare tutti i container indicati nel nostro file di configurazione, basterà eseguire i seguenti comandi uno alla volta seguiti dal tasto invio:
sudo docker compose pull
sudo docker compose up -d
sudo docker image prune -f
In particolare, il primo comando scarica le immagini aggiornate dei container, se ci sono, il secondo comando li inizializza da zero con gli aggiornamenti scaricati, e il terzo comando esegue una pulizia rimuovendo tutte le immaginin non più utilizzate.
Se invece vogliamo aggiornare un solo container, e non tutti quelli presenti nel file di configurazione, possiamo eseguire gli stessi comandi, uno alla volta, seguiti dal nome del container che desideriamo aggiornare, ad esempio Home Assistant:
sudo docker compose pull home_assistant
sudo docker compose up -d home_assistant
sudo docker image prune -f
In breve, questo comando è utile per aggiornare i nostri microservizi all'ultima versione disponibile. Ad esempio, ogni volta che uscirà una nuova versione di home assistant, dovremo servirci di questi comandi per aggiornalo.
Verificare i log di un determinato container
Alle volte potrebbe capitare di dover monitorare i log di un container per verificare o debuggare eventuali malfunzionamenti o, semplicemente, l'operatività del container stesso. Per fare questo possiamo analizzare il log di uno specifico container, ad esempio Home Assistant, eseguendo il seguente comando seguito dal tasto invio:
sudo docker container logs home-assistant -f
Cosi facendo verrà visualizzato a video un aggiornamento in tempo reale dei LOG memorizzati dal micro servizio.
Per uscire dal LOG è sufficiente premere in sequenza e mantenere premuti CTRL + C
Entrare nel terminale dei container
Per ultimo, vi ricordo che i container sono ambienti isolati, simili a versioni ridotte di un sistema operativo. In molte circostanze, è utile poter accedere direttamente al terminale del container e lavorare al suo interno per impostare permessi, installare pacchetti o effettuare altre configurazioni. Nelle prossime tappe vedremo degli esempi concreti di quanto appena detto.
Per entrare dentro la shell di un container è sufficiente eseguire il seguente comando seguito dal tasto invio:
sudo docker exec -it nome_del_container sh
Per uscire dal terminale di un container e tornare al terminale del sistema principale, sarà sufficiente eseguire il seguente comando seguito dal tasto invio:
exit
oppure premere in sequenza e mantenere premuti CTRL + A + D
Bene per oggi è tutto, nei prossimi video inizieremo ad analizzare in dettaglio le singole schermate di HomeAssistant.
Come sempre se vi fa piacere seguitemi per altri tutorial, attivare la campanelina e lasciate un like al video.