Traefik als Reverse Proxy für Home Assistant und weitere Dienste

von 04.03.2023Smart Home9 Kommentare

Traefik kommt als Reverse Proxy auf meinem Heimserver, dem Beelink Mini S mit Proxmox VE, zum Einsatz, um Webservices im Internet sicher und ohne Portmapping zu publizieren. Traefik ist bestens dafür geeignet Docker Web Services zu verwalten. Dabei kann bereits im Rahmen eines Docker Compose Stacks alles nötige konfiguriert werden, damit Traefik die Publikation im Internet übernimmt. Traefik kümmert sich dabei auf Wunsch auch automatisiert um die Beantragung von kostenlosen Letsencrypt Verschlüsselungszertifikaten. Diese werden auch automatisch verlängert. Hiermit möchte ich Euch zeigen, wie einfach Traefik für das Bereitstellen von Services konfiguriert werden kann. Dabei läuft Home Assistant auf meinem Proxmox VE Server in einer eigenen VM als Supervised Home Assistant OS. Sonstige Open Source Services wie Paperless NGX, Trillium oder Calibre Web werden mit Portainer als Docker Images bereitgestellt. Diese laufen in einem Proxmox LXC Container. Alle diese Dienste können zentral von Traefik verwaltet werden.

Neben einem Server benötigt Ihr eine eigene Domäne, wie z.B. technikauswahl.de. Über den DNS Manager des Hosting Providers können beliebig viele Subdomains angelegt werden. Über einzelne Subdomains, wie z.B. service1.technikauswahl.de könnt Ihr Eure Webdienste aufrufen. Traefik erkennt über welche Subdomains Ihr Euch verbindet und steuert davon ausgehend das richtige Ziel im internen Netzwerk an. Dies hat den Vorteil, dass kein Network Address Translation (NAT) über Ports am Router konfiguriert werden muss. Die Standard Webports sind aus jedem Netzwerk aufrufbar und werden nicht geblockt, wie z.B. exotische Ports. Als weiteren Vorteil könnt Ihr Traefik mit Authentifizierungsmethoden wie z.B. Google OAuth 2.0 einrichten und damit Webdienste optimal sichern bzw. gleich eine automatische Anmeldung am Webdienst vornehmen. So lassen sich auch Webdienste absichern, die über keine eigene Authentifizierung verfügen.

So richtet Ihr Traefik grundlegend ein:

  1. Gehen wir davon aus, dass Ihr z.B. einen Proxmox VE LXC Container mit Docker, Docker Compose und Portainer installiert habt. Helper Skripte für die automatische Installation findet Ihr hier: https://tteck.github.io/Proxmox/ (Docker LXC auswählen).
  2. In Portainer ein neues Stack mit folgendem Inhalt erstellen aber noch nicht deployen: Traefik_Docker_Compose_with_OAuth.yml
  3. Im Docker Compose Stack im Teil für die OAuth Authentifizierung die Environment Variablen eintragen. Hierzu muss zunächst bei Google die Anwendung registriert werden, um Client ID und Client Secret zu erhalten. Hier eine Hilfestellung.
  4. Im Storage Verzeichnis folgende beiden YML-Dateien anlegen und an Eure Umgebung anpassen: traefik.yml und dynamic_conf.yml
  5. In der Datei dynamic_conf.yml wird die Anbindung an Home Assistant in der Virtuellen Maschine eingerichtet.
  6. Nun kann das Docker Compose Stack deployed werden. Prüft die Logs von Traefik in Portainer, ob es Fehlermeldungen gibt.
  7. Über Euren DNS Manager der Domain nun die benötigten Subdomains erstellen und auf Eure IP im Internet weiterleiten. Port 80 und 443 müsst Ihr in der Firewall für die IPv4 und ggf. IPv6 freigeben und an Euren Docker LXC Container weiterleiten. Bei mir ist noch IPv6 eingerichtet, da ich bald keine IPv4 Adresse mehr haben werde. Hierzu läuft im Docker LXC Container ein DDClient der Änderungen an der IPv6 Adresse überwacht und ggf. die IPv6 Adresse im DynDNS Dienst aktualisiert. Wichtig ist dabei, dass Euer Router IPv6 Prefix Änderungen des Providers per SLAAC – Stateless Address Autoconfiguration sofort an die Clients weiterreicht. DHCPv6 bringt hier nichts, da der Lease zu lange unverändert bleibt! Hier die Konfiguration für DDClient unter /etc/ddclient.conf. IPv4 wird bei mir über den Fritzbox DynDns Dienst aktuell gehalten.
  8. Für alle Docker Container, deren Web Dienste Ihr ebenfalls per Traefik im Internet bereitstellen wollt, müssen folgende Zeilen im Docker Compose Stack enthalten sein, da wir Traefik per Konfiguration nicht automatisch für alle Services aktiviert haben. Der Dienst wird immer von http auf https umgeleitet und die Google OAuth Authentifizierung wird aktiviert:
