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

Richte auf deinem Synology NAS Firefly III als persönlichen Finanzmanager mit PostgreSQL, HTTPS und deutschem Locale ein. Inklusive doppelter Buchführung, CSV-Import und Kontoabgleich.

Firefly III Installation auf Synology NAS mit Docker, doppelter Buchführung und sicherer persönlicher Finanzverwaltung im eigenen Netzwerk

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 klassischem Haushaltsbuchkeeping 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, bekommt hiermit ein passendes ergänzendes Modul für 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

Öffne im DSM die File Station und lege 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 du die Dateien später direkt im DSM-Dateisystem siehst, sicherst und backupst.

Wechsle in den Container Manager und prüfe, ob ein eigenes Bridge-Netzwerk für das Projekt angelegt werden kann. Der offizielle Stack legt das Netzwerk firefly_iii im Compose-File selbst an; du musst also keine externe Bridge manuell erstellen. Achte darauf, dass auf deinem Synology-NAS keine andere Anwendung den Host-Port 6182 blockiert. Unter Systemsteuerung → Sicherheit → Firewall kannst du den Port für dein internes Netzwerk freigeben, musst ihn aber nicht zwingend aus dem Internet erreichbar machen.

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. Deshalb darfst du nicht einfach openssl rand -base64 32 nehmen, denn Base64 produziert genau diese problematischen Zeichen.

Verbinde dich per SSH mit deinem NAS oder öffne im DSM die Systemsteuerung → Aufgabenplaner und führe als root folgenden Befehl aus:

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

Speichere die Ausgabe in einem Passwort-Manager oder einer temporären Textdatei. Für den späteren Cron-Endpunkt benötigst du 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. Lege beide Dateien im Container-Manager-Projektverzeichnis an, also unter /volume1/docker/firefly. Ersetze die Platzhalter DEIN_APP_KEY und DEIN_CRON_TOKEN durch die zuvor generierten Werte. Das Datenbankpasswort muss in beiden Dateien identisch sein.

Inhalt der .env:

APP_KEY=DEIN_APP_KEY
APP_URL=https://firefly.deinname.synology.me
TZ=Europe/Berlin
DEFAULT_LANGUAGE=de_DE
FALLBACK_LOCALE=de_DE

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

STATIC_CRON_TOKEN=DEIN_CRON_TOKEN
SITE_OWNER=deine@email.de
MAIL_MAILER=log
MAIL_FROM=firefly@deine-email.de

Inhalt der .db.env:

POSTGRES_USER=firefly
POSTGRES_PASSWORD=dein_sicheres_db_passwort
POSTGRES_DB=firefly

Die Zeile FALLBACK_LOCALE=de_DE ist entscheidend, wenn du später CSV-Dateien deutscher Banken importieren möchtest. Ohne diesen Wert werden Komma-Dezimalzahlen wie 1.234,56 falsch geparst. E-Mail ist optional; mit MAIL_MAILER=log landen Benachrichtigungen lokal im Container und du musst keinen SMTP-Server konfigurieren.

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

Erstelle im Container Manager ein neues Projekt namens firefly und füge folgende compose.yaml ein. Wir verwenden PostgreSQL 16 und den offiziellen fireflyiii/core-Container. Für produktive Setups solltest du statt :latest einen konkreten Version-Tag wie fireflyiii/core:version-6.6.x pinnen, um unbeabsichtigte Upgrades zu vermeiden.

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

Starte 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. Warte ab, bis der Log 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://deine-synology-ip:6182 zeigt die Login-Maske.

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

Rufe Firefly III im Browser über http://deine-synology-ip:6182 auf. Klicke auf „Registrieren“ und erstelle das erste Benutzerkonto. Dieser erste registrierte Benutzer wird automatisch zum Administrator, was du an den zusätzlichen Menüpunkten „Verwaltung“ und „Optionen“ erkennst. Melde dich anschließend an.

