---
title: "Konfiguration"
---

Alle Einstellungen sind Umgebungsvariablen – in der `.env`-Datei (Docker Compose) oder in der Oberfläche von Coolify/Portainer. Nach einer Änderung den Stack neu ausrollen (`docker compose up -d` bzw. *Deploy*).

## Grundlagen

| Variable | Bedeutung |
| --- | --- |
| `APP_IMAGE` | Anwendungs-Image inklusive Versions-Tag aus der privaten Registry |
| `APP_SECRET` | 64 zufällige Zeichen. Signiert Sessions und Links und verschlüsselt Geheimnisse (z. B. Zwei-Faktor). **Nie nachträglich ändern.** |
| `APP_URL` | Öffentliche Adresse mit Schema, z. B. `https://community.example.org`. Steht in E-Mails, Zahlungs-Rückkehrseiten und Push-Benachrichtigungen |
| `DEFAULT_LOCALE` | Standardsprache für Gäste: `de` oder `en`; angemeldete Nutzer wählen selbst |
| `ADMIN_EMAIL`, `ADMIN_PASSWORD` | Erstes Konto (Plattform-Admin, bestätigte E-Mail). Wird nur gelesen, solange noch kein Konto existiert; danach dürfen die Werte entfernt werden |
| `TRUSTED_PROXIES` | IP-Bereiche der Proxys vor der App (Docker-Netz, Load Balancer). Nur diese dürfen `X-Forwarded-*`-Header setzen |
| `APP_TLS_TERMINATED` | `1`, wenn vor der App TLS endet, der Proxy das aber nicht per `X-Forwarded-Proto` meldet. Cloudflare wird automatisch erkannt |

## Datenbank, Redis, Echtzeit

| Variable | Bedeutung |
| --- | --- |
| `MARIADB_PASSWORD`, `MARIADB_ROOT_PASSWORD`, `DATABASE_URL` | Zugang zur MariaDB im Stack; `DATABASE_URL` muss dasselbe Passwort enthalten |
| `REDIS_URL`, `REDIS_SESSION_SAVE_PATH`, `MESSENGER_TRANSPORT_DSN` | Redis im Stack – Standardwerte beibehalten. `REDIS_SESSION_SAVE_PATH` muss `persistent=1` enthalten (Standard), sonst gehen unter Last Sitzungen verloren |
| `MERCURE_URL`, `MERCURE_PUBLIC_URL`, `MERCURE_JWT_SECRET` | Echtzeit-Hub. Das Geheimnis (≥ 32 Zeichen) signiert Veröffentlichen und Abonnieren. `MERCURE_URL` leer = Echtzeit aus, die Oberfläche fragt dann alle 15–30 s nach |

## E-Mail

| Variable | Bedeutung |
| --- | --- |
| `MAILER_DSN` | SMTP-Zugang, z. B. `smtp://benutzer:passwort@mail.example.org:587` (Port 465 mit `smtps://`). Sonderzeichen im Passwort URL-kodieren (`@` → `%40`). `null://null` verschickt nichts |
| `MAILER_FROM_ADDRESS`, `MAILER_FROM_NAME` | Absender |

Ohne Mailversand können sich neue Nutzer nicht selbst bestätigen; Plattform-Admins bestätigen Konten dann unter `/admin → Nutzer`.

## Dateien

| Variable | Bedeutung |
| --- | --- |
| `STORAGE_ADAPTER` | `local` (Docker-Volume `uploads`) oder `s3` |
| `S3_ENDPOINT`, `S3_REGION`, `S3_BUCKET`, `S3_KEY`, `S3_SECRET`, `S3_USE_PATH_STYLE` | Zugang zu einem S3-kompatiblen Object Storage (MinIO, Hetzner, AWS …) |

Uploads: Bilder bis 10 MB (werden als WebP neu kodiert), Anhänge bis 100 MB, Videos bis 2 GB (werden vom Worker zu Streaming-Fassungen umgewandelt).

## Zahlungen (Stripe)

| Variable | Bedeutung |
| --- | --- |
| `STRIPE_SECRET_KEY`, `STRIPE_PUBLISHABLE_KEY` | Plattform-Schlüssel (Stripe Connect). Jeder Community-Owner verbindet sein eigenes Stripe-Konto in den Einstellungen |
| `STRIPE_WEBHOOK_SECRET` | Im Stripe-Dashboard einen Webhook-Endpunkt `https://<domain>/api/v1/webhooks/stripe` anlegen (Ereignisse `checkout.session.*`, `customer.subscription.*`, `invoice.*`, `credit_note.*`) und das `whsec_…` eintragen |

Leer gelassen bleiben die Zahlungsfunktionen aus; alles andere funktioniert.

## Push-Benachrichtigungen

`docker compose exec app php bin/console app:push:keys` erzeugt ein Schlüsselpaar; die drei Zeilen `PUSH_VAPID_PUBLIC_KEY`, `PUSH_VAPID_PRIVATE_KEY`, `PUSH_VAPID_SUBJECT` eintragen. Leer = Push aus. Die Schlüssel nach dem Erzeugen nicht mehr ändern, sonst verlieren alle Geräte ihr Abo.

## Anmeldung mit Google

`GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` – siehe [Anmeldung mit Google einrichten](/google-login). Leer = kein Google-Knopf.

## Rechtstexte

`LEGAL_IMPRESSUM`, `LEGAL_DATENSCHUTZ`, `LEGAL_AGB` – Rechtstexte der Plattform-Ebene (`/impressum` …) als HTML. Jede Community pflegt ihre eigenen Texte in den Einstellungen; dort gibt es Vorlagen.

## Weitere

| Variable | Bedeutung |
| --- | --- |
| `LINK_PREVIEW_ENABLED`, `LINK_PREVIEW_BLOCKED_HOSTS` | Vorschau für Links in Beiträgen; interne Hosts lassen sich sperren |
| `SENTRY_DSN` | Fehlerberichte an ein Sentry-Projekt (optional) |
| `APP_PORT`, `APP_BIND` | Nur Docker-Compose-Variante: Host-Port der App (Standard `127.0.0.1:8080`) |
