community italiana di domotica personale
 
Come migrare Home Assistant Core da ambiente venv a Docker su Raspberry Pi

Come migrare Home Assistant Core da ambiente venv a Docker su Raspberry Pi

6 minuti di lettura
SCOPI DELLA GUIDA:
  • Migrare l’installazione del proprio HUB domotico Home Assistant Core da ambiente venv di Raspberry Pi OS (o genericamente, Linux) a un ambiente Docker
  • Livello di difficoltà: medio
CONCETTI AFFRONTATI:
  • Installazione e configurazione software
COMPONENTI SOFTWARE UTILIZZATE:
  • Sistema operativo Raspberry Pi OS (aka Raspbian) o analoghe distribuzioni Linux
PREREQUISITI:
DISPOSITIVI FISICI UTILIZZATI:
GUIDA DEDICATA A SISTEMI:

Raspbian - Linux

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: 1.0

Home Assistant Core da venv a Docker

Abstract

Tra le tante metodologie di installazione di Home Assistant su Raspberry Pi, una delle spesso più adottate (e da noi stessi a lungo caldeggiate) è quella di Home Assistant Core su ambiente Python Virtual Environment, o “venv”. 

In questa modalità, Home Assistant Core (quindi la sola componente principale dell’HUB, senza fronzoli) viene installato come un comune applicativo Python presso il proprio ambiente venv di Raspberry Pi OS. Questo garantisce certamente un livello di prestazioni elevate, ma introduce anche tutta una serie di complessità da gestire manualmente, nel tempo, come per esempio l’aggiornamento dell’ambiente Python (che ciclicamente viene innalzato), la gestione a volte noiosa di determinate dipendenze e strati software a corollario e altro.

Solitamente chi sceglie Core difficilmente passa a HASSOS: al di là delle prestazioni nettamente a favore del primo, poter utilizzare il proprio Raspberry Pi per altre funzioni al di là della gestione domotica è per molti (giustamente) un must, cosa che invece HASSOS non consente, o consente in modo comunque limitato (specie dal punto di vista prestazionale).

Come fare quindi per sbarazzarsi delle noie indirettamente provocate dalla gestione Core su venv? Semplice: migrarlo su Docker.

Docker LogoPer chi non lo sapesse, Docker è un ambiente di virtualizzazione che consente l’istanziamento di applicazioni (come per esempio quelle scaricabili dal suo HUB ufficiale) in modo che vengano eseguite “in una bolla”, ovvero isolate dal resto del sistema operativo, in modo del tutto autonomo. Questo isolamento garantisce un livello di gestione realmente eccezionale: tutto quanto serve all’applicazione vive all’interno della bolla detto “container”; quando l’applicazione viene aggiornata dagli sviluppatori, non è necessario far altro che “far scoppiare la bolla” e ricrearla. Facilissimo.

Ovviamente, eventuali contenuti dinamici legati all’app (pensiamo per esempio al registro storico di Home Assistant) vengono salvati fuori dalla bolla del container Docker dell’applicazione: cancellando e ricreando il container, lui ritroverà quei contenuti e, malgrado l’applicazione magari sia variata perché sia stata aggiornata, essa potrà comunque continuare a lavorare come in precedenza, ripartendo da “dove si era rimasti”. Questo ovviamente a grandi linee.

Scopo di questa guida è illustrare una tecnica per migrare la propria installazione di Home Assistant dal “vecchio” ambiente venv al “nuovo” approccio Docker, pur mantenendo configurazione, storico e funzionalità.

N.b. La procedura descritta è reversibile in qualunque momento, come spiegato alla fine.

Si parte

Analisi

Prima di spostare alcunché è necessario capire cosa ci sia da salvare, cosa da buttare a mare, cosa da modificare della propria configurazione Home Assistant.

Tipicamente ciò che serve salvare (difatti oggetto di backup) è la cartella contenente di file YAML di configurazione di Home Assistant, nonché tutte le sottocartelle, come per esempio custom_components/ per i componenti aggiuntivi esterni e .storage/, la cartella nascosta contenente molti file importanti relativi allo status del proprio HUB, e altro. Tale cartella solitamente è /home/homeassistant/.homeassistant/.

