Vollständige Bereitstellung über Docker + Reverse Proxy

Hallo zusammen,

Da Gladys nun den Einsatz von Docker bevorzugt, arbeite ich an einem Projekt für den vereinfachten Einsatz mehrerer Container, um eine fertige Lösung ohne zu viele Bastelarbeiten für den durchschnittlichen Benutzer zu haben. Meine Idee ist es, einen über das Internet zugänglichen Gladys-Server über einen Reverse-Proxy mit allen zugehörigen Diensten bereitzustellen.

Meine Container wären:

  • Watchtower, der die automatische Aktualisierung aller Container ermöglicht, wenn ein Update auf Docker Hub verfügbar ist
  • Portainer, ein Container-Lifecycle-Manager, mit dem man z. B. auf die Container-Logs zugreifen oder Container löschen/neustarten kann
  • Traefik, der Reverse-Proxy, der Gladys und seine Begleiter über einen oder mehrere Ports auf dem Router des Benutzers freigibt, der es ermöglicht, ein SSL-Zertifikat kostenlos über Let’s Encrypt und einen kostenlosen Domainnamen über einen kostenlosen DNS-Anbieter namens DuckDNS (kostenlos, einfach und ermöglicht die Erstellung von bis zu 5 verschiedenen Domainnamen) zu generieren
  • Socket Proxy, ein kleiner Proxy, der die Anfragen an das Docker-Herz im Falle eines Angriffs auf Traefik sichert
  • Mosquitto, der MQTT-Broker, der die Nachrichtenübertragung über Sensoren oder Dienste ermöglicht
  • Zigbee2Mqtt und Zigbee2MqttAssistant (eine Weboberfläche), die es ermöglichen, auf ein teures Zigbee-Gateway zu verzichten und die mit vielen Geräten kompatibel sind (siehe das Thema im Forum)
  • Rhasspy, für den Spracherkennungs-Teil (sobald ich funktionierende Einstellungen habe)
  • Und natürlich Gladys

Man kann auch daran denken, je nach Bedarf weitere Anwendungen hinzuzufügen (z. B. ein Dashboard für die Metriken der verschiedenen Container über Grafana).

Für den Einsatz aller dieser Container und zur Vereinfachung des Einsatzes verwende ich die Docker-Erweiterung namens docker-compose. Diese Erweiterung ermöglicht es, mehrere Container in einer einzigen Datei (zur Vereinfachung) zu definieren und sie mit einem einfachen Befehlszeilenbefehl zu starten. In Bezug auf die Konfiguration gäbe es nicht so viele Dateien, die man ändern müsste, ich versuche, so viele Variablen wie möglich über die Datei namens « .env » zusammenzufassen, die die Hauptdatei begleitet, und es ist diese, mit der man einen großen Teil der Informationen personalisieren kann.

Ich habe dieses Projekt noch nicht auf Github veröffentlicht, ich habe noch einige Tests und Dokumentation zu erledigen und warte auf die Behebung einiger Traefik-Bugs, aber ich bin eher zuversichtlich. Heute ermöglicht mir dieses Projekt den Zugriff auf den über TLS gesicherten MQTT-Broker und ermöglicht es mir z. B., Owntracks extern und ohne lokale Sicherheit (man kann natürlich auch lokal sichern) sowie Gladys und das Monitoring des Reverse-Proxy über sein Dashboard zu verbinden. Derzeit benötige ich aufgrund eines Bugs der neuen Version von Traefik drei Ports, die auf dem Router freigegeben sind, aber in Zukunft werden nur noch zwei Ports verwendet, einer für die HTTP/S-Kommunikation und der andere für die TCP-Kommunikation (MQTT in diesem Fall).

Durch diesen Beitrag möchte ich herausfinden, ob euch dieses docker-compose-Einsatzprojekt interessiert und ob ihr eventuell Anmerkungen oder Verbesserungs-/Erweiterungsvorschläge für diesen Einsatz habt :wink:

Der Teil mit Traefik interessiert mich, hatte aber noch keine Zeit, mich ernsthaft damit zu beschäftigen.

Was Docker Compose angeht, bin ich kein Fan, aber das sind einfach nur meine Vorlieben :wink:

Gute Initiative

Hallo
Ich finde die Idee eigentlich gut, aber ich habe bereits meinen eigenen Domainnamen. Kann ich Traefik mit einem benutzerdefinierten Domainnamen verwenden?

