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:
@@ -1,6 +1,8 @@
|
||||
# Kopie als .env neben die compose.yaml legen und Werte ersetzen.
|
||||
|
||||
# Passwort des Datenbank-Nutzers. Lang und zufaellig waehlen.
|
||||
# Achtung: Ein $ im Wert wird von Docker Compose als Variable gedeutet und
|
||||
# verschluckt. Entweder $ vermeiden oder als $$ schreiben.
|
||||
DB_PASSWORD=hier-ein-langes-zufaelliges-passwort
|
||||
|
||||
# Schluessel fuer Sitzungen und CSRF-Token, mindestens 32 Zeichen.
|
||||
@@ -15,6 +17,10 @@ BOOTSTRAP_ADMIN_PASSWORD=
|
||||
|
||||
# --- Optional ---
|
||||
|
||||
# Name des Docker-Netzwerks, in dem der Reverse Proxy laeuft. Der Proxy legt es
|
||||
# an; bei Nginx Proxy Manager heisst es meist nginx_default.
|
||||
# PROXY_NETWORK=nginx_default
|
||||
|
||||
# Adresse der GExtension-Instanz fuer den Paket-Abgleich. Der Parser ist auf
|
||||
# deren Seitenaufbau gebaut; ein anderes Shop-System laesst sich damit nicht
|
||||
# auslesen. Leer lassen, wenn der Abgleich nicht genutzt wird.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -21,6 +21,9 @@ services:
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- default # App zur Datenbank
|
||||
- proxy # Reverse Proxy zur App
|
||||
|
||||
db:
|
||||
image: postgres:16-alpine
|
||||
@@ -56,5 +59,17 @@ services:
|
||||
sleep 86400;
|
||||
done'
|
||||
|
||||
networks:
|
||||
# Das Netzwerk des Reverse Proxy. Es muss bereits existieren - der Proxy
|
||||
# legt es an, bei Nginx Proxy Manager heisst es meist nginx_default.
|
||||
# Anderer Name? Dann PROXY_NETWORK in der .env setzen.
|
||||
#
|
||||
# Ohne Reverse Proxy in Docker: diesen Block und die networks-Liste beim
|
||||
# app-Service entfernen und stattdessen einen Port mappen (ports: "3000:3000").
|
||||
# Dann aber selbst fuer HTTPS sorgen - die App gehoert nicht ungeschuetzt ins Netz.
|
||||
proxy:
|
||||
external: true
|
||||
name: ${PROXY_NETWORK:-nginx_default}
|
||||
|
||||
volumes:
|
||||
cc_db:
|
||||
|
||||
Reference in New Issue
Block a user