Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung Synology / NAS 14.06.2026 · 8 min Lesezeit

Firefly III auf dem Synology NAS installieren: persönliche Finanzverwaltung mit doppelter Buchführung

Richten Sie Firefly III auf dem Synology NAS als Finanzverwaltung mit PostgreSQL, HTTPS und deutscher Oberfläche ein. Mit doppelter Buchführung, Budgets, Kontoabgleich und Hinweisen zum CSV-Import.

Geprüft am 29.09.2026 · für firefly-iii 6.7.6

WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Schwarzes NAS mit vier Laufwerksschächten auf einem Holzschreibtisch neben Notizbuch, Taschenrechner und Münzen

Firefly III ist ein selbstgehosteter Finanzmanager, der Buchhaltung nach doppelter Buchführung in einer Weboberfläche verfügbar macht. Für Selbstständige, KMU-Buchhalter und ambitionierte Privatanwender im DACH-Raum ist das Tool interessant, weil es neben dem klassischen Haushaltsbuch auch Kontoabgleich, Budgets, Sparziele und den Import deutscher Bank-CSV unterstützt. Wer bereits Zeiterfassung mit Kimai oder ERP/CRM mit Odoo auf der Synology betreibt, ergänzt damit die Finanzverwaltung.

Voraussetzungen

KomponenteAnforderung
Synology NASx86_64 oder arm64, mindestens 4 GB RAM, besser 8 GB
DSM7.2 oder neuer, Container Manager aktiviert
NetzwerkFreier Host-Port 6182 (oder alternativ 80/443)
ZertifikatGültiges synology.me-Wildcard-Zertifikat oder eigenes Let's-Encrypt-Zertifikat
SpeicherCa. 10 GB freier Platz für Datenbank und Uploads
ZeitCa. 75 Minuten

Schritt 1: Ordnerstruktur und Netzwerk vorbereiten

Öffnen Sie im DSM die File Station und legen Sie unter /volume1/docker den Ordner firefly an. Darin werden zwei Unterordner benötigt: upload für Dateianhänge und db für die PostgreSQL-Daten. Diese Bind-Mounts haben gegenüber named volumes den Vorteil, dass Sie die Dateien direkt im DSM-Dateisystem sehen und mit Hyper Backup sichern können.

Das Netzwerk firefly_iii legt das Compose-File selbst an, eine externe Bridge ist nicht nötig. Prüfen Sie, dass keine andere Anwendung auf dem NAS den Host-Port 6182 belegt. Unter Systemsteuerung → Sicherheit → Firewall geben Sie den Port bei aktiver Firewall für das interne Netz frei; aus dem Internet muss er nicht erreichbar sein.

Verifizieren: In der File Station existieren /volume1/docker/firefly/upload und /volume1/docker/firefly/db. Im Container Manager ist Docker aktiv und der gewünschte Host-Port nicht belegt.

Schritt 2: APP_KEY und Cron-Token generieren

Firefly III basiert auf Laravel und benötigt einen exakt 32 Zeichen langen APP_KEY. Das ist der wichtigste Fallstrick der gesamten Installation: Zeichen wie =, #, / oder + führen zu Fehlern bei Laravel Passport und verhindern den Start. Verwenden Sie deshalb nicht openssl rand -base64 32, denn Base64 erzeugt genau diese Zeichen.

Führen Sie den folgenden Befehl per SSH auf dem NAS (oder auf einem beliebigen Linux- oder macOS-Rechner) aus. Alternativ erzeugen Sie die Zeichenkette mit dem Generator Ihres Passwort-Managers (32 Zeichen, nur Buchstaben und Ziffern):

tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32

Speichern Sie die Ausgabe im Passwort-Manager. Für den Cron-Endpunkt benötigen Sie außerdem ein STATIC_CRON_TOKEN, ebenfalls exakt 32 alphanumerische Zeichen:

tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32

Verifizieren: Beide Zeichenketten sind exakt 32 Zeichen lang und enthalten ausschließlich Buchstaben A-Z, a-z sowie Ziffern 0-9.

Schritt 3: .env und .db.env anlegen