Überprüfe die grundlegenden Einstellungen unter Optionen → Einstellungen. Die Standardsprache sollte auf Deutsch stehen, die Zeitzone auf Europe/Berlin und die Währung auf Euro. Falls noch nicht automatisch gesetzt, trage Euro als Standardwährung ein. Richte unter Systemsteuerung → Sicherheit → Anmeldeportal → DSM bei Bedarf später den Reverse-Proxy ein, um extern über HTTPS zuzugreifen.

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 belastet ein Konto und erfasst gleichzeitig das Gegenkonto als Kategorie, Budget oder Empfänger. Damit lässt sich später jeder Bank-Stand mit dem System abgleichen. Gehe zu Konten → Vermögenswertkonten und lege ein Girokonto an. Trage als Guthaben den aktuellen Kontostand ein, damit die Bilanz stimmt.

Anschließend legst du unter Budgets ein erstes Monatsbudget an, zum Beispiel „Lebensmittel“. Erstelle dann eine Testtransaktion über Transaktionen → Neue Abhebung. Wähle als Quellkonto das Girokonto, als Zielkategorie das Budget „Lebensmittel“ und einen Betrag wie 45,30 Euro. Speichere die Transaktion und öffne danach Konten → Vermögenswertkonten → Girokonto. Dort findest du den Button Abgleichen. Vergleiche den angezeigten Firefly-III-Saldo mit dem tatsächlichen Bank-Stand. Bei Gleichheit klicke auf „Abgleich bestätigen“.

Für den Import deutscher Bank-CSV kannst du später optional den fireflyiii/data-importer ergänzen. Wichtig ist, dass in dessen Env-Datei ebenfalls FALLBACK_LOCALE=de_DE gesetzt ist, 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)

Ein Finanztool solltest du nicht unverschlüsselt über HTTP betreiben. Öffne Systemsteuerung → Anmeldeportal → Erweiterter Reverse Proxy und erstelle eine neue Regel. Als Ziel gibst du http://localhost:6182 ein, als Quelle https://firefly.deinname.synology.me:443. Verwende dafür ein gültiges Let's-Encrypt- oder synology.me-Wildcard-Zertifikat. Firefly III benötigt für den Standardbetrieb keine WebSocket-Weiterleitung, diese kannst du weglassen.

Passe danach die APP_URL in der .env auf deine HTTPS-Adresse an und starte den App-Container neu. Achte darauf, dass der Container-Manager die .env beim Neustart neu einliest. Teste abschließend, ob der externe Zugriff über HTTPS funktioniert und ob du dich erneut anmelden kannst.

Verifizieren: Die URL https://firefly.deinname.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 .env ergänzen und Container neu starten

Häufige Fragen

Muss ich wirklich PostgreSQL verwenden oder geht MariaDB?

Offiziell ist MariaDB der Standard-Stack, PostgreSQL wird aber voll unterstützt und ist für diese Anleitung vorgeschrieben. Wer bereits MariaDB im Synology-Ökosystem bevorzugt, findet dafür separate Tutorials, sollte aber wissen, dass das offizielle Beispiel mit MariaDB leicht abweicht.

Wie lange dauert der erste Start?

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

Brauche ich Redis?

Nein. Der offizielle Standard-Stack funktioniert ohne Redis; Cache und Sessions laufen per Default auf Datei-Basis. Redis ist nur optional für größere Installationen mit vielen Benutzern.

Wie importiere ich deutsche Bank-CSV?

Verwende den separaten fireflyiii/data-importer-Container und setze FALLBACK_LOCALE=de_DE. Lege 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 ist eine lohnende Ergänzung für alle, die ihre Finanzen selbst hosten und dabei sauber nach doppelter Buchführung arbeiten möchten. Die Installation ist mit Container Manager und einem ordentlich gepflegten Compose-Stack nachvollziehbar. Der einzige kritische Punkt ist der APP_KEY: 32 Zeichen, alphanumerisch, keine Sonderzeichen. Wer das beachtet, PostgreSQL als Datenbank wählt und FALLBACK_LOCALE=de_DE setzt, bekommt ein stabiles Finanztool, das sich später auch per CSV mit deutschen Bankdaten füttern lässt. Kombiniert mit Kimai für Zeiterfassung oder Odoo für ERP und CRM entsteht so ein echtes Selfhosting-Ökosystem für KMU.

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