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,NoNewPrivilegesundReadWritePathskapseln den Prozess. Achten Sie darauf, dass unterReadWritePathsgenau 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- undConnection-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.