Die offizielle Firefly-III-Dokumentation verwendet zwei separate Env-Dateien: .env für den App- und Cron-Container sowie .db.env für PostgreSQL. Legen Sie beide Dateien im Projektverzeichnis /volume1/docker/firefly an. Ersetzen Sie die Platzhalter IHR_APP_KEY und IHR_CRON_TOKEN durch die zuvor generierten Werte. Das Datenbankpasswort muss in beiden Dateien identisch sein.

Inhalt der .env:

APP_KEY=IHR_APP_KEY
APP_URL=https://firefly.ihrname.synology.me
TZ=Europe/Berlin
DEFAULT_LANGUAGE=de_DE
DEFAULT_LOCALE=equal

DB_CONNECTION=pgsql
DB_HOST=db
DB_PORT=5432
DB_DATABASE=firefly
DB_USERNAME=firefly
DB_PASSWORD=sicheres_db_passwort

STATIC_CRON_TOKEN=IHR_CRON_TOKEN
SITE_OWNER=admin@example.com
MAIL_MAILER=log
MAIL_FROM=firefly@example.com

Inhalt der .db.env:

POSTGRES_USER=firefly
POSTGRES_PASSWORD=sicheres_db_passwort
POSTGRES_DB=firefly

DEFAULT_LANGUAGE=de_DE stellt die Oberfläche auf Deutsch, DEFAULT_LOCALE=equal übernimmt dafür das deutsche Zahlenformat (1.234,56). Die Variable FALLBACK_LOCALE gehört nicht hierher, sondern in die Env-Datei des Data Importers (siehe Schritt 6). E-Mail ist optional: Mit MAIL_MAILER=log landen Benachrichtigungen im Container-Log, ein SMTP-Server ist nicht nötig.

Verifizieren: Beide Env-Dateien liegen im selben Verzeichnis, DB_PASSWORD und POSTGRES_PASSWORD stimmen überein, und APP_KEY sowie STATIC_CRON_TOKEN sind jeweils 32 Zeichen lang.

Schritt 4: Compose-Projekt starten

Erstellen Sie im Container Manager ein neues Projekt namens firefly mit dem Pfad /volume1/docker/firefly und fügen Sie folgende compose.yaml ein. Sie verwendet PostgreSQL 16 und das offizielle Image fireflyiii/core. Schreiben Sie für den produktiven Betrieb statt :latest einen Versions-Tag fest, zum Beispiel fireflyiii/core:version-6.7 (Stand September 2026), damit keine ungeplanten Major-Upgrades erfolgen.

services:
  app:
    image: fireflyiii/core:latest
    hostname: app
    container_name: firefly_iii_core
    restart: unless-stopped
    env_file: .env
    networks:
      - firefly_iii
    ports:
      - "6182:8080"
    volumes:
      - /volume1/docker/firefly/upload:/var/www/html/storage/upload
    depends_on:
      - db

  db:
    image: postgres:16
    hostname: db
    container_name: firefly_iii_db
    restart: unless-stopped
    env_file: .db.env
    networks:
      - firefly_iii
    volumes:
      - /volume1/docker/firefly/db:/var/lib/postgresql/data

  cron:
    image: alpine:latest
    container_name: firefly_iii_cron
    restart: unless-stopped
    env_file: .env
    command: >-
      sh -c "apk add tzdata &&
      (ln -s /usr/share/zoneinfo/$$TZ /etc/localtime || true) &&
      echo '0 3 * * * wget -qO- http://app:8080/api/v1/cron/$$STATIC_CRON_TOKEN;echo' | crontab - &&
      crond -f -L /dev/stdout"
    networks:
      - firefly_iii
    depends_on:
      - app

networks:
  firefly_iii:
    driver: bridge

Starten Sie das Projekt über den Container Manager. Beim ersten Start führt der Firefly-III-Container automatisch Datenbank-Migrationen durch. Das kann drei bis fünf Minuten dauern. Warten Sie, bis das Protokoll des firefly_iii_core-Containers Meldungen wie „Migrations completed“ oder einen erfolgreichen Listener auf Port 8080 zeigt. depends_on wartet nur auf den Start des DB-Containers, nicht auf dessen Bereitschaft; deshalb kann der App-Container beim allerersten Start einmal neu starten, bis PostgreSQL initialisiert ist.

