Files
betreuungs-cockpit/.env.example
T
Florian Wilde 42eb242767 feat: Update-Skript, das die vergessenen Schritte mitnimmt
Bisher war Aktualisieren eine Folge von Befehlen aus der Anleitung, und
zwei davon vergisst man zuverlaessig: die Sicherung vorher und die beiden
SQL-Skripte hinterher. Genau die hat es hier schon gekostet.

./scripts/update.sh macht das in einem Durchgang - mit zwei
Eigenschaften, auf die es ankommt:

Bis zur Rueckfrage wird nichts veraendert. Der erste Entwurf hat die
eigenen Aenderungen beiseite gelegt und danach am Serverzugriff
abgebrochen - Halbzustand, aus dem man erst wieder herausfinden muss.
Jetzt laufen Pruefung, Abgleich und Changelog-Anzeige vollstaendig
durch, bevor irgendetwas angefasst wird.

Eigene Aenderungen an versionierten Dateien blockieren nicht. Im Betrieb
passt man die docker-compose.yml an, bis etwas laeuft; genau diese
Anpassungen sind spaeter oft schon eingearbeitet. Das Skript legt sie mit
git stash beiseite - rueckholbar, nicht weggeworfen - und sagt, wie man
sie zurueckbekommt. Wer sie wirklich loswerden will, nimmt --verwerfen.
Die .env bleibt immer unangetastet.

Schlaegt die Sicherung fehl, wird nicht aktualisiert. Schlaegt der Bau
fehl, nennt das Skript den Weg zurueck.

Nebenbei behoben: Der Port der MinIO-Konsole stand fest auf 9001. Lief
dort schon etwas, startete der ganze Stapel nicht. Jetzt ueber
MINIO_KONSOLE_PORT einstellbar - dieselbe Moeglichkeit, die APP_PORT
schon hatte. Aufgefallen beim Aufsetzen einer Testumgebung.

Etappe: 8
Phase: Haertung
2026-08-22 15:09:01 +02:00

96 lines
3.9 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
# Die Konsole des mitgelieferten Objektspeichers. Nur noetig, wenn auf dem
# Server schon etwas auf 9001 laeuft.
MINIO_KONSOLE_PORT=9001
# --- 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