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.

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE fĂĽr deine Bewertung!

Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]

✍jwsch51
31.08.2023 03:08
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

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details