Kolega na razie cały czas walczy z ponownym przywróceniem serwera Home Assistant Operating System (HAOS) do działania, ale coraz śmielej przebąkuje, że chyba pora mnie posłuchać, i przejść na Dockera, czyli Home Assistant Container. Zwłaszcza że zapowiedziałem mu wsparcie w tym procesie. A skoro tak, to pomyślałem, że może warto zrobić z tego artykuł. Tak więc dziś na tapet leci Home Assistant, ESPHome i bonusem tunel od Cloudflare (opcjonalnie), w wersji kontenerowej (Docker).

Home Assistant, ESPHome i tunel od Cloudflare w kontenerach Dockera

A dokładnie to nawet nie tyle „goły Docker”, co Docker Compose, bo nie tylko wygodniej wg mnie, to jeszcze ew. migracja na nową maszynę, czy choćby przywracanie z kopii zapasowej jest wygodniejsze. Choć może to tylko wrażenie, bo Dockera tak na poziomie choćby średnio zaawansowanym, to cały czas jeszcze mam raczej tylko w planach…

I choć na potrzeby tego artykułu bazuję na Raspberry Pi z systemem Raspberry Pi OS, bazującym na 64-bitowym Debianie (x64), to zasadniczo zawartość plików konfiguracyjnych dla Docker Compose jest uniwersalna. Mogę ewentualnie wystąpić różnice w ścieżkach, ale to nic trudnego do zmodyfikowania, by dopasować do używanego systemu.

Instalacja Docker i Docker Compose

Oczywiście zacząć trzeba od instalacji Dockera, ale tutaj wyjątkowo nie będę podawał konkretnych poleceń, nawet dla konkretnego systemu, a odeślę do dokumentacji, gdzie jest to chyba wystarczająco przystępnie opisane. W każdym razie na koniec instalujemy cały zestaw, czyli dla Debiana będzie to np.:

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Gdy już Docker zainstalowany, pora przygotować odpowiednie pliki, do uruchomienia Home Assistant, ESPHome i tunelu od Cloudflare (opcjonalnie). A konfigurację kontenerów będziemy zapisywać w plikach „compose.yml”, które należy zapisać… Tutaj jest dość duża dowolność, ale ja proponuję dla Home Assistant umieścić w katalogu:

/opt/docker/homeassistant

Plik dla ESPHome w katalogu:

/opt/docker/esphome

A plik dla Cloudflare (opcjonalnie) w katalogu:

/opt/docker/cloudflared

Natomiast jak już napisałem – tutaj panuje dość spora dowolność, więc mogą to być inne katalogi.

I tak dochodzimy do zawartości poszczególnych plików „compose.yml”, a więc dla Home Assistant będzie to:

version: '3'
services:
  homeassistant:
    container_name: homeassistant
    image: "ghcr.io/home-assistant/home-assistant:stable"
    volumes:
      - /opt/docker/homeassistant/config:/config
      - /etc/localtime:/etc/localtime:ro
      # Bluetooth:
      - /run/dbus:/run/dbus:ro
    restart: unless-stopped
    privileged: true
    network_mode: host

Jest to wersja dość standardowa, ale z małym dodatkiem w postaci wsparcia wbudowanego w Raspberry Pi Bluetootha.

Dla ESPHome plik „compose.yml” może wyglądać tak:

version: '3'
services:
  esphome:
    container_name: esphome
    image: esphome/esphome
    volumes:
      - /opt/docker/esphome/config:/config
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped
    privileged: true
    network_mode: host

A dla Cloudflare – jeśli korzystamy – tak:

version: "3"
services: 
  cloudflared: 
    image: cloudflare/cloudflared 
    container_name: cloudflare-tunnel 
    restart: unless-stopped 
    network_mode: host
    command: tunnel run 
    environment: 
      - TUNNEL_TOKEN=[TOKEN]

Tutaj w miejsce „[TOKEN]” należy wstawić token uzyskany podczas konfigurowania tunelu w Cloudflare. Więcej o tym niebawem…

Następnie z poziomu konsoli (np. SSH) wchodzimy do każdego katalog, np. za pomocą polecenia:

cd /opt/docker/homeassistant

i uruchamiamy usługę, za pomocą polecenia:

sudo docker compose up -d

W tym momencie nastąpi cała „magia”, czyli pobranie odpowiednich obrazów, oraz ich uruchomienie, wedle zdefiniowanej wcześniej konfiguracji.

Aktualizacja kontenerów

Na deser jeszcze jak takie środowisko aktualizować. Najlepiej za pomocą skryptu, który wchodzi do kolejnych katalogów i uruchamia odpowiednie komendy. Np.:

cd /opt/docker/homeassistant/
sudo docker compose down
sudo docker compose pull
sudo docker compose up -d

I właściwie to tyle, przynajmniej jeśli chodzi o podstawową pracę z Dockerem (Docker Compose), nie tylko w kontekście Home Assistant, ESPHome i Cloudflare, bo nie licząc zawartości pliku „compose.yml”, która, chociaż w każdym przypadku dość podobna, to jednak jest specyficzna dla danego oprogramowania, resztą będzie identyczna…

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej