docs: Installationsanleitung fuer vorhandenes Docker und externen Proxy
Die Anleitung setzt jetzt voraus, was ohnehin da ist: ein Server mit laufendem Docker und ein Reverse Proxy, der schon steht - auch auf einem anderen Rechner. Docker-Installation und Betriebssystemhaertung sind raus, dafuer ist der Proxy-Abschnitt der ausfuehrlichste geworden. Damit ein externer Proxy die Anwendung ueberhaupt erreicht, war eine Aenderung noetig: Die Bindeadresse stand fest auf 127.0.0.1. Jetzt gibt es APP_BIND, Standard bleibt die Loopback-Adresse. Der Weg dorthin ist nach Vorzug sortiert - privates Netz, dann WireGuard, dann als Notloesung oeffentliche Adresse mit Firewallregel. Zwischen Proxy und Anwendung laeuft unverschluesseltes HTTP; das gehoert nicht ins offene Netz. Deshalb steht in der Kontrolle eine Gegenprobe, die fehlschlagen MUSS: Antwortet der Anwendungsport von aussen, ist die Firewallregel falsch. Fertige Konfigurationen fuer Caddy, nginx und Traefik, jeweils mit den Werten, die sonst uebersehen werden: - Zeitgrenze 10 Minuten - sonst brechen Belegmappe, Rechnungslegung und Vollexport mitten im Erzeugen ab. Die Standardwerte von nginx liegen bei 60 Sekunden. - Antwort nicht puffern - der Vollexport kommt als Strom. Puffert der Proxy, wartet der Browser, bis alles im Speicher des Proxys liegt, und laeuft dabei in die Zeitgrenze. - Und der Hinweis, dass der Proxy KEINE eigene CSP setzen darf: Sie enthaelt eine Nonce, die pro Anfrage neu ist. Eine feste CSP blockiert die eigenen Skripte - die Seite laedt dann, laesst sich aber nicht bedienen. Der A-Record zeigt auf den Proxy-Server, nicht auf den Anwendungsserver. Stand vorher falsch da. Etappe: 8 Phase: Haertung
This commit is contained in:
+20
-7
@@ -4,10 +4,13 @@
|
||||
#
|
||||
# docker compose up -d --build
|
||||
#
|
||||
# Kein Reverse Proxy in dieser Datei: der ist auf dem Server bereits
|
||||
# vorhanden. Die Anwendung horcht nur auf 127.0.0.1:3000 - von aussen
|
||||
# erreichbar wird sie ausschliesslich ueber den vorhandenen Proxy, der
|
||||
# auch TLS beendet. Siehe README, Abschnitt "Reverse Proxy".
|
||||
# Kein Reverse Proxy in dieser Datei: der ist bereits vorhanden. Die
|
||||
# Anwendung beendet selbst kein TLS und horcht standardmaessig nur auf
|
||||
# 127.0.0.1:3000.
|
||||
#
|
||||
# Liegt der Proxy auf einem anderen Server, setze APP_BIND in der .env auf
|
||||
# die Adresse, ueber die er herankommt - siehe docs/INSTALLATION.md,
|
||||
# Schritt 7.
|
||||
#
|
||||
# Die Datenbank hat bewusst KEINE Portfreigabe. Sie ist nur ueber das
|
||||
# interne Docker-Netz erreichbar. Wer mit psql heran muss, geht ueber
|
||||
@@ -111,9 +114,19 @@ services:
|
||||
SMTP_FROM: ${SMTP_FROM:-}
|
||||
TZ: Europe/Berlin
|
||||
ports:
|
||||
# Nur Loopback. Der vorhandene Reverse Proxy auf dem Host reicht
|
||||
# von aussen hierher durch und beendet TLS.
|
||||
- '127.0.0.1:${APP_PORT:-3000}:3000'
|
||||
# Standard ist die Loopback-Adresse: dann erreicht die Anwendung nur
|
||||
# ein Proxy, der auf demselben Rechner laeuft.
|
||||
#
|
||||
# Liegt der Reverse Proxy auf einem ANDEREN Server, muss hier die
|
||||
# Adresse stehen, ueber die er herankommt - am besten die eines
|
||||
# privaten Netzes oder eines WireGuard-Tunnels:
|
||||
#
|
||||
# APP_BIND=10.0.0.5
|
||||
#
|
||||
# 0.0.0.0 nur setzen, wenn eine Firewall den Port ausschliesslich
|
||||
# fuer die IP des Proxy-Servers oeffnet. Die Anwendung beendet kein
|
||||
# TLS und gehoert nie unverschluesselt ins offene Netz.
|
||||
- '${APP_BIND:-127.0.0.1}:${APP_PORT:-3000}:3000'
|
||||
networks: [intern]
|
||||
healthcheck:
|
||||
test: ['CMD', 'node', '-e', "fetch('http://127.0.0.1:3000/api/gesundheit').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"]
|
||||
|
||||
Reference in New Issue
Block a user