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_URLauf 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:8080genü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.