Se il proprio HUB è raggiungibile (anche dall’esterno) tramite protocollo sicuro SSL (quindi usando indirizzo https), allora si è provveduto a generare dei certificati; se per questo si è utilizzato lo script dehydrated (come da nostra guida), solitamente tali certificati sono salvati in una cartella diversa da /home/homeassistant/.homeassistant/: seguendo la nostra guida, tale cartella solitamente è /home/homeassistant/dehydrated/.

Usare dehydrated per la gestione certificati non è certo vietato, ma usando Docker è sconsigliabile per una serie di motivi che non stiamo qui a illustrare per non allungarci troppo: l’approccio migliore è quello di accantonare temporaneamente i certificati, migrare a Docker, attivare Caddy (sempre su Docker) per la gestione dei certificati, riattivarli. E così faremo.

N.b. Si assume quindi che Home Assistant sia già consultabile da remoto tramite opportuna configurazione di port routing sul proprio modem/router e proprio FQDN (eg. casamia.duckdns.org).

Procedura

Ecco quindi cosa faremo:

  • disattivare temporaneamente l’uso dei certificati SSL e riavviare Home Assistant e accedere senza SSL, per verificare che sia tutto funzionante;
  • fermare Home Assistant e fermarne l’avvio automatico in ambito venv;
  • installare Docker;
  • istanziare Home Assistant Core su Docker;
  • istanziare Caddy per la gestione certificati e del reverse proxy;
  • riattivare i certificati e riavviare Home Assistant.

Disattivazione certificati SSL

Primo passo, disattiviamo i “vecchi” certificati.
Da terminale via SSH, eseguire il seguente comando:

cd /home/homeassistant/.homeassistant/
sudo nano configuration.yaml

identificare le righe:

http:

  ssl_certificate: /home/homeassistant/dehydrated/certs/casamia.duckdns.org/fullchain.pem

  ssl_key: /home/homeassistant/dehydrated/certs/casamia.duckdns.org/privkey.pem


e davanti alla seconda e alla terza aggiungere il carattere “#” per disabilitarle.
Uscire salvando (ctrl+x, y, invio).


A questo punto collegarsi all’interfaccia di Home Assistant e recarsi alla voce di menu “Impostazioni” > “Generale” e cancellare le impostazioni “URL esterno” e “URL interno” (appuntarsi da parte la vecchia configurazione) e poi salvare.

Infine recarsi alla voce di menu “Impostazioni” > “Controlli del Server” e cliccare su “RIAVVIARE“. Così facendo Home Assistant ripartirà senza l’uso dei certificati; chiudere la finestra e al termine del riavvio collegarsi tramite browser a:

http://IP_DEL_RASPBERRY:8123

ci si troverà nuovamente sul proprio Home Assistant.

Fermare Home Assistant

A questo punto fermiamo la nostra istanza di Home Assistant:

sudo systemctl stop home-assistant
sudo systemctl disable home-assistant
sudo reboot

al termine del riavvio, Home Assistant non dovrebbe più tornare in esecuzione.

Installare Docker

Installare Docker su Raspberry Pi dotato di sistema operativo Raspberry Pi OS è piuttosto rapido e semplice: esiste infatti sia una procedura completamente automatica oppure una manuale. Entrambe le procedure sono illustrate in dettaglio in questa breve guida.

Se si dispone già di Docker, va da sé che questo passaggio possa essere saltato.

Istanziare Home Assistant Core su Docker

Per istanziare Home Assistant Core su Docker possono esserci due strade: o l’esecuzione di un comando Docker, oppure l’utilizzo del pratico tool Docker Compose. Noi suggeriamo caldamente quest’ultimo.

Se si userà Docker Compose, prima di passare oltre creiamo la cartella che ci serve per contenere i file di configurazione di questo tool (a meno che non lo si usi già):

mkdir -p /home/pi/home-assistant
nano /home/pi/home-assistant/docker-compose.yaml

dentro scrivere:

services:

E poi uscire salvando (ctrl+x, y, invio).


