1

Voraussetzungen

FeuerwehrHub läuft auf jedem Linux-Server mit Docker. Empfohlen wird Ubuntu 22.04 oder neuer — aber Debian, Rocky Linux und andere Distributionen funktionieren genauso.

Minimale Systemanforderungen

  • Linux-Server (Ubuntu 22.04+ empfohlen)
  • 1 CPU-Kern, 1 GB RAM (2 GB+ empfohlen)
  • 10 GB freier Speicherplatz
  • Internetzugang für den ersten Download
  • SSH-Zugang oder direkter Konsolenzugang
FeuerwehrHub läuft problemlos auf einem günstigen VPS (z.B. Strato, Hetzner, Netcup) oder auf einem alten PC/NAS im Feuerwehrhaus-Netzwerk.
Windows wird nicht direkt unterstützt. Auf Windows-Servern kann Docker Desktop oder WSL2 genutzt werden, aber das ist nicht der empfohlene Weg.
2

Docker installieren

Falls Docker bereits installiert ist, kannst du diesen Schritt überspringen. Prüfen mit docker --version.

Docker & Docker Compose auf Ubuntu/Debian

Das offizielle Installationsskript von Docker ist der einfachste Weg:

bash — Docker installieren (Ubuntu/Debian)
# Docker-Installationsskript herunterladen und ausführen
curl -fsSL https://get.docker.com | sh

# Aktuellen Benutzer zur docker-Gruppe hinzufügen (kein sudo mehr nötig)
sudo usermod -aG docker $USER

# Neu einloggen damit die Gruppe aktiv wird, dann prüfen:
docker --version
docker compose version
Docker Compose ist seit Docker Engine 20.10 bereits enthalten — ein separates docker-compose Paket wird nicht mehr benötigt.

Docker auf anderen Distributionen

Für Fedora, Rocky Linux, RHEL und weitere Distributionen: docs.docker.com/engine/install

3

FeuerwehrHub installieren

Repository klonen, Konfiguration anpassen und starten. Wähle den passenden Modus:

PostgreSQL startet automatisch als eigener Container — der einfachste Weg für Einsteiger.

bash — Standalone (PostgreSQL inklusive)
# Repository klonen
git clone https://github.com/xPatrick096/FeuerwehrHub.git
cd FeuerwehrHub

# Konfigurationsdatei aus Vorlage erstellen
cp .env.example .env

# Nur diese drei Werte in .env anpassen:
DB_PASSWORD=sicheres-passwort
JWT_SECRET=$(openssl rand -hex 64)
FF_NAME=Freiwillige Feuerwehr Musterstadt

# Starten (PostgreSQL + FeuerwehrHub)
docker compose --profile standalone up -d

Konfiguration — alle Variablen

.env — vollständige Referenz
# ── Datenbank ──────────────────────────────────────────
DB_HOST=localhost          # bei Standalone: localhost
DB_PORT=5432
DB_NAME=feuerwehrhub
DB_USER=feuerwehrhub_user
DB_PASSWORD=sicheres-passwort

# ── Anwendung ──────────────────────────────────────────
APP_PORT=8080               # Port unter dem die App erreichbar ist
JWT_SECRET=...              # openssl rand -hex 64
FF_NAME=Freiwillige Feuerwehr Musterstadt
FRONTEND_URL=http://192.168.1.10:8080  # URL des Frontends (für CORS)

# ── Sicherheit ─────────────────────────────────────────
LOGIN_MAX_ATTEMPTS=5        # Fehlversuche bis Account-Sperre
LOCKOUT_MINUTES=15          # Sperrdauer in Minuten
Die .env-Datei enthält sensible Daten (Passwörter, JWT-Secret). Niemals einchecken oder öffentlich zugänglich machen.
4

Erster Start & Setup

Nach dem Start ist FeuerwehrHub unter http://DEINE-IP:8080 erreichbar. Beim ersten Aufruf startet automatisch der Einrichtungsassistent.

