Home Assistant: Docker Inbetriebnahme + SSL Internetzugriff
Neben der Installation auf einer eigenen Hardware ist die zweite empfohlene Installationsvariante fĂĽr Home Assistant die Verwendung von Docker, siehe auch: HAOS vs. Home Assistant Docker Installation. Um Home-Assistant in Docker zu starten, wird natĂĽrlich ein Docker-Setup vorausgesetzt, siehe: Docker. Wer Docker bereits eingerichtet hat, kann Home-Assistant mit folgendem Befehl starten:
Docker Basics
Docker ermöglicht es, Services oder Applikationen per Befehl in einem sogenannten Container zu starten.Ein Container ist eine vom Betriebssystem (OS) unabhängige isolierte Umgebung:
Beim ersten Start eines Containers, lädt Docker selbstständig alle notwendigen Quellen
aus dem Internet.
Docker kann unter Windows, macOS oder einer Linux-Distribution installiert werden,
siehe auch: Docker
docker run -d --name="home-assistant" \
-v ha:/config \
-v /etc/localtime:/etc/localtime:ro \
--net=host \
--restart=always \
homeassistant/home-assistant:stable
Das Netzwerk für Home-Assistant muss laut dem Hersteller auf „--net=host" gestellt werden, die verwendeten Ports können aber auch definiert werden: als Beispiel bei Verwendung eines Reverse-Proxys für den Zugriff aus dem Internet, siehe:  Zugriff aus dem Internet - SSL Let's Encrypt.
Erster Start: Initiale Konfiguration
Nach dem Start des Containers ist Home-Assistant standardmäßig mit der IP-Adresse des Host und dem Port 8123 im Browser erreichbar:
Wer Docker auf demselben Rechner ausführt, kann auch http://localhost:8123 für den Aufruf verwenden, siehe localhost aufrufen: IP Adresse „127.0.0.1“, „::1“ | was ist localhost?
Zugriff vom Internet: SSL Let´s Encrypt
Dank Let’s Encrypt kann Home Assistant sehr einfach mit einem SSL-Zertifikat versorgt und somit sicher im Internet betrieben werden. Als Voraussetzung dafĂĽr habe ich folgendes Setup im Einsatz: Traefik in Docker | mehrere Webserver inkl. Zertifikat SSL. Alternativ dazu kann Home Assistant auch mit Cloudflare veröffentlicht werden. Siehe dazu auch unser Praxis-, Schritt fĂĽr Schritt YouTube-Video.Â
FĂĽr den Betrieb mit dem Reverse-Proxy habe ich folgende Einstellungen in der Konfiguration getroffen:
configuration.yaml:
http:
server_port: 8123
use_x_forwarded_for: true
trusted_proxies:
- 127.0.0.1
- ::1
- 172.18.0.0/16
Ich verwende für die Web-Container, die über den Let’s Encrypt-Reverse-Proxy aus dem Internet erreichbar sind, das Netzwerk „webproxy“. Entsprechend habe ich für Home Assistant folgendes docker-compose-File erstellt:
docker-compose.yml
services:
hass:
image: homeassistant/home-assistant:stable
container_name: home-assistant
#Labels fĂĽr ReverseProxy, siehe: https://www.libe.net/traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.ha.rule=Host(`ha.domain.tld`)"
- "traefik.http.routers.ha.entrypoints=web"
- "traefik.http.routers.ha.entrypoints=websecure"
- "traefik.http.routers.ha.tls.certresolver=myresolver"
- "traefik.http.services.ha.loadbalancer.server.port=8123"
restart: always
volumes:
- ./haconfig:/config
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
expose:
- "8123"
#FĂĽr einen direkten Test-Zugriff, in den folgenden 2 Zeilen "#" entfernen. Aufruf: http://localhost:8123 oder http://ServerIP:8123
#ports:
#- "8123:8123"
#Ohne dem Einsatz eines Reverse Proxy (https://www.libe.net/traefik) fehlt voraussichtlich das Netzwerk webproxy
#und die folgenden Zeilen können entfernt oder auskommentiert werden. Alternativ kann das Netzwerk mit "docker network create webproxy" erstellt werden
networks:
default:
name: webproxy
external: true
Für einen direkten Zugriff über die IP-Adresse oder localhost - auch ohne Reverse Proxy, DNS oder öffentlicher IP - kann die auskommentierte Port-Einstellung für Testzwecke aktiviert werden, indem „#“ vor „ports:“ und „-"83:80"“ entfernt wird. Sollte der Reverse Proxy nicht eingesetzt werden, wird das Netzwerk webproxy nicht benötigt und der Bereich networks: .. kann entfernt werden. Für den Internetzugriff über den Traefik Reverse Proxy, muss in den Labels die Domäne mit den zuvor erstellten DNS-Einträgen ersetzt werden (im Beispiel: ha.domain.tld). Damit die relevanten Daten der Container einfacher übertragen oder gesichert werden können verwendet das Beispiel Bind-Mounts und keine Docker Volumes für das permanente Speichern der Daten. Siehe: Docker Daten speichern: Docker Volumes vs. Host-Ordner und Praxis: Backup Docker Container-Daten: Volumes / Bind Mounts.
Bash Zugriff
FĂĽr einen direkten Zugriff auf die Bash- Command line des Containers, kann folgender Befehl verwendet werden:
docker exec -it home-assistant /bin/bash
siehe auch:Â /docker
Der Aufruf kann Beispielweise fĂĽr das Zusammenstellen und Testen von "command_line" Sensoren verwendet werden.
ZigBee mit ZHA
FĂĽr die Verwendung eines ZigBee-USB-Dongle, wie den ConBee II reicht es beim Einsatz von ZHA den Stick ĂĽber "devices" einzubinden.
services:
hass:
image: homeassistant/home-assistant:stable
container_name: home-assistant
#Labels fĂĽr ReverseProxy, siehe: https://www.libe.net/traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.ha.rule=Host(`ha.domain.tld`)"
- "traefik.http.routers.ha.entrypoints=web"
- "traefik.http.routers.ha.entrypoints=websecure"
- "traefik.http.routers.ha.tls.certresolver=myresolver"
- "traefik.http.services.ha.loadbalancer.server.port=8123"
restart: always
volumes:
- ./haconfig:/config
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
expose:
- "8123"
devices:
- /dev/ttyACM0
#FĂĽr einen direkten Test-Zugriff, in den folgenden 2 Zeilen "#" entfernen. Aufruf: http://localhost:8123 oder http://ServerIP:8123
#ports:
#- "8123:8123"
#Ohne dem Einsatz eines Reverse Proxy (https://www.libe.net/traefik) fehlt voraussichtlich das Netzwerk webproxy
#und die folgenden Zeilen können entfernt oder auskommentiert werden. Alternativ kann das Netzwerk mit "docker network create webproxy" erstellt werden
networks:
default:
name: webproxy
external: true
Alternativ: deCONZ und Home-Assistant in einem docker-compose.yml-File
Damit der Conbee 2-Stick ĂĽber deCONZ angesprochen werden kann, habe ich das docker-compose-File wie folgt angepasst:
services:
hass:
image: homeassistant/home-assistant:stable
container_name: home-assistant
labels:
- "traefik.enable=true"
- "traefik.http.routers.ha.rule=Host(`ha.domain.tld`)"
- "traefik.http.routers.ha.entrypoints=web"
- "traefik.http.routers.ha.entrypoints=websecure"
- "traefik.http.routers.ha.tls.certresolver=myresolver"
- "traefik.http.services.ha.loadbalancer.server.port=8123"
restart: always
volumes:
- ./haconfig:/config
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
expose:
- "8123"
deconz:
image: marthoc/deconz
container_name: deconz
environment:
DECONZ_DEVICE: '/dev/ttyACM0'
DECONZ_VNC_MODE: '1'
DECONZ_VNC_PORT: '5900'
DECONZ_VNC_PASSWORD: 'password'
restart: always
volumes:
- ./deconz:/root/.local/share/dresden-elektronik/deCONZ
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
devices:
- /dev/ttyACM0
ports:
- 83:80
- 5983:5900
networks:
default:
name: webproxy
external: true
Nach ca. einem Jahr mit deCONZ bin ich auf Zigbee2MQTT umgestiegen, ein weiters Jahr später auf ZHA. Zigbee2MQTT bietet eine solide Alternative zu ZHA:
Alternativ: Zigbee2MQTT, MQTT und Home-Assistant in einem docker-compose.yml - File
Mein komplettes Setup, bestehend aus Home Assistant, MQTT und Zigbee2MQTT, einen laufenden Let's Encrypt Reverse Proxy vorausgesetzt, sah zwischenzeitlich wie folgt aus:
services:
hass:
image: homeassistant/home-assistant:stable
container_name: home-assistant
labels:
- "traefik.enable=true"
- "traefik.http.routers.ha.rule=Host(`ha.domain.tld`)"
- "traefik.http.routers.ha.entrypoints=web"
- "traefik.http.routers.ha.entrypoints=websecure"
- "traefik.http.routers.ha.tls.certresolver=myresolver"
- "traefik.http.services.ha.loadbalancer.server.port=8123"
restart: always
volumes:
- ./haconfig:/config
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
expose:
- "8123"
mosquitto:
image: eclipse-mosquitto
container_name: mqtt
restart: always
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log
ports:
- "1883:1883"
- "9001:9001"
zigbee2mqtt:
container_name: zigbee2mqtt
restart: always
image: koenkk/zigbee2mqtt
volumes:
- ./zigbee2mqtt-data:/app/data
- /run/udev:/run/udev:ro
ports:
- 83:8080
environment:
- TZ=Europe/Vienna
devices:
- /dev/ttyACM0
networks:
default:
name: webproxy
external: true
weitere Docker-Services: InfluxDB und Grafana
Um für meine Heizung Langzeitwerte zu speichern und diese besser visualisieren zu können, habe ich zudem für das Speichern der Daten eine InfluxDB und für das Auswerten Grafana im Einsatz. Die Anbindung der InfluxDB hier erfolgt über die Home-Assistant-Konfig-Datei configuration.yml
...
influxdb:
include:
entities:
- sensor.1...
- sensor.2...
host: influxdb
port: 8086
database: ha
username: ha
password: ???
max_retries: 3
Die Version 1 verwendet für die Verbindung einen Benutzernamen und ein Passwort, Version 2: Token, Organisation und Bucket.
Nachdem ich nicht alle Daten in Grafana auswerten möchte, habe ich mit „include“ nur bestimmte Sensoren hinterlegt. Das komplette Docker-Setup für Home-Assistant, InfluxDB und Grafana schaut bei mir aktuell so aus:
services:
hass:
image: homeassistant/home-assistant:stable
container_name: home-assistant
labels:
- "traefik.enable=true"
- "traefik.http.routers.ha.rule=Host(`ha.domain.tld`)"
- "traefik.http.routers.ha.entrypoints=web"
- "traefik.http.routers.ha.entrypoints=websecure"
- "traefik.http.routers.ha.tls.certresolver=myresolver"
- "traefik.http.services.ha.loadbalancer.server.port=8123"
restart: always
volumes:
- ./ha:/config
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
devices:
- /dev/ttyACM0
expose:
- "8123"
influxdb:
container_name: influxdb
restart: always
image: influxdb
volumes:
- ./influxdb:/var/lib/influxdb
- ./influxdb2:/var/lib/influxdb2
ports:
- 8086:8086
grafana:
container_name: grafana
restart: always
image: grafana/grafana
volumes:
- ./grafana:/var/lib/grafana
ports:
- 3000:3000
networks:
default:
name: webproxy
external: true
siehe dazu auch: InfluxDB: Time series database - Docker und Grafana: Docker - Daten visualisieren und Alarme definieren
Fazit
Der Betrieb von Home Assistant als Docker-Container ist zunächst aufwendiger und bedeutet den Verzicht auf den HA Add-on Store. Zu den wesentlichen Vorteilen dieser Installationsvariante zählt aber dessen Flexibilität und Einheitlichkeit. Wer als Beispiel einen Reverse-Proxy-Container verwendet, ermöglicht damit einen sicheren Zugriff vom Internet, auf beliebige Webservices des Heimnetzwerks innerhalb und ausserhalb der bereitgestellten Docker-Umgebung.
{{percentage}} % positiv
DANKE fĂĽr deine Bewertung!
Fragen / Kommentare
(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]
Ich bin jetzt mit meinem Galaxy 4 Sm-T535 verbunden möchte abereits mit meinem PC Asus P7P55DL-E die Schritte ausführen.Der wurde aber von Microsoft gesperrt,als ich in Windows 10 die Orginal dvd von Windows 7 nochmals installiert habe danach habe ich die falsche Nummer angegeben und jetzt kommt immer die Nachricht sie haben wahrscheinlich eine dvd Fälschung und mir wird der PC nicht freigeschaltet. Was kann ich tun um Docker auf meinem PC zu installieren