-
Notifications
You must be signed in to change notification settings - Fork 0
Installation und Betrieb
Diese Seite beschreibt die drei Installationswege (PyPI, Docker Standalone, Docker Compose) sowie die wichtigsten Betriebs-Endpoints und Hintergrund-Jobs.
Voraussetzungen: Python ≥ 3.12 (bei PyPI-Installation) bzw. Docker; ein
Verzeichnis mit den Schichtplaner5-.DBF-Dateien (alternativ der
PostgreSQL-Mirror, siehe Konfiguration).
pip install openschichtplaner5-apiDie Abhängigkeit libopenschichtplaner5[postgres]>=1.7.0 wird automatisch
mitinstalliert. Start:
SP5_DB_PATH=/pfad/zu/SP5/Daten python -m uvicorn sp5api.main:app --host 0.0.0.0 --port 8000-
Einziger Einstiegspunkt ist die ASGI-App
sp5api.main:app— es gibt bewusst kein CLI-Kommando. - Für Produktion zusätzlich mindestens
SECRET_KEYsetzen (JWT-Signatur; ohne sie wird pro Prozess ein Zufallssecret erzeugt und alle Sessions verfallen beim Neustart) sowieSP5_BACKEND_DIRals Ressourcen-Root für Laufzeitdaten (JSON-Stores, Uploads). Details: Konfiguration.
⚠️ Ein Worker-Prozess: Session-Store, SSE-Subscriber, Metriken und Cache liegen im Prozess-Speicher. Die API ist für den Betrieb mit einem uvicorn-Worker ausgelegt (--workers 1, Default).
Liegt unter SP5_FRONTEND_DIST (Default: <SP5_BACKEND_DIR>/../frontend/dist)
ein gebautes Frontend, wird es unter / ausgeliefert (Single-Page-App mit
index.html-Fallback). Fehlt das Verzeichnis, läuft die API im reinen
API-Modus — so betreibt man sie z. B. hinter der
Hauptanwendung.
Das Repository enthält ein produktionsreifes Multi-Stage-Dockerfile
(schlankes Runtime-Image, Non-Root-User, HEALTHCHECK auf /api/health,
EXPOSE 8000). Im Image sind SP5_DB_PATH=/app/data und
SP5_BACKEND_DIR=/app/backend vorkonfiguriert.
docker build -t openschichtplaner5-api .
# .env mit JWT-Secret anlegen (Minimum für Produktion)
echo "SECRET_KEY=$(openssl rand -hex 32)" > .env
docker run -d --name sp5-api -p 8000:8000 \
-v /pfad/zu/SP5/Daten:/app/data \
--env-file .env \
openschichtplaner5-api-
DBF-Volume: Das Verzeichnis mit den
.DBF-Dateien wird nach/app/datagemountet — die API liest und schreibt dort. - Weitere Umgebungsvariablen (CORS, Rate-Limits, SMTP, …) kommen über die
.env-Datei dazu, siehe Konfiguration.
Der Build installiert die Bibliothek standardmäßig von PyPI
(libopenschichtplaner5[postgres]==1.7.0, gepinnt). Über das Build-Argument
LIB_SOURCE lässt sich z. B. der Entwicklungsstand verwenden:
docker build --build-arg LIB_SOURCE=git+https://github.com/mschabhuettl/libopenschichtplaner5.git@main .Die beiliegende docker-compose.yml startet die API mit DBF-Volume und
persistenten State-Volumes:
# 1. DBF-Verzeichnis angeben (in .env oder als Shell-Variable);
# ohne Angabe wird ein Named Volume sp5_dbf verwendet
# 2. .env anlegen (SECRET_KEY für Produktion Pflicht)
SP5_DBF_DIR=/pfad/zu/SP5/Daten docker compose up --buildGemountete Volumes:
| Volume / Pfad | Container-Pfad | Inhalt |
|---|---|---|
${SP5_DBF_DIR} (sonst Named Volume sp5_dbf) |
/app/data |
DBF-Datenbank |
api_state |
/app/backend/data |
JSON-Stores (Webhooks, Scheduled Reports, …) |
api_api_state |
/app/backend/api |
Laufzeit-State + Uploads (Fotos) |
api_backups |
/app/backend/backups |
Auto-Migrations-Backups |
Der Container läuft gehärtet (read_only: true, no-new-privileges,
tmpfs /tmp, restart: unless-stopped). Das Build-Argument LIB_SOURCE
ist per .env überschreibbar.
📦 Komplettes System gesucht? Die Hauptanwendung bringt ein Full-Stack-Compose (Frontend + API) mit — siehe App-Wiki → Installation.
Diese Endpoints sind ohne Anmeldung erreichbar:
| Endpoint | Inhalt |
|---|---|
GET /api/health |
Aggregierter Health-Check: DB (5 kritische DBF-Tabellen), Disk, Memory, Uptime, aktive Sessions, Paketversion |
GET /api/metrics |
In-Process-Metriken: Request-Zähler, Fehlerrate, Cache-Hitrate, DB-Latenz |
GET /api/version |
API-Version, Python-Version, min_compatible_frontend
|
GET /api |
Service-Info (Name, Version, aktives Backend dbf/postgresql) |
curl http://localhost:8000/api/health
# → {"status":"healthy","checks":{"db":"ok","disk":"ok","memory":"ok"},"version":"1.2.0",...}Der Docker-HEALTHCHECK nutzt ebenfalls /api/health.
Beim Hochfahren startet die API automatisch:
-
DBF-Auto-Migration der Bibliothek (Schema-Updates; Status via
GET /api/migration/status), - DBF-Startup-Check (Prüfung der kritischen Tabellen),
-
Auto-Backup (höchstens 1× pro 24 h, Rotation auf 7 Backups; Verwaltung
über
GET /api/admin/backups), -
Cleanup-Task für abgelaufene Sessions/Lockouts (Intervall
SESSION_CLEANUP_INTERVAL_MINUTES, Default 5), - Report-Scheduler für Scheduled Reports (Prüfung alle 5 Minuten).
- Strukturiertes JSON-Logging (umschaltbar auf Text via
SP5_LOG_FORMAT) in eine rotierende Logdatei (LOG_FILE, Default/tmp/sp5-api.log), mitX-Request-ID-Propagierung. -
Audit-Log sicherheitsrelevanter Aktionen als JSON-Lines (
SP5_AUDIT_LOG). -
Rate-Limit-Dashboard: 429-Ereignisse landen in einem Event-Log und sind
für Admins über
GET /api/admin/rate-limitsabrufbar.
Jede Route existiert doppelt: kanonisch unter /api/... und unter
/api/v1/... (empfohlen). Unversionierte Aufrufe erhalten die Header
Deprecation: true, Sunset (+365 Tage) und Link: successor-version.
- Konfiguration — vollständige Environment-Referenz
- Authentifizierung-und-Rechte — Erstanmeldung und Benutzerverwaltung
- App-Wiki → Health-Check
- Lib-Wiki → Datenbank-Backends
Home — Startseite
- Installation-und-Betrieb — PyPI, Docker, Compose, Health & Metrics
- Endpunkt-Referenz — alle 313 Routen im Überblick
- Authentifizierung-und-Rechte — Login, JWT, 2FA, Rollen & Rechte
- Konfiguration — Environment-Variablen
- Berichte-und-Exporte — Exporte, Formate, Scheduled Reports
- Entwicklung — Setup, Tests, Releases