@Will9 ja natürlich, Traefik unterstützt große Anbieter wie OVH oder myDNS (die einzigen, die ich kenne :P), du findest die Liste hier: DNS-Anbieter
Und Traefik ermöglicht es dir, SSL-Zertifikate über Let’s Encrypt zu generieren oder deine eigenen Zertifikate zu importieren, falls du bereits welche hast :wink:

Das ist eine gute Idee :wink:

Ich arbeite noch zu wenig mit Docker, aber wenn du Hilfe brauchst, kann ich mir ein Labor einrichten, um Tests durchzuführen und beizutragen :wink:

Ich kenne Traefik fast gar nicht, aber was sind die Vorteile im Vergleich zu HAProxy zum Beispiel?
Ich konnte es in einigen Projekten mit hohem Datenaufkommen einsetzen, die Konfiguration ist sehr einfach und kann mit Let’s Encrypt gekoppelt werden.

Ich gebe zu, dass ich mich mit Haproxy nicht so gut auskenne, aber ich habe Traefik im Job viel genutzt, daher basiert meine Lösung darauf, weil ich das Produkt langsam gut kenne. :wink:
Aber man sollte wissen, dass Traefik französisch ist :stuck_out_tongue:

Was mir an Traefik gefällt, ist, dass die Konfiguration nicht zu komplex und nicht statisch ist, denn im Fall von Docker wird jede Konfiguration über die Labels der Container definiert und kann daher relativ einfach geändert werden. Traefik hat mehrere andere Backends als Docker, wie Consul oder Kubernetes, was die Nutzung etwas erweitert.

In meinem Fall verwende ich es für meine gesamte Infrastruktur zu Hause, was mir ermöglicht, auf meine Apps auf einem Raspberry-Cluster, auf meinem NAS zuzugreifen und dabei ein Auge auf das Dashboard zu werfen. :slight_smile:

Hallo,

Nur zur Info, ich füge gerade die Erstellung und das Starten der Zigbee2mqtt- und MQTT-Container (falls sie nicht existieren) aus dem Zigbee2mqtt-Dienst hinzu.
Ich denke, diese Lösung vermeidet die Erstellung der Docker-Images und -Container der Dienste, wenn sie für den Benutzer nicht nützlich sind.
@pierre-gilles, könntest du uns sagen, welche Lösung du bevorzugst, damit wir keine Entwicklungszeit verschwenden. Danke

Für den Teil mit Traefik, das ist nett, aber das könnte vielleicht gegen die Gladys-Gateway gehen, oder? Oder liege ich falsch.

@Reno Ich habe dir hier geantwortet =>

Das ist nicht unbedingt dasselbe Publikum, und es sind nicht unbedingt dieselben Sicherheitsmaßnahmen.

Die Gladys-Gateway ist eine Komplettlösung, weil du keine Konfiguration bei deinem Internetanbieter vornehmen musst, und vor allem ist sie viel sicherer, weil deine Instanz nicht über das Internet zugänglich ist. Wenn du die IP deines Raspberry Pi im Internet freigibst, machst du dich den Bots zum Opfer, die zufällige IPs angreifen. Das ist schon vielen Leuten im Forum passiert ^^

Aber es gibt für jeden etwas, für einen Benutzer, der ein sicheres Plug & Play-System by design möchte, und für einen fortgeschrittenen Benutzer, der regelmäßig Zeit investiert, um sein System zu sichern und zu verwalten :slight_smile:

Das ist ja perfekt!
Da ist für jeden etwas dabei… :wink:

@Albenss ich habe es geschafft, Traefik 2 bei mir zu Hause zu implementieren, es ist großartig!

Nur ein Punkt, den ich nicht konfigurieren kann, weißt du, wie man eine Weiterleitung auf SSL nur für bestimmte Endpunkte macht?