Per istanziare Home Assistant, seguite lo specifico paragrafo di questa guida: quando verrà indicato di “aggiungere al proprio file docker-compose.yaml la seguente configurazione […]”, eseguire nuovamente 

nano /home/pi/home-assistant/docker-compose.yaml

e aggiungere sotto services: il blocco relativo a Home Assistant, come indicato nella guida, per esempio:

services:
  home-assistant:
    container_name: home-assistant
    image: homeassistant/raspberrypi4-homeassistant:stable
    volumes:
    - /home/homeassistant/.homeassistant:/config
    environment:
    - TZ=Europe/Rome
    network_mode: host
    restart: always

Ovviamente, il nome dell’immagine (campo image:) dovrà essere configurato coerentemente col proprio sistema hardware, come spiegato nella guida linkata sopra.

Al termine della configurazione e dopo aver eseguito il comando di istanziamento (docker-compose up -d home-assistant), Home Assistant tornerà in esecuzione, e sarà nuovamente possibile collegarvisi, sempre col temporaneo:

http://IP_DEL_RASPBERRY:8123

verificare quindi che funzioni tutto.

N.b. Si noti come nella configurazione d’esempio di cui sopra sia indicata, nei volumes:, la cartella contenente la configurazione di Home Assistant, dando per assunto che sia /home/homeassistant/.homeassistant/. Diversamente, correggere la configurazione coerentemente. 

Istanziare Caddy per la gestione certificati

Questa è la parte più complicata. In realtà non è niente di drammatico, ma è necessario leggere con attenzione la guida che linkeremo a seguire.

In sostanza, si istanzia un altro container, un’altra bolla, nella quale eseguire “Caddy“, un’applicazione ottimale per la gestione reverse proxy e richiesta certificati. Quest’app provvederà quindi a ottenere automaticamente i certificati SSL e, inoltre, provvederà a girare le richieste per il proprio FQDN (eg. casamia.duckdns.org) verso Home Assistant.

La guida da leggere e attuare per intero è questa.

Se tutto andrà bene, al termine dell’attuazione della guida sarà nuovamente possibile collegarsi al proprio Home Assistant:

http://IP_DEL_RASPBERRY:8123

oppure tramite FQDN ma ancora senza certificati SSL:

http://casamia.duckdns.org:8123

Ripristino certificati

A questo punto rimuovere i caratteri di commento impostati precedentemente nella configurazione di Home Assistant, reimpostare i campi “URL esterno” e “URL interno” presso “Impostazioni” > “Generale” (impostando rispettivamente https://casamia.duckdns.org:8123 e http://IP_DEL_RASPBERRY:8123, ovviamente personalizzando “casamia“) e infine  riavviarlo tramite voce di menu “Impostazioni” > “Controlli del Server” e cliccare su “RIAVVIARE“.

Se tutto andrà bene, al termine dell’attuazione della guida sarà nuovamente possibile collegarsi al proprio Home Assistant, stavolta utilizzando certificati SSL e il proprio FQDN, per esempio:

https://casamia.duckdns.org:8123

E tutto sarà completo.

In caso di problemi

…si può sempre tornare indietro, coi comandi:

docker container rm home-assistant -f
docker container rm caddy -f
sudo systemctl enable home-assistant
sudo systemctl start home-assistant

Questo fa sì che gli eventuali container creati (home-assistant e caddy) vengano rimossi e venga riavviato e riattivato il “vecchio” servizio Home Assistant. Per tornare totalmente in esercizio, ricordarsi anche di eliminare i caratteri di commento impostati precedentemente e reimpostare i campi “URL esterno” e “URL interno” presso “Impostazioni” > “Generale“.

Ciò detto: il nostro FORUM e la nostra CHAT sono sempre disponibili per chiarimenti da parte della community tutta, oltre ai commenti qui sotto.


Home Assistant Official Logo ATTENZIONE: ricorda che sul nostro community FORUM c'è una sezione ad hoc dedica a Home Assistant, per qualsiasi dubbio, domanda, informazione nel merito specifico di queste componenti.

   
Telegram News Channel