Florian Feuerwehrmanagement

Installation mit Docker

Florian lässt sich als Container betreiben. Das ist der empfohlene Weg auf Linux-Servern: Sie trennen die Anwendung sauber vom Host, aktualisieren später durch einen einfachen Image-Wechsel und halten alle dauerhaften Daten in klar benannten Volumes. Diese Seite zeigt den Betrieb per docker run und per Docker Compose.

Hinweis: Florian ist eine self-hosted Anwendung, die auf Ihrem eigenen Server läuft. Der Container enthält die Florian-Instanz Ihrer Wehr — nicht das Kunden-Portal und nicht den Lizenz-Server, die bei uns liegen.

Voraussetzungen

  • Ein Linux-Host mit installiertem Docker (Engine 24 oder neuer) und, falls Sie Compose nutzen möchten, dem Plugin docker compose.
  • Ein Verzeichnis auf dem Host für die persistenten Daten, z. B. /opt/florian.
  • Ihren Lizenzschlüssel aus dem Kunden-Portal (oder eine Trial-Lizenz). Die Aktivierung erfolgt nach dem ersten Start im Browser.
  • Optional, aber empfohlen: einen Reverse-Proxy für TLS (siehe Abschnitt TLS über einen Reverse-Proxy).

Persistente Volumes

Florian schreibt drei Arten von Daten, die einen Container-Neustart oder ein Update überdauern müssen. Binden Sie dafür jeweils ein Verzeichnis vom Host in den Container ein.

Pfad im Container Inhalt Empfohlenes Host-Verzeichnis
/data SQLite-Datenbank, Konfiguration, Lizenz-Aktivierung /opt/florian/data
/backups Automatische Backups (u. a. vor jeder Migration) /opt/florian/backups
/uploads Hochgeladene Dateien: Mitgliederfotos, Dokumente, Anhänge /opt/florian/uploads

Achtung: Ohne diese Volumes gehen bei jedem Entfernen des Containers sämtliche Daten verloren — inklusive der Datenbank und der Lizenz-Aktivierung. Legen Sie die Bind-Mounts an, bevor Sie den Container zum ersten Mal starten.

Legen Sie die Verzeichnisse vorab an:

mkdir -p /opt/florian/{data,backups,uploads}

Betrieb mit docker run

Für einen schnellen Start oder eine einzelne Instanz genügt docker run:

docker run -d \
  --name florian \
  --restart unless-stopped \
  -p 8080:8080 \
  -v /opt/florian/data:/data \
  -v /opt/florian/backups:/backups \
  -v /opt/florian/uploads:/uploads \
  -e FLORIAN_BASE_URL=https://florian.ihre-wehr.de \
  florian:latest

Danach erreichen Sie Florian unter http://SERVER-IP:8080 und schließen die Erstinstallation über den Setup-Assistenten im Browser ab (Administrator-Konto anlegen, Lizenzschlüssel hinterlegen, Aktivierung).

Betrieb mit Docker Compose

Für den dauerhaften Betrieb empfehlen wir Docker Compose — die Konfiguration ist versionierbar und leichter zu warten. Legen Sie eine Datei docker-compose.yml an:

services:
  florian:
    image: florian:latest
    container_name: florian
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - ./data:/data
      - ./backups:/backups
      - ./uploads:/uploads
    environment:
      FLORIAN_BASE_URL: "https://florian.ihre-wehr.de"
      TZ: "Europe/Berlin"

Starten Sie den Container aus dem Verzeichnis der Datei:

docker compose up -d

Logs verfolgen Sie mit docker compose logs -f florian, stoppen können Sie die Instanz mit docker compose down (die Volumes bleiben dabei erhalten).

Umgebungsvariablen

Florian wird über Umgebungsvariablen konfiguriert. Die wichtigsten:

Variable Bedeutung Standard
FLORIAN_BASE_URL Öffentliche URL, unter der Florian erreichbar ist. Wichtig für Links in E-Mails und für die PWA-Installation. (leer)
FLORIAN_PORT Port, auf dem Florian im Container lauscht. 8080
TZ Zeitzone des Containers (Fristen, Dienstbuch, Zeitstempel). UTC
FLORIAN_DATA_DIR Datenverzeichnis im Container. Nur ändern, wenn Sie das Volume-Mapping anpassen. /data
FLORIAN_BACKUP_DIR Backup-Verzeichnis im Container. /backups
FLORIAN_UPLOAD_DIR Upload-Verzeichnis im Container. /uploads

Hinweis: Setzen Sie FLORIAN_BASE_URL auf die Adresse, über die Ihre Mitglieder Florian tatsächlich aufrufen (in der Regel die HTTPS-Adresse hinter Ihrem Reverse-Proxy). Ein falscher Wert führt zu ungültigen Links in Benachrichtigungen.

Ports

Der Container stellt standardmäßig Port 8080 bereit. Über das Port-Mapping (-p HOST:CONTAINER) entscheiden Sie, unter welchem Host-Port Florian erreichbar ist.

  • Direkter Zugriff im lokalen Netz: Ein Mapping wie -p 8080:8080 genügt.
  • Betrieb hinter einem Reverse-Proxy: Binden Sie den Port nur an localhost (-p 127.0.0.1:8080:8080), damit Florian ausschließlich über den Proxy erreichbar ist.

TLS über einen Reverse-Proxy

Der Container selbst terminiert kein HTTPS. Für einen sicheren Zugriff — und für die PWA-Installation auf Mobilgeräten, die HTTPS voraussetzt — stellen Sie einen Reverse-Proxy davor, der das TLS-Zertifikat verwaltet (z. B. über Let's Encrypt) und die Anfragen an Florian weiterreicht.

Beispiel für einen Nginx-Server-Block:

server {
    listen 443 ssl;
    server_name florian.ihre-wehr.de;

    ssl_certificate     /etc/letsencrypt/live/florian.ihre-wehr.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/florian.ihre-wehr.de/privkey.pem;

    location / {
        proxy_pass         http://127.0.0.1:8080;
        proxy_set_header   Host              $host;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
        # WebSocket-/PWA-Verbindungen (Blazor)
        proxy_http_version 1.1;
        proxy_set_header   Upgrade    $http_upgrade;
        proxy_set_header   Connection "upgrade";
    }
}

Achtung: Florian benötigt für die Aktivierung ausgehenden Zugriff auf den Lizenz-Server. Klären Sie einen dauerhaft offline betriebenen Standort vor der Bestellung mit uns.

Updates

Ein Update ist bei Florian ein reiner Image-Wechsel: Sie ziehen das neue Image und starten den Container mit denselben Volumes neu. Die Daten bleiben unangetastet, anstehende Datenbank-Migrationen führt Florian beim Start automatisch aus — und legt davor ein Backup im /backups-Volume an.

Mit Docker Compose:

docker compose pull
docker compose up -d

Mit docker run:

docker pull florian:latest
docker stop florian && docker rm florian
# danach denselben "docker run"-Befehl wie oben erneut ausführen

Hinweis: Updates neuer Versionen setzen ein gültiges Wartungs-Abo voraus. Läuft das Abo aus, arbeitet Ihre installierte Version unverändert weiter — nur neue Updates entfallen, bis Sie das Abo verlängern. Führen Sie Updates idealerweise in einem ruhigen Wartungsfenster durch und prüfen Sie danach, ob die Anwendung wie gewohnt erreichbar ist.

Siehe auch