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

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 e realizzata SOLO da personale qualificato;
  • qualsiasi modifica non prevista attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno infatti puro scopo didattico) e fa decadere garanzia, omologazioni e certificazioni di qualità; dei dispositivi interessati;
  • tutte le tecniche descritte si intendono applicate a software e firmware aggiornati alle ultime versioni disponibili;
  • gli articoli di inDomus sono totalmente indipendenti e non sponsorizzati. Se mai questo cambiasse, verrà segnalato chiaramente sulle pagine oggetto di sponsorizzazione;
  • questa pagina è materialmente scritta e manutenuta da più individui: non ci si aspetti né si pretenda un supporto personale. In caso di difficoltà, chiedere supporto alla community sul nostro forum o sulla nostra chat;
  • se hai bisogno di orientarti, c'è la mappa.
Revisione guida: 1.4

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 “Configurazione” > “Sistema” > “Rete” e nel box “URL di Home Assistant” cancellare le impostazioni “Internet” e “Rete locale” (appuntarsi da parte la vecchia configurazione) e poi salvare.

Infine recarsi alla voce di menu “Strumenti per gli sviluppatori” > “YAML” 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.

Vetrina - Offerte del giorno

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-assistant ~/docker-compose
nano ~/docker-compose/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 ~/docker-compose/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: ghcr.io/home-assistant/home-assistant:stable
    volumes:
    - ~/.homeassistant:/config
    - /run/dbus:/run/dbus:ro
    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. 

N.b. In caso il comando “docker compose” dovesse dare errore, verificare di non aver installata la versione applicativa di Docker Compose anzichè la versione plug-in alla quale il comando sopra fa riferimento. In tal caso, adeguare il comando da “docker compose” a “docker-compose” (col trattino in mezzo).

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 impostare i campi “Internet” e “Rete locale” presso “Configurazione” > “Sistema” > “Rete” (impostando rispettivamente https://casamia.duckdns.org:8123 e http://IP_DEL_RASPBERRY:8123, ovviamente personalizzando “casamia“) e infine  riavviarlo tramite voce di menu “Strumenti per sviluppatori” > “YAML” 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 “Internet” e “Rete locale” presso “Configurazione” > “Sistema” > “Rete“.

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

Disinstallazione vecchia istanza

Se si volesse rimuovere definitivamente la vecchia istanza di Home Assistant installato in ambito venv, i comandi sono:

sudo su -s /bin/bash homeassistant
cd /srv/homeassistant
python3 -m venv .
source bin/activate
pip3 uninstall homeassistant

⚠️ Se di Home Assistant ne sai poco ma sei interessato a capirne di più, ti suggeriamo di partire da qui.

Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Alcuni link sono taggati in qualità di affiliati Amazon e riceviamo un compenso dagli acquisti idonei, utile al sostenimento del sito, ma le nostre recensioni sono tutte indipendenti e non sponsorizzate. Se ti sei perso, a tua disposizione c'è la mappa.