Der Stack bleibt bewusst erhalten: Er richtet sich an Betreiber OHNE eigenen Reverse-Proxy, weil Caddy das Zertifikat selbst holt und erneuert. Er war allerdings seit Februar stehengeblieben und reichte zehn Variablen nicht an den Container durch - teils sicherheitsrelevant. Behoben: - HTTPS_ENABLED ergaenzt (Default true, Caddy terminiert TLS). Fehlte bisher komplett, dadurch waere der Refresh-Cookie OHNE Secure-Attribut gesetzt worden und trust proxy falsch gewesen. - JWT_EXPIRES_IN Default von 7d auf 15m korrigiert - der Wert galt dem ACCESS-Token und stammte aus der Zeit vor dem Access-/Refresh-Pattern. Ein Access-Token mit einer Woche Lebensdauer im Browser-Speicher macht das XSS-Fenster unnoetig gross. - JWT_REFRESH_EXPIRES_IN, CORS_ORIGINS, LISTEN_ADDR, SSRF_BLOCK_PRIVATE_IPS ergaenzt. JWT_REFRESH_EXPIRES_IN stand bereits in docker/.env.example, wurde aber nie durchgereicht - dieselbe Fehlerklasse wie beim Audit-Siegel. - Caddyfile: gzip fuer /api/* deaktiviert (BREACH, CVE-2013-3587). Die Konfiguration komprimierte bisher alles, obwohl die README das fuer die API ausdruecklich ausschliesst. Statische Assets bleiben komprimiert. Mit `caddy validate` geprueft. - docker/.env.example um die neuen Variablen erweitert, dazu ein Hinweis auf Sonderzeichen im DB-Passwort (dieser Stack setzt die DATABASE_URL direkt zusammen, anders als der Entrypoint im Projektstamm). - README benennt jetzt, wann welcher Stack der richtige ist. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
62 lines
2.3 KiB
Bash
62 lines
2.3 KiB
Bash
# OpenCRM Docker Environment
|
|
# ============================
|
|
# Copy this file to .env and adjust the values
|
|
|
|
# Domain (for Caddy SSL certificate)
|
|
# Use your actual domain, e.g., crm.example.com
|
|
DOMAIN=localhost
|
|
|
|
# Database
|
|
# HINWEIS: In diesem Stack wird die Verbindungs-URL direkt aus diesen Werten
|
|
# zusammengesetzt. Sonderzeichen im Passwort ($ ! # @ : / ?) koennen die URL
|
|
# zerlegen und den Start verhindern. Nutze hier ein langes Passwort aus
|
|
# Buchstaben und Ziffern - oder den Stack im Projektstamm, dessen Entrypoint
|
|
# die Zeichen korrekt kodiert.
|
|
DB_ROOT_PASSWORD=change-this-root-password
|
|
DB_NAME=opencrm
|
|
DB_USER=opencrm
|
|
DB_PASSWORD=change-this-password
|
|
|
|
# JWT Authentication
|
|
# Generate with: openssl rand -base64 32
|
|
JWT_SECRET=change-this-to-a-secure-random-string
|
|
# Access-Token kurz (XSS-Schutz, Token lebt nur im JS-Memory).
|
|
# Refresh-Token lang im httpOnly-Cookie.
|
|
JWT_EXPIRES_IN=15m
|
|
JWT_REFRESH_EXPIRES_IN=7d
|
|
|
|
# Encryption Key (for portal credentials)
|
|
# Generate with: openssl rand -hex 32
|
|
ENCRYPTION_KEY=change-this-to-a-32-byte-hex-key
|
|
|
|
# TLS: In diesem Stack terminiert Caddy das HTTPS. Das Flag setzt das
|
|
# Secure-Attribut am Refresh-Cookie, trust proxy = 1 Hop und
|
|
# upgrade-insecure-requests in der CSP.
|
|
# Nur auf false setzen, wenn der Stack bewusst ohne TLS laeuft (reiner Test).
|
|
HTTPS_ENABLED=true
|
|
|
|
# Nur noetig, wenn das Frontend unter einer ANDEREN Domain laeuft als das
|
|
# Backend. Beim Standard-Setup (alles hinter derselben Caddy-Domain) leer
|
|
# lassen.
|
|
CORS_ORIGINS=
|
|
|
|
# Cloud-Deploy: blockt zusaetzlich private IP-Ranges, damit ein eingeloggter
|
|
# Admin ueber die Provider-/SMTP-Testverbindung keine internen Dienste
|
|
# anpingen kann. On-Prem meist false, weil Mailserver oft lokal laufen.
|
|
SSRF_BLOCK_PRIVATE_IPS=false
|
|
|
|
# First Install: Set to "true" to seed database on first startup
|
|
# After first successful start, set back to "false"
|
|
RUN_SEED=true
|
|
|
|
# ---------- Siegel für das Audit-Log ----------
|
|
# Signiert jeden neuen Audit-Eintrag mit einem Schlüssel ausserhalb der
|
|
# Datenbank, damit sich die Beweisspur nicht nachtraeglich faelschen laesst.
|
|
# Generieren: openssl rand -hex 32 (pro Umgebung ein eigener Wert).
|
|
# Ohne Wert laeuft alles normal weiter, nur ungesiegelt.
|
|
# Einmal gesetzt nicht wieder entfernen - Details in der README.
|
|
AUDIT_HMAC_KEY=
|
|
|
|
# Nur beim Schluesselwechsel: frueherer Schluessel, mehrere kommagetrennt.
|
|
AUDIT_HMAC_KEY_OLD=
|