Repository navigation
Installation Docker
Docker Compose startet die App mit MariaDB 12.3 und Redis 7. Ein vorhandenes
Datenverzeichnis einer älteren Version (z. B. 10.11) aktualisiert der Container beim
ersten Start selbst (MARIADB_AUTO_UPGRADE); vorher ein Backup ziehen. Redis ist wegen der
zwei Gunicorn-Worker verpflichtend. Ein Reverse-Proxy mit TLS bleibt erforderlich;
Compose ersetzt NGINX nicht.
GitHub Actions baut das App-Image automatisch bei jedem Push auf main und bei
jedem Versions-Tag (.github/workflows/docker-build.yml) und veröffentlicht es nach
ghcr.io/battloxx/einsatzcockpit. Standardmäßig wird dieses fertige Image gepullt
(schneller, kein lokaler Build nötig); wer eigene Änderungen am Dockerfile oder Code
testen will, baut stattdessen lokal — beide Wege stehen unter Schritt 3.
Docker Engine mit Compose-Plugin und Git müssen installiert sein. Repository klonen:
git clone https://github.com/BattloXX/Einsatzcockpit.git
cd Einsatzcockpitcp deploy/docker.env.example .env
nano .envAlle leeren Geheimnisse sicher befüllen. Besonders wichtig sind
MARIADB_ROOT_PASSWORD, MARIADB_PASSWORD, SECRET_KEY, FERNET_KEY und
BOOTSTRAP_ADMIN_PASSWORD. Das Passwort in DATABASE_URL muss mit
MARIADB_PASSWORD übereinstimmen; Sonderzeichen müssen URL-kodiert werden.
Im Compose-Netz werden Service-Namen statt 127.0.0.1 verwendet:
DATABASE_URL=mysql+pymysql://einsatzleiter:PASSWORT@db:3306/einsatzleiter
REDIS_URL=redis://redis:6379/0MEDIA_STORAGE_DIR, OBJEKT_MEDIA_DIR, NACHSCHLAGEWERK_DATA_DIR und
BACKUP_DIR liegen standardmäßig unter app_storage/. Das benannte Volume
app_storage bindet dieses Verzeichnis persistent nach /app/app_storage ein.
Option A — vorgebautes Image von GHCR (Standard, empfohlen):
docker compose pull
docker compose up -d
docker compose ps
docker compose logs -f appIMAGE_TAG in der .env wählt die Version (Default latest = letzter Stand von
main); für ein festes Release z. B. IMAGE_TAG=v2026.08.17 setzen.
Option B — selbst bauen (für lokale Änderungen am Dockerfile/Code):
docker compose up -d --build
docker compose ps
docker compose logs -f appDer Entrypoint führt bei jedem App-Start automatisch alembic upgrade head aus.
Seed-Daten bleiben bewusst ein manueller Schritt nach dem ersten Start:
docker compose exec app python -m app.seed_dataWenn kein Bootstrap-Admin konfiguriert wurde, einen Admin manuell anlegen:
docker compose exec app python -m app.cli create-admin \
--username admin --password 'SICHERES-PASSWORT'Der Host-Port ist aus Sicherheitsgründen nur als 127.0.0.1:8092 veröffentlicht.
Port 8092 nicht in der Firewall freigeben. NGINX auf demselben Host kann an
http://127.0.0.1:8092 weiterleiten; WebSocket-Header und Timeouts stehen unter
NGINX-Reverse-Proxy.
TLS wird außerhalb von Compose terminiert, etwa mit Certbot auf dem Host oder einem
vorgelagerten Reverse-Proxy-Container. TRUSTED_PROXY_IPS muss zur tatsächlichen
Proxy-Adresse passen; niemals beliebige Quellnetze eintragen.
Mit dem GHCR-Image (Option A):
docker compose pull
docker compose up -d
docker compose psBei lokalem Build (Option B):
git pull origin main
docker compose up -d --build
docker compose psMigrationen laufen beim Neustart automatisch (Entrypoint führt alembic upgrade head
aus), in beiden Fällen.
Vor Updates und regelmäßig im Betrieb Datenbank und Medien getrennt sichern:
docker compose exec -T db sh -c \
'mariadb-dump -u"$MARIADB_USER" -p"$MARIADB_PASSWORD" "$MARIADB_DATABASE"' \
> einsatzcockpit.sqlZusätzlich das Volume app_storage sichern. Ein bloßes Kopieren des Datenbank-Volumes
im laufenden Betrieb ist kein konsistenter Dump. Aufbewahrung, Off-Site-Kopie und
Restore-Proben beschreibt Backup & Disaster-Recovery.
Nächster Schritt: Erst-Setup
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