# LehrerApp.Api – Deployment per Docker ## Starten ```bash cd docker JWT_SECRET= docker compose up -d ``` `./data` (relativ zu `docker/`) wird als Volume gemountet und enthält alle Server-Daten (Ereignis-Logs, Snapshots, Nutzer) – bei Neustarts/Updates bleibt es erhalten. ## Nutzer anlegen Es gibt keine offene Registrierung (`/api/auth/register`). Neue Nutzer werden per CLI im laufenden Container angelegt: ```bash docker compose exec api dotnet LehrerApp.Api.dll create-user ``` Fragt interaktiv nach einem Passwort (mind. 12 Zeichen). Alternativ nicht-interaktiv, z. B. aus einem Skript: ```bash docker compose exec api dotnet LehrerApp.Api.dll create-user --password "" ``` Der Befehl beendet sich danach sofort wieder, ohne den API-Dienst zu starten – für den eigentlichen Serverbetrieb läuft `docker compose up` unverändert weiter. ## Backup `backup.sh` sichert `./data` (Ereignis-Logs, Snapshots, Anhänge, Nutzer) als komprimiertes Tar-Archiv unter `docker/backups/` und räumt Archive älter als 30 Tage automatisch auf. Läuft direkt auf dem Host (kein Container-Zugriff nötig, `./data` liegt dort per Bind-Mount ohnehin): ```bash ./docker/backup.sh ``` Für regelmäßige Sicherung z. B. per Cron, einmal täglich nachts: ```bash 0 3 * * * /pfad/zu/docker/backup.sh >> /pfad/zu/docker/backup.log 2>&1 ``` ## Rate Limiting `/api/auth/login` ist auf 5 Versuche pro Minute begrenzt (Brute-Force-Schutz). Alle übrigen Endpunkte sind zusätzlich global auf 120 Anfragen pro Minute je IP begrenzt. Anhänge sind auf 15 MB Anfragegröße gedeckelt (Kestrel `MaxRequestBodySize`), einzelne Dateien clientseitig zusätzlich auf 10 MB (`IAttachmentStorage.MaxSizeBytes`).