Repository navigation
Installation Troubleshooting
Symptom: systemctl status einsatzleiter zeigt failed
# Details anzeigen:
journalctl -u einsatzleiter -n 50 --no-pagerHäufige Ursachen:
| Fehler | Ursache | Lösung |
|---|---|---|
Can't connect to MySQL server |
DB-Verbindung schlägt fehl | DATABASE_URL in .env prüfen, MariaDB läuft? |
ImportError: No module named 'app' |
venv nicht aktiviert / falscher Pfad |
WorkingDirectory in service-Datei prüfen |
Address already in use |
Port 8092 belegt |
ss -tlnp | grep 8092 → Prozess beenden |
SECRET_KEY not set |
.env nicht geladen |
EnvironmentFile in service-Datei prüfen |
Wenn der App-Container nicht startet, zuerst Status und vollständige Logs prüfen:
docker compose ps
docker compose logs app
docker compose logs dbHäufige Ursachen:
-
App beendet sich sofort: Pflichtwerte in
.envundDATABASE_URLmit Hostdbprüfen. Der konkrete Fehler steht indocker compose logs app. -
Keine Schreibrechte im Storage: Das Volume muss unter
/app/app_storagegemountet und für den Non-Root-Benutzereinsatzcockpitschreibbar sein. Bei einem selbst eingebundenen Host-Verzeichnis dessen Besitzer/Rechte prüfen. -
DB bleibt
unhealthy:MARIADB_ROOT_PASSWORD,MARIADB_DATABASE,MARIADB_USERundMARIADB_PASSWORDin.envprüfen. Details liefertdocker compose logs db. Die App wartet auf den erfolgreichen Healthcheck der DB.
- Passwort falsch → Reset:
python -m app.cli reset-password --username admin --password neues-pw - Session-Cookie blockiert → Browser-Cache leeren, HTTPS prüfen (Cookies werden nur über HTTPS gesetzt)
-
.envSECRET_KEY geändert → alle Sessions werden ungültig, neu einloggen
# NGINX-Logs prüfen:
tail -f /var/log/nginx/error.logHäufige Ursachen:
-
Upgrade-Header fehlt: NGINX-Konfiguration um
proxy_set_header Upgrade $http_upgrade;ergänzen -
Timeout:
proxy_read_timeout 3600s;setzen -
Mehrere Worker: Sticky Sessions via
ip_hashin NGINX upstream aktivieren
journalctl -u einsatzleiter | grep -i weasyprintHäufige Ursachen:
- Fehlende Systempakete:
sudo apt-get install -y libpango-1.0-0 libpangoft2-1.0-0 - Schriftarten fehlen:
sudo apt-get install -y fonts-liberation
- Key existiert:
python -m app.cli list-api-keys - Key nicht widerrufen: Spalte
revoked_atist NULL? - Key nicht abgelaufen: Spalte
expires_atist NULL oder in der Zukunft? - Header korrekt:
X-API-Key: fwwo_xxxx(nichtBearer fwwo_xxxx)
alembic current
alembic historyFalls die Datenbank in einem inkonsistenten Zustand ist:
# Aktuellen Stand erzwingen (Vorsicht!):
alembic stamp headUrsache: FK-Spalte hat falschen Typ (häufig INT statt BIGINT) oder eine andere Tabelle hat noch einen FK auf die zu ändernde Tabelle.
- Alle FK-Spalten auf
fire_dept.idmüssenBIGINTsein. - Vor
ALTER TABLEauf einer referenzierten Tabelle müssen alle eingehenden FKs perINFORMATION_SCHEMAgefunden und entfernt werden. - Referenz: MIGRATION_RUNBOOK.md
Ursache: Migration wurde nach einem Teilfehler erneut ausgeführt, ADD COLUMN scheitert weil die Spalte schon existiert.
Lösung: Neue Migrationen verwenden ADD COLUMN IF NOT EXISTS (MariaDB 10.11+). Bei älteren Migrationen: Spalten-Existenz über INFORMATION_SCHEMA.COLUMNS prüfen, dann bedingt anlegen.
- VAPID-Keys in
.envkorrekt gesetzt? -
APP_BASE_URLkorrekt (wird als VAPID-Subject verwendet)? - Browser hat Permission erteilt?
- Logs:
journalctl -u einsatzleiter | grep -i push
WeasyPrint kann für große PDFs viel RAM brauchen. Falls der Server unter Last gerät:
- Anzahl Gunicorn-Worker reduzieren (
-w 1) - PDF-Generierung in einen separaten Queue-Worker auslagern (zukünftiges Feature)
Firewall-Regel hinzufügen:
sudo ufw deny 8092/tcpNur NGINX (80/443) soll von außen erreichbar sein.
Einsatz führen
Im Einsatz
Einsatzbegleitend
Verwaltung & Planung
Auswertung
Großschadenslage
Verwaltung
Systemadministration
- Überblick und Inbetriebnahme
- Systemdiagnose
- Datenbank: Snapshot-Isolation
- System-Admin-MCP
- Zwei-Faktor-Authentifizierung
Mehr