4.8 KiB
4.8 KiB
Konfiguration (ENV-Variablen)
Letzte Aktualisierung: 2026-03-06
Alle Konfiguration erfolgt über Umgebungsvariablen in der .env-Datei.
Vorlage: .env.example — niemals echte Credentials committen.
App
| Variable | Standard | Beschreibung |
|---|---|---|
APP_NAME |
App |
Anwendungsname (wird in UI-Titeln und E-Mails verwendet) |
APP_URL |
http://localhost:8080 |
Basis-URL der Anwendung (für Links in E-Mails und Redirects) |
APP_ENV |
dev |
Laufzeitumgebung (dev oder prod) — beeinflusst Fehlerausgabe und Caching |
APP_DEBUG |
true |
Debug-Modus aktivieren (true/false) — in Produktion auf false setzen |
APP_CONFIG_VALIDATE |
true |
Boot-Validierung für ENV-Konfiguration aktivieren/deaktivieren (true/false) |
APP_TIMEZONE |
Europe/Berlin |
PHP-Zeitzone für date_default_timezone_set() |
APP_STORAGE_PATH |
./storage |
Pfad zum Storage-Verzeichnis für Uploads und Caches |
APP_CRYPTO_KEY |
(leer) | Schlüssel für symmetrische Verschlüsselung (64-stelliger Hex-Key oder Base64 mit 32 Byte) — Pflichtfeld in Produktion |
APP_LOCALE |
de |
Standard-Sprache der Anwendung |
APP_LOCALES |
de,en |
Komma-getrennte Liste aller unterstützten Sprachen |
APP_I18N_DOMAIN |
default |
Gettext-Domain — bestimmt welche i18n/default_*.json geladen wird, normalerweise nicht ändern |
Session
| Variable | Standard | Beschreibung |
|---|---|---|
SESSION_NAME |
app_session |
Name des Session-Cookies im Browser |
Tenant
| Variable | Standard | Beschreibung |
|---|---|---|
TENANT_SCOPE_STRICT |
true |
Erzwingt strikte Tenant-Isolation (true/false) — in Produktion immer true |
Datenbank
| Variable | Standard | Beschreibung |
|---|---|---|
DB_HOST |
db |
Hostname des MySQL/MariaDB-Servers (Docker-Service-Name oder IP) |
DB_PORT |
3306 |
Port des Datenbankservers |
DB_NAME |
db |
Name der Datenbank |
DB_USER |
user |
Datenbankbenutzer |
DB_PASS |
user |
Passwort des Datenbankbenutzers |
DB_ROOT_PASSWORD |
root |
Root-Passwort für Docker-Compose (wird nur vom DB-Container genutzt, nicht von PHP) |
Cache
| Variable | Standard | Beschreibung |
|---|---|---|
CACHE_SERVERS |
memcached:11211 |
Memcached-Server als host:port (Docker-Service-Name oder IP) |
Firewall
Die Firewall begrenzt gleichzeitige Requests pro IP (Concurrency-Schutz).
| Variable | Standard | Beschreibung |
|---|---|---|
FIREWALL_CONCURRENCY |
10 |
Max. gleichzeitige Requests pro IP |
FIREWALL_SPINLOCK_SECONDS |
0.15 |
Wartezeit in Sekunden zwischen Concurrency-Prüfungen |
FIREWALL_INTERVAL_SECONDS |
300 |
Zeitfenster in Sekunden für die Concurrency-Messung |
FIREWALL_CACHE_PREFIX |
fw_concurrency_ |
Prefix für Memcached-Keys der Firewall |
FIREWALL_REVERSE_PROXY |
false |
Auf true setzen wenn die App hinter einem Reverse Proxy (Nginx, Traefik) läuft — sonst wird die Proxy-IP statt der echten Client-IP verwendet |
SMTP (E-Mail)
| Variable | Standard | Beschreibung |
|---|---|---|
SMTP_HOST |
smtp.example.com |
Hostname des SMTP-Servers |
SMTP_PORT |
587 |
Port des SMTP-Servers (587 = STARTTLS, 465 = SSL) |
SMTP_USER |
no-reply@example.com |
SMTP-Benutzername / Absenderadresse |
SMTP_PASS |
(leer) | SMTP-Passwort |
SMTP_FROM |
no-reply@example.com |
Absender-E-Mail-Adresse |
SMTP_FROM_NAME |
App |
Absendername in ausgehenden E-Mails |
SMTP_SECURE |
tls |
Verschlüsselungstyp: tls (STARTTLS) oder ssl |
Produktions-Checkliste
Folgende Variablen müssen vor Go-Live angepasst werden:
APP_ENV=prodAPP_DEBUG=falseAPP_CRYPTO_KEY— z. B. 64-stelligen Hex-Key generieren:openssl rand -hex 32APP_URL— auf die echte Domain setzenTENANT_SCOPE_STRICT=trueFIREWALL_REVERSE_PROXY=truefalls hinter Nginx/Traefik- Alle DB-Credentials auf sichere Werte setzen
- Alle SMTP-Credentials auf echte Werte setzen
Boot-Validierung (Fail-Fast)
Beim Start validiert die Anwendung die zentrale ENV-Konfiguration sofort in config/config.php.
Bei fehlenden oder ungültigen Pflichtwerten stoppt der Boot-Prozess mit klarer Fehlermeldung.
Geprüft werden unter anderem:
- Pflicht-Keys wie
APP_ENV,DB_*,CACHE_SERVERS,SESSION_NAME,FIREWALL_* - Typen/Formate (
bool,int,float,timezone,URL) - Konsistenz (
APP_LOCALEmuss inAPP_LOCALESenthalten sein) - Production-Regeln:
APP_URLmuss gesetzt seinAPP_CRYPTO_KEYmuss gesetzt und gültig sein (64 Hex oder Base64/32 Byte)APP_DEBUG=falseTENANT_SCOPE_STRICT=true
Nur für Notfälle kann die Validierung temporär abgeschaltet werden:
APP_CONFIG_VALIDATE=false
Empfehlung: im Normalbetrieb immer true lassen.