Setup-Assistent

  • Admin-Account anlegen (Benutzername + sicheres Passwort wählen)
  • Feuerwehrname bestätigen (aus .env vorausgefüllt)
  • Fertig — du landest im Dashboard

Erste Schritte nach dem Setup

  • Im Admin-Panel gewünschte Module aktivieren (Lager, Personal, Fahrzeuge)
  • Rollen prüfen und bei Bedarf anpassen
  • Benutzer für die Kameraden anlegen und Rollen zuweisen
  • Optional: 2-Faktor-Authentifizierung (TOTP) für den Admin-Account einrichten
Datenbankmigrationen laufen automatisch beim Start durch — du musst dich um nichts kümmern. Auch bei Updates werden neue Migrationen automatisch eingespielt.

Container-Status prüfen

bash
# Status der laufenden Container
docker compose ps

# Logs anzeigen (live)
docker compose logs -f feuerwehrhub
5

Reverse Proxy & HTTPS

Für den Zugriff über eine eigene Domain mit HTTPS empfehlen wir nginx Proxy Manager — eine grafische Oberfläche für nginx mit automatischen Let's Encrypt Zertifikaten.

Option A — nginx Proxy Manager (empfohlen)

  • nginx Proxy Manager per Docker Compose installieren
  • Im Web-UI: Proxy Host anlegen → Domain eintragen, Forward zu feuerwehrhub:8080
  • SSL-Tab: "Request a new SSL Certificate" + "Force SSL" aktivieren
  • Let's Encrypt Zertifikat wird automatisch ausgestellt und erneuert
nginx Proxy Manager läuft ideal auf demselben Server. Port 80 und 443 müssen am Router/in der Firewall nach außen freigegeben sein, damit Let's Encrypt funktioniert.

Option B — Caddy (minimalistisch)

Caddy übernimmt HTTPS vollautomatisch — keine Konfiguration für Zertifikate nötig:

Caddyfile
feuerwehrhub.deine-domain.de {
    reverse_proxy localhost:8080
}

FRONTEND_URL anpassen

Nach dem Einrichten eines Reverse Proxys muss FRONTEND_URL in der .env auf die neue Domain gesetzt werden:

.env
FRONTEND_URL=https://feuerwehrhub.deine-domain.de

Danach Container neu starten: docker compose up -d

6

Updates einspielen

Neue Versionen werden als GitHub Releases veröffentlicht. Das Update ist in drei Befehlen erledigt:

bash — Update auf neueste Version
# Im FeuerwehrHub-Verzeichnis:
git pull
docker compose pull
docker compose up -d
Datenbankmigrationen laufen beim Neustart automatisch durch — kein manueller Eingriff nötig. Die bestehenden Daten bleiben vollständig erhalten.
Empfehlung: Im GitHub-Repo auf Watch → Custom → Releases klicken, um per E-Mail über neue Versionen informiert zu werden.
7

Backup

Alle Daten liegen in der PostgreSQL-Datenbank. Ein regelmäßiges Backup mit pg_dump ist dringend empfohlen.

Manuelles Backup

bash — Backup erstellen
# Standalone-Modus (PostgreSQL im Container):
docker exec feuerwehrhub-postgres-1 \
  pg_dump -U feuerwehrhub feuerwehrhub \
  > backup_$(date +%F).sql

# Externe Datenbank:
pg_dump -h DB_HOST -U DB_USER DB_NAME > backup_$(date +%F).sql

Automatisches tägliches Backup per Cronjob

bash — Cronjob einrichten
# crontab -e öffnen und folgende Zeile hinzufügen:
# Täglich um 03:00 Uhr Backup erstellen (letzten 7 Tage behalten)
0 3 * * * docker exec feuerwehrhub-postgres-1 pg_dump -U feuerwehrhub feuerwehrhub > /backups/feuerwehrhub_$(date +\%F).sql && find /backups -name "feuerwehrhub_*.sql" -mtime +7 -delete
Backups sollten auf einem separaten Speichermedium aufbewahrt werden — nicht nur auf demselben Server. Im Falle eines Hardware-Defekts gehen sonst Backups und Daten gleichzeitig verloren.