---
title: "Installation mit Docker Compose"
---

Für jeden Server mit Docker Engine (≥ 24) und Docker Compose (≥ 2.24), Konfiguration über eine `.env`-Datei.

1. Auslieferungspaket entpacken (`sha256sum -c community-vX.Y.Z.tar.gz.sha256` prüft die Datei). Es enthält `docker-compose.yml`, `.env.example`, die Varianten für Coolify und Portainer sowie diese Dokumentation.
2. Bei der Registry anmelden: `docker login registry.example.org` mit den Zugangsdaten aus der Lizenz.
3. `.env.example` nach `.env` kopieren und ausfüllen. Pflicht: `APP_SECRET` (64 zufällige Zeichen, z. B. `openssl rand -hex 32` – nie nachträglich ändern, daraus werden Geheimnisse verschlüsselt), `APP_URL`, `MARIADB_PASSWORD`, `MARIADB_ROOT_PASSWORD`, `DATABASE_URL` (gleiches Passwort), `MERCURE_JWT_SECRET`, `MAILER_DSN`. Empfohlen: `ADMIN_EMAIL`/`ADMIN_PASSWORD` für das erste Konto. Alle Variablen erklärt die [Konfiguration](/konfiguration).
4. `docker compose up -d` – `migrate` führt die Migrationen aus und legt den ersten Admin an, danach starten `app` und `worker`.
5. Reverse Proxy mit TLS auf die App zeigen lassen. Die App spricht nur HTTP und lauscht standardmäßig auf `127.0.0.1:8080` (`APP_BIND`, `APP_PORT`). Der Proxy muss `X-Forwarded-Proto` senden und in `TRUSTED_PROXIES` stehen; meldet er kein Schema, `APP_TLS_TERMINATED=1` setzen.
6. `docker compose exec app php bin/console app:doctor` – prüft Datenbank, Redis, Storage, Mailer und Stripe.
7. `https://<domain>/health` muss `{"status":"ok"}` liefern – diesen Endpunkt ins Monitoring aufnehmen.

## Beispiel für nginx als Reverse Proxy

```nginx
server {
    listen 443 ssl http2;
    server_name community.example.org;
    # ssl_certificate … (z. B. certbot)
    client_max_body_size 2100m;   # Video-Upload bis 2 GB
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_read_timeout 300s;
    }
    location /.well-known/mercure {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto https;
        proxy_buffering off;          # Server-Sent Events
        proxy_read_timeout 24h;
    }
}
```