Verifizieren: Alle drei Container laufen im Container Manager grün, und im Log von firefly_iii_core steht, dass die Migrationen abgeschlossen sind. Ein Aufruf von http://NAS-IP:6182 zeigt die Anmeldemaske.

Schritt 5: Erstadmin anlegen und Oberfläche prüfen

Rufen Sie Firefly III im Browser über http://NAS-IP:6182 auf. Klicken Sie auf „Registrieren“ und erstellen Sie das erste Benutzerkonto. Der erste registrierte Benutzer wird automatisch Administrator, erkennbar an den zusätzlichen Menüpunkten „Verwaltung“ und „Optionen“. Melden Sie sich anschließend an.

Prüfen Sie die grundlegenden Einstellungen unter Optionen → Einstellungen. Die Standardsprache sollte auf Deutsch stehen, die Zeitzone auf Europe/Berlin und die Währung auf Euro. Ist Euro noch nicht gesetzt, tragen Sie ihn als Standardwährung ein. Den HTTPS-Zugriff richten Sie in Schritt 7 ein.

Verifizieren: Login funktioniert, im Menü erscheint der Verwaltungsbereich, und als Währung ist Euro mit deutscher Zeitzone hinterlegt.

Schritt 6: Erstes Bankkonto, Budget und Kontoabgleich einrichten

Firefly III arbeitet nach doppelter Buchführung: Jede Transaktion bucht von einem Konto auf ein Gegenkonto, bei Ausgaben auf ein Ausgabenkonto (zum Beispiel den Händler). Budget und Kategorie sind zusätzliche Merkmale der Buchung. Damit lässt sich jeder Kontostand mit der Bank abgleichen. Öffnen Sie Konten → Vermögenswertkonten (eigene Konten) und legen Sie ein Girokonto an. Tragen Sie als Anfangssaldo den aktuellen Kontostand ein.

Legen Sie unter Budgets ein erstes Monatsbudget an, zum Beispiel „Lebensmittel“. Erstellen Sie dann eine Testbuchung über Transaktionen → Neue Abhebung (Ausgabe): Quellkonto das Girokonto, Zielkonto ein Ausgabenkonto wie „Supermarkt“, Budget „Lebensmittel“, Betrag zum Beispiel 45,30. Speichern Sie die Buchung und öffnen Sie das Girokonto. Dort finden Sie die Schaltfläche Abgleichen. Vergleichen Sie den Saldo in Firefly III mit dem Kontostand der Bank und bestätigen Sie den Abgleich bei Übereinstimmung.

Für den Import von Bank-CSV-Dateien ergänzen Sie später den fireflyiii/data-importer. In dessen Env-Datei setzen Sie FALLBACK_LOCALE=de_DE, damit Sparkasse-, Volksbank- oder Comdirect-CSV mit deutschen Kommazahlen korrekt importiert werden.

Verifizieren: Das Girokonto zeigt den korrekten Saldo, das Budget ist um den Testbetrag belastet, und der Kontoabgleich wurde erfolgreich bestätigt.

Schritt 7: Reverse Proxy und HTTPS aktivieren (optional aber empfohlen)

Betreiben Sie ein Finanzwerkzeug nicht unverschlüsselt über HTTP. Öffnen Sie Systemsteuerung → Anmeldeportal → Erweitert → Reverse Proxy und erstellen Sie eine neue Regel: Quelle HTTPS, Hostname firefly.ihrname.synology.me, Port 443; Ziel HTTP, localhost, Port 6182. Weisen Sie unter Sicherheit → Zertifikat ein gültiges Let’s-Encrypt- oder synology.me-Wildcard-Zertifikat zu. Eine WebSocket-Weiterleitung braucht Firefly III nicht.