labels:
  - "traefik.enable=true"
  - "traefik.docker.network=traefik_proxy"
  # Http (Only redirect to HTTPS)
  - "traefik.http.routers.calibre-web.entrypoints=http"
  - "traefik.http.routers.calibre-web.rule=Host(`calibre.domain.de`)"
  - "traefik.http.middlewares.calibre-web-https-redirect.redirectscheme.scheme=https"
  - "traefik.http.routers.calibre-web.middlewares=calibre-web-https-redirect"
  # Https
  - "traefik.http.routers.calibre-web-secure.entrypoints=https"
  - "traefik.http.routers.calibre-web-secure.rule=Host(`calibre.domain.de`)"
  - "traefik.http.routers.calibre-web-secure.tls=true"
  - "traefik.http.routers.calibre-web-secure.tls.certresolver=letsencrypt"
  - "traefik.http.routers.calibre-web-secure.service=calibre-web"
  - "traefik.http.routers.calibre-web-secure.middlewares=secureHeaders@file"
  # Google OAUTH
  - "traefik.http.routers.calibre-web-secure.middlewares=oauth"
  # Service
  - "traefik.http.services.calibre-web.loadbalancer.server.port=8083"
  - "traefik.http.services.calibre-web.loadbalancer.server.scheme=http"

Wenn Ihr Euch einen günstigen und dennoch performanten Heimserver einrichten wollt, der mit 5 Watt im Idle sehr wenig Strom verbraucht empfehle ich Euch den Beelink Mini S bzw. S12, den Ihr hier sehr günstig kaufen könnt. Damit betreibt Ihr alle Eure Open Source Services mit Proxmox VE selbst.

9 Kommentare

  1. Danke für die super Anleitung. Mir ist leider Punkt 4 nicht klar?!
    Wo mache ich das?

    Antworten
    • Hallo Steffen, die Pfade zu den beiden Dateien unter Punkt 3 werden in der Docker Compose Datei für Traefik eingetragen. Siehe hierzu meine Brispieldatei unter Punkt 2. Ist es damit klar geworden?

      Antworten
      • Danke für die schnelle Antwort. Ja, der Bezug ist mir klar. Mir ist tatsächlich schlicht nicht klar, wo ich das in Portainer anlegen kann bzw. wie ich (falls das gemeint ist) Zugriff auf das Volume portainer-data bekomme.
        Danke vorab und viele Grüße

        Antworten
        • In Portainer funktioniert das nicht. Die Files musst Du direkt im LXC Container oder Linux OS anlegen, je nachdem wie Du Portainer installiert hast. Wenn Du Proxmox hast, kannst Du das über die Shell in der Proxmox Web Oberfläche machen. Ansonsten auch über ssh.

          Antworten
          • Okay, Danke. Portainer ist mir völlig neu.
            Allerdings bekomme ich beim Deploy ein
            failed to deploy a stack: Network traefik_traefik_internal Creating Network traefik_traefik_internal Created network traefik_proxy declared as external, but could not be found
            Hast du da eine Idee zu?

  2. Sorry, hat sich erledigt. Mittels
    docker network create traefik_proxy
    habe ich dann deployen können.
    Danke!

    Antworten
    • Stimmt, muss ich mal anpassen. Bei mir gab’s das Netzwerk ja bereits. Viel Spaß beim Einrichten!

      Antworten
  3. Hallo Florian,
    so weit läuft alles, Dank deiner super Anleitung.
    Eine Frage habe ich dennoch: Ich will über traefik auch andere Dienste auf Proxmox-VMs über Subdomains freigeben. Leider bekomme ich (auch bei HA) ein 404 (wobei bei HA immerhin korrekt das LE-Zertifikat da ist).
    Daher die Frage: Wenn ich Dienste jenseits von Containern über IPs im Netzwerk exposen möchte: Wo ist der richtige Ort dafür: Stack-Datei, dynamic oder traefik.yaml?
    Da blicke ich noch nicht durch.
    Danke und viele Grüße
    Steffen

    Antworten
    • Alle Dienste außerhalb von Docker musst Du in der dynamic_conf.yml eintragen. Analog dem Home Assistent Eintrag im letzten Abschnitt. Bei dem 404 Fehler gehe ich davon aus, dass irgendwo Deine Subdomain nicht korrekt eingetragen ist. Ansonsten noch alles neu starten. Habe den Eindruck, dass die dynamic_conf.yml nicht immer dynamic ist, sondern erst beim Neustart von Traefik zieht.

      Antworten

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Weitere relevante Beiträge:

ZigBee2MQTT per Home Assistant Add-on installieren

ZigBee2MQTT per Home Assistant Add-on installieren

Die Open Source ZigBee Bridge ZigBee2MQTT kann über ein bestehendes Home Assistant System sehr einfach eingebunden werden. Alles was dazu benötigt wird, ist ein kompatibler ZigBee Sender bzw. Empfänger. Die Konfiguration selbst ist sehr einfach und in wenigen Schritten erledigt.

Alarmanlage mit Home Assistant und ZigBee Sensoren konstruieren

Alarmanlage mit Home Assistant und ZigBee Sensoren konstruieren

Mit dem Open Source Hausautomatisierungssystem Home Assistant und günstigen Sensoren wie z.B. Magnetkontakten für Fenster und Türen sowie Infrarotbewegungsmeldern lässt sich eine sehr günstige und dennoch zuverlässige Alarmanlage konstruieren. Ergänzt werden kann das ganze ggf. noch mit einer IP Kamera, um noch Bilder oder Videoclips auf das Smart Phone geschickt zu bekommen, wenn Alarm ausgelöst wird.