Florian Feuerwehrmanagement

Installation unter Linux

Florian wird unter Linux als eigenständige, self-contained Binary ausgeliefert — eine .NET-Laufzeit muss nicht separat installiert werden. Diese Seite führt Sie durch das Entpacken, die Einrichtung des Datenverzeichnisses und den dauerhaften Betrieb als systemd-Dienst mit Autostart, Logging und optionalem Reverse-Proxy für TLS.

Voraussetzungen

Prüfen Sie vor der Installation die folgenden Punkte:

Anforderung Empfehlung
Architektur x64 (linux-x64) — verwenden Sie das passende Distributionspaket
Betriebssystem Aktuelle 64-bit-Distribution mit systemd (z. B. Debian, Ubuntu, Rocky Linux)
Rechte root bzw. sudo für Diensteinrichtung; der Dienst selbst läuft unter einem eigenen, unprivilegierten Benutzer
Speicher Ausreichend Platz für Datenbank, Backups und Update-Pakete auf einer persistenten Partition
Netzwerk Ausgehender Zugriff auf den Lizenz-/Update-Server für Aktivierung und Updates

Hinweis: Florian ist ein Single-Prozess mit eingebetteter SQLite-Datenbank. Es wird kein separater Datenbankserver benötigt.

1. Binary entpacken

Legen Sie eine getrennte Ablage für das Programm und für die Daten an. Bewährt hat sich die Trennung von Programmverzeichnis (/opt/florian) und Datenverzeichnis (/var/lib/florian).

# Programmverzeichnis anlegen und Distributionspaket entpacken
sudo mkdir -p /opt/florian
sudo tar -xzf florian-linux-x64.tar.gz -C /opt/florian

# In das Programmverzeichnis wechseln und Inhalt prüfen
ls -l /opt/florian

Nach dem Entpacken finden Sie im Verzeichnis die ausführbare Datei florian sowie die zugehörigen Programmbestandteile.

2. Datenverzeichnis einrichten

Das Datenverzeichnis nimmt Datenbank, Backups, Uploads und die Konfiguration auf. Trennen Sie es bewusst vom Programmverzeichnis, damit Updates das Programm ersetzen können, ohne Ihre Daten zu berühren.

# Datenverzeichnis anlegen
sudo mkdir -p /var/lib/florian

Florian erwartet den Pfad zum Datenverzeichnis über die Umgebungsvariable FLORIAN_DATA_DIR. Diese wird in der systemd-Unit gesetzt (siehe Abschnitt 4).

Achtung: Beziehen Sie das Datenverzeichnis in Ihre regelmäßige Datensicherung ein. Es enthält die einzige Kopie Ihrer Wehr-Daten. Vor jeder Aktualisierung erstellt Florian zwar ein automatisches Backup, ein externes Backup bleibt jedoch unverzichtbar.

3. Dienstbenutzer und Ausführungsrechte

Betreiben Sie Florian nicht als root, sondern unter einem eigenen Systembenutzer ohne Anmelde-Shell. Das begrenzt die Rechte des Prozesses auf das Nötigste.

# Systembenutzer ohne Login anlegen
sudo useradd --system --no-create-home --shell /usr/sbin/nologin florian

# Eigentümer setzen: Programm nur lesbar/ausführbar, Daten beschreibbar
sudo chown -R root:root /opt/florian
sudo chown -R florian:florian /var/lib/florian

# Ausführungsrecht für die Binary setzen
sudo chmod +x /opt/florian/florian

Ein kurzer Vordergrund-Start bestätigt, dass die Binary lauffähig ist. Beenden Sie den Testlauf anschließend mit Strg+C.

sudo -u florian FLORIAN_DATA_DIR=/var/lib/florian /opt/florian/florian

4. systemd-Unit einrichten

Für den dauerhaften Betrieb mit Autostart hinterlegen Sie eine systemd-Unit. Legen Sie dazu die Datei /etc/systemd/system/florian.service an:

[Unit]
Description=Florian Feuerwehrmanagement
Documentation=https://ihre-instanz.example/docs
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=florian
Group=florian
WorkingDirectory=/opt/florian
ExecStart=/opt/florian/florian
Environment=FLORIAN_DATA_DIR=/var/lib/florian
Environment=FLORIAN_HTTP_PORT=5000
Restart=on-failure
RestartSec=5

# Absicherung des Prozesses
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/var/lib/florian

