.env.example setzte APP_BIND=127.0.0.1 als fertigen Wert, mitten zwischen lauter anderen fertigen Werten. Wer die Datei kopiert und seinen Reverse Proxy auf einem anderen Server betreibt, kommt damit nicht an die Anwendung heran - und der Fehler sieht aus, als laege es am Proxy. Der sichere Standard bleibt 127.0.0.1. Er wird nur nicht mehr als "schon erledigt" praesentiert, sondern als Entscheidung mit drei benannten Faellen: Proxy daneben, Proxy woanders mit privatem Netz, Proxy woanders ohne. Beim dritten Fall steht die Firewallregel dabei. Die Installationsanleitung nennt APP_BIND jetzt schon in Schritt 3, wo die .env ausgefuellt wird - nicht erst in Schritt 7, wo der Proxy drankommt. Wer der Anleitung von oben nach unten folgt, stolpert sonst erst vier Schritte spaeter darueber. Dazu ein eigener Abschnitt in der Fehlersuche mit den zwei curl-Proben, die den Unterschied zwischen falscher Bindeadresse und Firewall zeigen - und dem Hinweis, dass dafuer kein Neubau noetig ist. Am Programm aendert sich nichts. Etappe: 8 Phase: Haertung
92 lines
3.8 KiB
Bash
92 lines
3.8 KiB
Bash
# =============================================================================
|
|
# Betreuungs-Cockpit - Beispielkonfiguration
|
|
# Kopiere diese Datei nach .env und fuelle die Werte aus.
|
|
# Alle Geheimnisse erzeugst du mit: npm run schluessel
|
|
# =============================================================================
|
|
|
|
# --- Datenbank --------------------------------------------------------------
|
|
# Lokal (Docker Compose): Host ist der Servicename "db".
|
|
POSTGRES_USER=cockpit
|
|
POSTGRES_PASSWORD=bitte-aendern
|
|
POSTGRES_DB=betreuungs_cockpit
|
|
DATABASE_URL="postgresql://cockpit:bitte-aendern@localhost:5432/betreuungs_cockpit?schema=public"
|
|
|
|
# --- Auth.js ----------------------------------------------------------------
|
|
# 32 zufaellige Bytes, base64. Erzeugen: npm run schluessel
|
|
AUTH_SECRET=
|
|
# Oeffentliche Basis-URL der Anwendung (ohne abschliessenden Slash).
|
|
AUTH_URL=http://localhost:3000
|
|
# Hinter einem Reverse Proxy auf true setzen.
|
|
AUTH_TRUST_HOST=true
|
|
|
|
# --- Erreichbarkeit: HIER MUSST DU DICH ENTSCHEIDEN -------------------------
|
|
#
|
|
# Auf welcher Adresse soll die Anwendung erreichbar sein? Das haengt davon
|
|
# ab, WO dein Reverse Proxy laeuft. Waehl genau eine Zeile aus:
|
|
#
|
|
# Proxy auf DEMSELBEN Server
|
|
# APP_BIND=127.0.0.1
|
|
# Von aussen kommt niemand heran, nur der Proxy nebenan. Sicherste
|
|
# Variante - aber ein Proxy auf einem anderen Rechner erreicht die
|
|
# Anwendung damit NICHT.
|
|
#
|
|
# Proxy auf einem ANDEREN Server, privates Netz oder WireGuard vorhanden
|
|
# APP_BIND=10.0.0.5 <- die Adresse DIESES Servers in dem Netz
|
|
# Erste Wahl, wenn der Proxy woanders steht.
|
|
#
|
|
# Proxy auf einem ANDEREN Server, kein privates Netz
|
|
# APP_BIND=0.0.0.0
|
|
# Nur zusammen mit einer Firewallregel, die den Port ausschliesslich
|
|
# fuer die IP des Proxy-Servers oeffnet:
|
|
# ufw allow from <IP-des-Proxys> to any port 3000 proto tcp
|
|
# ufw deny 3000/tcp
|
|
#
|
|
# Zwischen Proxy und Anwendung laeuft unverschluesseltes HTTP - die
|
|
# Anwendung beendet kein TLS. Dieser Weg darf nie durchs offene Netz gehen.
|
|
# Einzelheiten: docs/INSTALLATION.md, Schritt 7.
|
|
APP_BIND=127.0.0.1
|
|
APP_PORT=3000
|
|
|
|
# --- Anwendungsseitige Feldverschluesselung ---------------------------------
|
|
# AES-256-GCM. 32 Bytes, base64. OHNE DIESEN SCHLUESSEL SIND DIE VERSCHLUESSELTEN
|
|
# FELDER UNWIEDERBRINGLICH VERLOREN - unbedingt getrennt vom Backup sichern!
|
|
# Schluesselrotation: neuen Schluessel als ENC_KEY_V2 ergaenzen und
|
|
# ENC_KEY_AKTIV=2 setzen. Alte Schluessel bleiben zum Entschluesseln stehen.
|
|
ENC_KEY_V1=
|
|
ENC_KEY_AKTIV=1
|
|
|
|
# Separater Schluessel fuer Blind-Indizes (HMAC-SHA256).
|
|
# Erlaubt die Suche nach z.B. einer IBAN, ohne sie im Klartext zu speichern.
|
|
INDEX_KEY=
|
|
|
|
# --- Sicherheit -------------------------------------------------------------
|
|
# Leerlauf bis zur automatischen Abmeldung (Sekunden). 30 Minuten.
|
|
SESSION_MAX_AGE=1800
|
|
# Wie lange eine erneute Anmeldung fuer sensible Aktionen gilt (Sekunden).
|
|
REAUTH_MAX_AGE=300
|
|
# Login-Sperre: max. Fehlversuche pro Zeitfenster (Sekunden).
|
|
LOGIN_MAX_VERSUCHE=5
|
|
LOGIN_FENSTER_SEKUNDEN=900
|
|
LOGIN_SPERRE_SEKUNDEN=900
|
|
|
|
# --- Objektspeicher (S3-kompatibel, EU!) ------------------------------------
|
|
# Wird ab Etappe 3 verwendet. Beispiel: Hetzner Object Storage, Falkenstein.
|
|
# ACHTUNG: Mit dem Anbieter muss ein AV-Vertrag nach Art. 28 DSGVO bestehen.
|
|
S3_ENDPOINT=https://fsn1.your-objectstorage.com
|
|
S3_REGION=eu-central
|
|
S3_BUCKET=betreuungs-cockpit
|
|
S3_ACCESS_KEY_ID=
|
|
S3_SECRET_ACCESS_KEY=
|
|
|
|
# --- E-Mail-Erinnerungen (optional, ab Etappe 2) ----------------------------
|
|
SMTP_HOST=
|
|
SMTP_PORT=587
|
|
SMTP_USER=
|
|
SMTP_PASSWORD=
|
|
SMTP_FROM="Betreuungs-Cockpit <cockpit@example.de>"
|
|
|
|
# --- Erstanmeldung ----------------------------------------------------------
|
|
# Wird nur vom Seed benutzt, um den ersten Betreuer-Zugang anzulegen.
|
|
SEED_ADMIN_EMAIL=fw@wildeflorian.de
|
|
SEED_ADMIN_PASSWORT=bitte-beim-ersten-login-aendern
|