Proxy-Netzwerk in die compose.yaml aufnehmen

Der app-Service haengt jetzt zusaetzlich im Netzwerk des Reverse Proxy, damit
dieser ihn erreicht. Das stand bisher nur in der lokalen Fassung auf dem
Server und musste nach jedem Pull von Hand nachgezogen werden.

Der Name ist ueber PROXY_NETWORK einstellbar und faellt auf nginx_default
zurueck, wie es Nginx Proxy Manager anlegt. Wer ohne Proxy in Docker
arbeitet, entfernt den Block - der Kommentar sagt, was dann noetig ist.

Dazu ein Hinweis auf eine unauffaellige Falle: Docker Compose deutet ein $ im
Wert als Variable und ersetzt es durch nichts. Ein Passwort mit $ kommt
dadurch gekuerzt an, ohne dass etwas fehlschlaegt.
This commit is contained in:
2026-09-18 16:17:25 +02:00
parent 7876e29b90
commit f19e596ee4
3 changed files with 39 additions and 0 deletions
+18
View File
@@ -72,6 +72,24 @@ Der App-Port wird bewusst **nicht** nach außen gemappt. Davor gehört ein Rever
(Nginx Proxy Manager, Traefik oder Caddy), der HTTPS terminiert und intern auf `app:3000`
weiterleitet. So ist nur Port 443 offen und die Zertifikate laufen über Let's Encrypt.
Damit der Proxy die App erreicht, hängt der `app`-Service zusätzlich im Netzwerk des Proxys.
Die `compose.yaml` erwartet es unter dem Namen `nginx_default` — so heißt es bei Nginx Proxy
Manager. Heißt es bei dir anders, setz `PROXY_NETWORK` in der `.env`:
```
PROXY_NETWORK=mein-proxy-netz
```
Das Netzwerk muss existieren, bevor der Stack startet; angelegt wird es vom Proxy. Betreibst du
gar keinen Proxy in Docker, entferne den `networks`-Block am Ende der `compose.yaml` samt der
`networks`-Liste beim `app`-Service und mappe stattdessen einen Port — dann aber bitte HTTPS
anderweitig davorsetzen.
> **Zu `$` in der `.env`:** Docker Compose deutet `$name` als Variable und ersetzt es durch
> nichts, wenn es die Variable nicht gibt. Ein Passwort mit `$` kommt dadurch gekürzt in der App
> an — ohne Fehler, nur mit einer leicht zu übersehenden Warnung. Entweder `$` vermeiden oder
> als `$$` schreiben.
Läuft die App hinter einem Proxy, muss `TRUST_PROXY=true` gesetzt bleiben — sonst landen im
Audit-Log die Proxy-IPs statt der echten. In Produktion werden Cookies automatisch auf `Secure`
gesetzt; nur zum Testen ohne TLS lässt sich das über `COOKIE_SECURE=false` abschalten.