---
title: "Betrieb"
---

## Dienste und Logs

| Container | Logs zeigen | Hinweis |
| --- | --- | --- |
| `community-app-1` | Zugriffslog (JSON) und Anwendungsfehler | `docker compose logs -f app` |
| `community-worker-1` | E-Mail-Versand, Push, Video-Umwandlung, Zahlungsabgleich | läuft dauerhaft, startet sich stündlich neu (normal) |
| `community-migrate-1` | Migrationen und Erststart | endet mit *Exited (0)*; Fehlercode = Migration fehlgeschlagen |
| `community-mercure-1` | Echtzeit-Verbindungen | |

Die Log-Rotation ist in den Stack-Dateien für Coolify und Portainer auf 3 × 100 MB je Container eingestellt; in der generischen Compose-Datei übernimmt das die Docker-Konfiguration des Hosts.

## Systemstatus

- `https://<domain>/health` – Lebenszeichen für Monitoring (`{"status":"ok","database":"ok"}`).
- `/admin` (Plattform-Admin) – Kennzahlen, fehlgeschlagene Hintergrundjobs, Stripe-Status, Communities und Nutzer verwalten.
- `php bin/console app:doctor` – prüft Datenbank, Redis, Storage, Mailer, Stripe und `APP_URL`.

## Konsole

Befehle laufen im Container `app`:

- Docker Compose: `docker compose exec app php bin/console <befehl>`
- Portainer: Container → *Console* (`/bin/sh`, Benutzer `www-data`)
- Coolify: Ressource → Dienst `app` → *Terminal*

| Befehl | Zweck |
| --- | --- |
| `app:doctor` | Systemprüfung |
| `app:install` | Erststart (läuft automatisch im Init-Container; von Hand nur, wenn `ADMIN_EMAIL` später gesetzt wurde und noch kein Konto existiert) |
| `app:user:list [--deleted]` | Konten anzeigen |
| `app:user:promote <email> [--verify]` | Plattform-Admin ernennen; `--verify` bestätigt die E-Mail-Adresse mit (ohne Mailversand) |
| `app:user:password <email> [--password=…]` | Passwort setzen – ohne Option wird ein zufälliges erzeugt und einmalig angezeigt (Ersatz für „Passwort vergessen“ ohne Mailversand) |
| `app:user:delete <email> [-y]` | Konto anonymisieren (wie Selbstlöschung) |
| `app:points:adjust <slug> <email> <delta> [--note=…]` | Punkte korrigieren (negative Werte: `-- -5`) |
| `app:billing:sync <slug>` | Verpasste Stripe-Ereignisse nachholen (z. B. nach Ausfall des Workers) |
| `app:push:keys`, `app:push:test <email>` | Push-Schlüssel erzeugen, Test-Push senden |
| `list app` | alle Befehle |

## Rollen

- **Plattform-Admin** (`/admin`): sieht alle Communities und Konten, bestätigt E-Mail-Adressen, sperrt Communities, vergibt weitere Plattform-Admins.
- **Owner** einer Community: Einstellungen, Pläne und Zahlungen, Rollen, Rechtstexte, Übergabe und Löschen.
- **Admin / Moderator / Mitglied**: Rechte innerhalb der Community.
- **Eigene Rollen** (Einstellungen → Rollen): reine Kennzeichnungen wie „Mentor“ oder „Alumni“ mit Abzeichen. Sie steuern keine Rechte, können aber Pläne einschränken: Unter Zahlungen → Plan bearbeiten → „Buchen nur mit Rolle“ dürfen dann nur Mitglieder mit einer der gewählten Rollen buchen oder kaufen; andere sehen „Nur für Mitglieder mit der Rolle …“. Das Team kann solche Pläne weiterhin manuell vergeben.

## Datensicherung

Erfolgt außerhalb der Anwendung durch den Betreiber. Relevant sind die Docker-Volumes `mariadb`, `uploads` und `redis`; bei `STORAGE_ADAPTER=s3` zusätzlich der Bucket. Sessions und Warteschlange liegen in Redis – ein Verlust kostet nur die Anmeldungen und noch nicht verarbeitete Hintergrundjobs.