Hallo @VonOx, tatsächlich komme ich jetzt weder ohne Traefik noch ohne Docker aus :wink:
Also, das hängt von deiner Konfiguration ab, ich persönlich verwende eine Datei, um die statische Konfiguration zu speichern, und eine andere für die dynamische.
Seit Version 2.2.0 hast du die Möglichkeit, im statischen Teil die Umleitung direkt in der Definition deines oder deiner Endpunkte zu definieren.
Ich bin immer noch bei 2.2.0, ich weiß nicht, wie es bei der neuen Version 2.2.1 ist, aber hier ist, wie es bei mir konfiguriert ist:

  #DATEI traefik.yml
    entryPoints:
      web:
        address: ":80"
        http:
          redirections:
            entryPoint:
              to: web_secure
              scheme: https
              permanent: true

      web_secure:
        address: ":443"
        http: 
          middlewares:
            - securisation@file  #In meiner dynamischen Datei -> Komprimierung + Header + maximale Anzahl der Anfragen
          tls:
            certResolver: letsencrypt
            domains:
              - main: "*.domain.com"
                sans:
                  - "domain.com"

Zögere nicht, wenn du andere Probleme hast :wink:

Das einzige echte Problem mit dieser Lösung ist, dass Traefik standardmäßig und derzeit nicht änderbar eine API unter /api hat, genau wie Gladys…

Wenn also Gladys und Traefik auf einem einzigen Domainnamen verwendet werden (z. B. mit einem kostenlosen DNS wie DuckDNS, das keine Möglichkeit bietet, Subdomains zu erstellen), muss man sich entscheiden, ob man auf diesem Domainnamen die API von Gladys oder die von Traefik, die den Zugriff auf ihr Monitoring-Dashboard ermöglicht, exponiert…

Zum Beispiel für meinen Gladys-Container hier meine Konfiguration, also ich höre nur auf SSL in Docker

Aber falls etwas schiefgeht, möchte ich eine Umleitung, also sehe ich nicht genau, was sich in deiner Konfiguration ändert

Mein Zertifikatsresolver ist auch Let’s Encrypt

Meine traefik.toml

[entryPoints]
  [entryPoints.http]
  address = ":80"
  [entryPoints.https]
  address = ":443"

[api]

[providers.docker]
  endpoint = "unix:///var/run/docker.sock"

[providers.file]
  filename = "/etc/traefik/services.toml"

[certificatesResolvers.vonox.acme]
  email = "adressmail@host.com"
  storage = "acme.json"
  [certificatesResolvers.vonox.acme.httpChallenge]
    entryPoint = "http"

Ich hatte deine zweite Antwort nicht gesehen, ich besitze eine Domain und habe daher Subdomains.

In deinem Fall @VonOx musst du in der Definition deines HTTP-Eintrittspunkts Folgendes hinzufügen:

[entryPoints]
  [entryPoints.http]
    address = ":80"
    [entryPoints.foo.http.redirections]
      [entryPoints.foo.http.redirections.entryPoint]
        to = "https"
        scheme = "https"
        permanent = true

  [entryPoints.https]
    address = ":443"

Damit werden alle Anfragen, die nicht unbedingt das Schema « https:// » besitzen, zu deinem als « https » bezeichneten Eintrittspunkt umgeleitet.

Ein guter Weg, um die verfügbaren Optionen in den Dateien zu finden, ist der Besuch des Referenzteils der Dokumentation: Redirecting... & Redirecting... :wink:

Hallo.
Ich arbeite an einem ähnlichen Projekt: Die Idee ist, auf der Freebox Delta eine VM für Netzwerk und Smart Home zu betreiben:

  • Nginx Proxy Manager: Reverse-Proxy wie Traefik, unterstützt Let’s Encrypt
  • Gladys: Smart Home
  • Bitwarden: Online-Passwortmanager
  • Wordpress: für einen zukünftigen Blog
  • Pi-hole: Werbeblocker + lokale DNS

Ich weiß noch nicht, ob das leistungstechnisch funktioniert. Bitwarden und Wordpress sind keine Priorität, aber ich möchte einen ausgewogenen Stromverbrauch und meine NAS nachts ausschalten können, um nicht unnötig zu verbrauchen, während ich diese beiden Dienste 24/7 laufen lasse.

Ich bin noch Anfänger in Docker, aber aktuell schaffe ich es, NPM + Bitwarden (genauer gesagt Vaultwarden) und Pi-hole zum Laufen zu bringen. Jetzt kommt Gladys :slight_smile:

Gibt es ein Beispiel für eine docker-compose-Datei, um Gladys + Watchtower + Zigbee2mqtt zu installieren?

Generell: Hat schon mal jemand diese Infrastruktur versucht?