Tragen Sie danach die HTTPS-Adresse als APP_URL in der .env ein und setzen Sie zusätzlich TRUSTED_PROXIES=**, damit Firefly III die Weiterleitung über den Proxy akzeptiert. Env-Dateien liest der Container nur beim Neuerstellen ein: Stoppen Sie das Projekt im Container Manager und starten Sie es neu (Projekt → Aktion → Erstellen), ein Neustart des Containers allein genügt nicht.

Verifizieren: Die URL https://firefly.ihrname.synology.me ist erreichbar, das Browser-Schloss ist grün, und die Anmeldung über HTTPS funktioniert.

Troubleshooting / Typische Fehler

FehlerUrsacheLösung
Container startet nicht, Passport-FehlerAPP_KEY enthält Sonderzeichen wie = oder /Neuen 32-stelligen alphanumerischen Schlüssel generieren
App-Container bricht beim ersten Start abPostgreSQL ist noch nicht initialisiertKurz warten und App-Container neu starten
Datenbankverbindung schlägt fehlDB_CONNECTION ist mysql statt pgsqlAuf pgsql und Port 5432 korrigieren
Cron-Endpunkt antwortet mit 401STATIC_CRON_TOKEN hat falsche LängeExakt 32 alphanumerische Zeichen verwenden
Uploads werden nicht gespeichertOrdnerberechtigungen im DSM zu restriktivSchreibrechte für den Docker-Benutzer gewähren
Deutsche Beträge werden falsch importiertFALLBACK_LOCALE=de_DE fehltLocale in der .env des Data Importers ergänzen und Container neu erstellen

Häufige Fragen

Muss ich PostgreSQL verwenden oder geht MariaDB?

Das offizielle Compose-Beispiel nutzt MariaDB, PostgreSQL wird vollständig unterstützt und in dieser Anleitung verwendet. Für MariaDB ändern Sie DB_CONNECTION=mysql, DB_PORT=3306, das Image und die Variablen in der .db.env (MYSQL_*).

Wie lange dauert der erste Start?

Rechnen Sie mit drei bis fünf Minuten, bis die Datenbank-Migrationen abgeschlossen sind und die Weboberfläche erreichbar ist.

Brauche ich Redis?

Nein. Der offizielle Stack arbeitet ohne Redis, Cache und Sessions liegen standardmäßig in Dateien. Redis ist nur für größere Installationen mit vielen Benutzern eine Option.

Wie importiere ich deutsche Bank-CSV?

Verwenden Sie den separaten Container fireflyiii/data-importer und setzen Sie dort FALLBACK_LOCALE=de_DE. Legen Sie Regeln für wiederkehrende Spalten wie BIC, Auftraggeber oder Verwendungszweck an, damit Sparkasse- oder Volksbank-CSV automatisch zugeordnet werden.

Was ist der Vorteil der doppelten Buchführung?

Jede Einnahme und Ausgabe wird zweimal erfasst: einmal auf dem Konto und einmal auf dem Gegenkonto. Dadurch lassen sich Kontoabgleich, Plausibilitätskontrollen und Budget-Auswertungen zuverlässig führen.

Fazit

Firefly III auf der Synology eignet sich für alle, die ihre Finanzen selbst hosten und nach doppelter Buchführung arbeiten möchten. Mit Container Manager und einem Compose-Projekt ist die Installation nachvollziehbar. Der kritische Punkt ist der APP_KEY: 32 Zeichen, nur Buchstaben und Ziffern. Für den CSV-Import deutscher Bankdaten setzen Sie im Data Importer FALLBACK_LOCALE=de_DE. Kombiniert mit Kimai für Zeiterfassung oder Odoo für ERP und CRM decken Sie Zeiterfassung, ERP und Finanzen auf eigener Hardware ab.

Weiterführende Anleitungen und Quellen

  1. Kimai auf dem Synology NAS: Zeiterfassung für KMU
  2. Odoo auf dem Synology NAS: ERP und CRM für KMU
  3. Offizielle Firefly-III-Docker-Compose-Datei
  4. Offizielle Firefly-III-.env-Beispieldatei
  5. Firefly-III-Docker-Installationsanleitung
  6. Firefly-III-CSV-Import-Tutorial
  7. Marius Hosting – Referenzanleitung für Synology