Closed gereons closed 5 months ago
Cool, das ist sehr nützlich! Ich erlaube mir ein paar (kleinkarierte) Anmerkungen, falls du das noch berücksichtigen magst:
https
, dann am besten für alles, also auch für InfluxDB. Andernfalls würde das Login-Passwort von InfluxDB unverschlüsselt übertragen. Zugriff über influxdb.solectrus.meinedomain.de
, im Collector dann INFLUX_PORT=443
traefik.http.services.app-solectrus.loadBalancer.server.port=3000
nicht gibt. Funktioniert das bei dir? Woher weiß Traefik, dass die App auf Port 3000
läuft?8086
. Dient es der Verschleierung, dass du 8186
genommen hast? Das wäre bei https
nicht mehr nötig.8080
von Traefik (das Admin-UI) wird meiner Ansicht nach nicht benötigt. Dann könnte auch das api.insecure=true
wegapp
-Service wäre noch APP_HOST=solectrus.mydomain.de
sinnvoll, dann erfolgt ein Redirect, falls man die IP verwendet. Und FORCE_SSL=true
traefik:v2.11
In den Konfigurator nehme ich das gerne mit auf.
Wenns schon https, dann am besten für alles, also auch für InfluxDB.
Das ist berücksichtigt, nur nicht über einen separaten Host sondern über den Port 8186. Unverschlüsselte Verbindung zur InfluxDB gibt's nur lokal (und da auf Port 8086), und wenn jemand diesen Traffic mitlesen kann dann hätte er auch Zugriff auf .env, und dann ist's auch egal...
Funktioniert das bei dir? Woher weiß Traefik, dass die App auf Port 3000 läuft?
Ja, diese Konfig ist praktisch 1:1 mein Live-Setup. Wenn ich das richtig verstanden habe kriegt traefik über die Docker-API raus welche Ports der Container offen hat und routet dahin weiter. Analog kriegt er in der influxdb auch hin, dass https via 8186 intern auf Port 8086 landet.
Der Standardport von InfluxDB ist 8086. Dient es der Verschleierung, dass du 8186 genommen hast?
Nein, siehe oben. Ich wollte 8086 für den lokalen unverschlüsselten Traffic belassen um da auch nichts an der Konfiguration ändern zu müssen und den 2. DNS-Record und das 2. Zertifikat zu sparen. Da man aber m.W. nicht gleichzeitig lokal 8086 für InfluxDB und "von aussen" 8086 via traefik/https offen haben kann hab ich einfach 8186 genommen - die Config des senec-collectors muss ja eh angepasst werden, und das ist dann auch die einzige die mit diesem Port redet. An die Admin-Oberfläche kommt man dann via Browser mit https://solectrus.mydomain.de:8186
.
Port 8080 von Traefik (das Admin-UI) wird meiner Ansicht nach nicht benötigt.
Stimmt, die kann noch raus, ich hab sie bei mir offen gelassen damit ich da notfalls via ssh-Tunnel hinkomme.
Domain-Namen und E-Mail-Adressen würde ich alle kleinschreiben
Kann ich gerne machen, ich hab sie extra "komisch" geschrieben damit eher auffällt dass es nur Platzhalter sind.
Im app-Service wäre noch APP_HOST=solectrus.mydomain.de sinnvoll, dann erfolgt ein Redirect, falls man die IP verwendet.
Stimmt, dazu schreib ich noch einen Satz.
Und FORCE_SSL=true
Um den https-Redirect kümmert sich traefik auch ohne dieses Flag, ich hab's daher bei mir nicht angemacht.
Die entsprechenden Änderungen commite ich später.
Ich habe das jetzt mal "durchgespielt" - funktioniert fast, nur ein kleiner Show-Stopper:
services.app
und services.influxdb
müssen die ports
-Angaben weg. Sonst kollidiert das mit Traefik (Port 80) bzw. InfluxDB ist weiterhin auch unverschlüsselt erreichbar (über 8086, zumindest per curl).Ansonsten noch zwei Kleinigkeiten:
services.traefik
besser container_name
weglassen, damit das Namensschema zu den anderen Containern passt.docker-compose.yml
-Ausschnitte stimmt nicht ganz, das führt zu Irritationen.Bezüglich Port-Detection: Du hast recht, Traefik erkennt den Port automatisch, wenn der Container genau einen freigibt. Ich benutze Docker Swarm, da ist das nicht möglich und man muss immer den Port angeben (über die LoadBalancer-option).
Einsparen des zweiten DNS-Eintrags und des zweiten Zertifikats: Klar, total sinnvoll!
Bezüglich Port 8186: Ich denke, den braucht es eigentlich nicht. Mit folgender Config funktioniert es meinem Test zufolge auch über 8086 verschlüsselt:
command:
- "--entrypoints.influxdb.address=:8086"
ports:
- "8086:8086"
Wichtig ist natürlich, dass InfluxDB den Port 8086 nicht selbst nach außen freigibt, sonst kollidiert das natürlich.
Aber lass es gerne so, wir müssen das nicht endlos perfektionieren. Im Rahmen meiner Konfigurator-Arbeit mixe ich das sowieso nochmal ordentlich durch ;-)
Bei services.app und services.influxdb müssen die ports-Angaben weg.
Stimmt, services.app hat bei mir natürlich ports: "3000:3000"
damit die App nicht Port 80 belegt.
Was 8086 angeht: ich gehe natürlich davon aus dass der Server nicht so eingerichtet ist dass automatische sämtliche Ports offen im Netz stehen, sondern andersrum eine Firewall davor ist die genau die Liste der gewünschten Ports (22, 80, 443, 8186 bei mir) freigibt und alles andere blockt. Das ist auch ohne https ja wohl sinnvoll und dazu füge ich noch einen Satz ein.
Die Einrückung der docker-compose.yml-Ausschnitte stimmt nicht ganz,
Schau ich mir auch nachher nochmal an.
Stimmt, services.app hat bei mir natürlich ports: "3000:3000" damit die App nicht Port 80 belegt.
Das ist aber (wegen Traefik) gar nicht nötig, damit würdest du den Port 3000
nach außen durchreichen. Ok, das bleibt wegen der Firewall wirkungslos, ist aber nicht nötig. Einfach ganz weglassen. Die App lauscht per Dockerfile auf Port 3000
und ist von Traefik über das interne Docker-Netz sowieso erreichbar. Wenn Traefik vorgeschaltet ist, müssen die einzelnen Container gar nichts nach außen (also an den Docker-Host) öffnen.
Ja, eine Firewall ist natürlich sinnvoll. In meiner Anleitung thematisiere ich das bislang nicht, weil erklärungsintensiv, fehlerträchtig und (für SOLECTRUS) nicht zwingend erforderlich.
Habe es jetzt übernommen, herzlichen Dank für deine Mühe!
Ich habe vorige Tage mal mein SOLECTRUS-Setup mit https versehen und fand die Konfiguration alles andere als einfach (bin aber auch Docker- und traefik-Laie). Daher hab ich mal zusammengeschrieben was man da so alles machen muss, vielleicht hilft's ja dem einen oder anderen, und vielleicht kann man das irgendwann auch in das geplante Konfigurator mit aufnehmen.
Fixes #21