- Rate Limiting ueber ASP.NET Cores eingebautes Microsoft.AspNetCore.RateLimiting (keine neue Paketabhaengigkeit): /api/auth/login auf 5 Versuche/Minute begrenzt (Brute-Force-Schutz), alle Endpunkte zusaetzlich global auf 120 Anfragen/Minute je IP - Kestrel MaxRequestBodySize auf 15 MB gedeckelt (Anhaenge sind clientseitig ohnehin auf 10 MB begrenzt) - Neu docker/backup.sh: Tar-Archiv von ./data (Ereignis-Logs, Snapshots, Anhaenge, Nutzer), raeumt Archive aelter als 30 Tage auf, laeuft direkt auf dem Host - docker/README.md um Backup- und Rate-Limit-Dokumentation ergaenzt Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
54 lines
1.7 KiB
Markdown
54 lines
1.7 KiB
Markdown
# LehrerApp.Api – Deployment per Docker
|
||
|
||
## Starten
|
||
|
||
```bash
|
||
cd docker
|
||
JWT_SECRET=<zufälliger-langer-string> 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 <benutzername>
|
||
```
|
||
|
||
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 <benutzername> --password "<passwort>"
|
||
```
|
||
|
||
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`).
|