solectrus / hosting

Step-by-stypes guides for installing and hosting Solectrus
9 stars 4 forks source link

add readme for traefik/letsencrypt configuration #43

Closed gereons closed 5 months ago

gereons commented 5 months ago

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

ledermann commented 5 months ago

Cool, das ist sehr nützlich! Ich erlaube mir ein paar (kleinkarierte) Anmerkungen, falls du das noch berücksichtigen magst:

In den Konfigurator nehme ich das gerne mit auf.

gereons commented 5 months ago

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.

ledermann commented 5 months ago

Ich habe das jetzt mal "durchgespielt" - funktioniert fast, nur ein kleiner Show-Stopper:

Ansonsten noch zwei Kleinigkeiten:

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 ;-)

gereons commented 5 months ago

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.

ledermann commented 5 months ago

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.

ledermann commented 5 months ago

Habe es jetzt übernommen, herzlichen Dank für deine Mühe!