[Install]
WantedBy=multi-user.target

Aktivieren und starten Sie den Dienst anschließend:

# systemd über die neue Unit informieren
sudo systemctl daemon-reload

# Autostart aktivieren und Dienst sofort starten
sudo systemctl enable --now florian.service

# Status prüfen
sudo systemctl status florian.service

Meldet systemctl status den Dienst als active (running), ist die Grundeinrichtung abgeschlossen und Florian startet künftig automatisch beim Systemstart.

Hinweis: Die Direktiven ProtectSystem, NoNewPrivileges und ReadWritePaths kapseln den Prozess. Achten Sie darauf, dass unter ReadWritePaths genau Ihr Datenverzeichnis steht — andernfalls kann Florian seine Datenbank nicht schreiben.

5. Logs einsehen (journalctl)

Da der Dienst über systemd läuft, landen alle Ausgaben im Journal und lassen sich mit journalctl auswerten.

Zweck Befehl
Aktuelle Logs live mitlesen sudo journalctl -u florian.service -f
Logs seit dem letzten Start sudo journalctl -u florian.service -b
Nur Fehlermeldungen sudo journalctl -u florian.service -p err
Logs eines Zeitraums sudo journalctl -u florian.service --since "today"

Prüfen Sie nach dem ersten Start die Logs auf Meldungen zur Lizenzaktivierung und zum gebundenen HTTP-Port.

6. Ports und TLS

Florian bindet sich auf den in FLORIAN_HTTP_PORT konfigurierten Port (im Beispiel 5000). Standardmäßig wird unverschlüsseltes HTTP im lokalen Netz bereitgestellt.

Für den Zugriff im Browser und auf dem Handy sollte die Verbindung verschlüsselt sein. Dafür gibt es zwei übliche Wege:

  • Reverse-Proxy mit TLS (empfohlen): Ein vorgelagerter Webserver terminiert HTTPS und leitet intern an Florian weiter. Das ist die flexibelste Variante und erlaubt automatische Zertifikate.
  • Direkter Betrieb ohne Proxy: Nur sinnvoll in einem abgeschotteten internen Netz. In diesem Fall bleibt der Zugriff auf HTTP beschränkt oder erfolgt über einen VPN-Tunnel.

Achtung: Öffnen Sie den Florian-Port nicht ungeschützt ins Internet. Verwenden Sie eine Firewall und stellen Sie den Zugriff von außen ausschließlich über einen TLS-Reverse-Proxy bereit.

7. Reverse-Proxy einrichten (optional)

Das folgende Beispiel für nginx terminiert HTTPS und reicht die Anfragen an die lokal laufende Florian-Instanz weiter. Passen Sie Servername und Zertifikatspfade an Ihre Umgebung an.

server {
    listen 443 ssl;
    server_name florian.example.de;

    ssl_certificate     /etc/letsencrypt/live/florian.example.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/florian.example.de/privkey.pem;

    location / {
        proxy_pass         http://127.0.0.1:5000;
        proxy_http_version 1.1;

        # Weitergabe von Host und Client-Informationen
        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;

        # Unterstützung für WebSockets (Blazor-PWA)
        proxy_set_header   Upgrade    $http_upgrade;
        proxy_set_header   Connection "upgrade";
    }
}

Hinweis: Florian nutzt als Blazor-PWA WebSocket-Verbindungen. Die Weitergabe der Upgrade- und Connection-Header ist daher erforderlich, damit die Oberfläche zuverlässig funktioniert.

Für automatisch erneuerte Zertifikate lässt sich ein ACME-Client wie Certbot einsetzen. Alternativ übernehmen Proxys wie Caddy oder Traefik die Zertifikatsverwaltung selbstständig.

Nach dem Neuladen der Proxy-Konfiguration erreichen Sie Florian verschlüsselt unter Ihrer Domain:

# Konfiguration testen und übernehmen
sudo nginx -t && sudo systemctl reload nginx

8. Updates

Neue Versionen erhalten Sie bei aktivem Wartungs-Abo. Der Ablauf hängt von Ihrer Auslieferungsart ab (integrierter Updater bzw. Austausch der Binary). Führen Sie eine Aktualisierung stets in einem geplanten Wartungsfenster durch und stellen Sie sicher, dass ein aktuelles Backup des Datenverzeichnisses vorliegt. Vor der Migration erstellt Florian zusätzlich ein automatisches Backup.

Siehe auch