Deployn

Actual Budget selbst hosten: Haushaltsbuch mit Docker und Caddy

Actual Budget auf dem eigenen Server installieren und nutzen: Docker, HTTPS mit Caddy, Konten, Umschlagmethode, Berichte, Regeln und Import Schritt für Schritt.

Veröffentlicht am
Actual Budget selbst hosten: Haushaltsbuch mit Docker und Caddy hero image
Inhalt
Getestet mit
Actual Budget 26.11.0Caddy 2.11Docker 29.9Ubuntu 26.04
Zuletzt geprüft am

Actual Budget ist eine kostenlose Open-Source-App für dein Haushaltsbuch. Du trägst Einnahmen und Ausgaben ein, verteilst dein Geld auf Kategorien und siehst jederzeit, was du in diesem Monat noch ausgeben kannst. Die App läuft auf deinem eigenen Server, deine Finanzdaten bleiben also bei dir.

In diesem Beitrag installiere ich Actual Budget mit Docker, sichere es mit Caddy per HTTPS ab und zeige dir danach die wichtigsten Funktionen.

Was ist Actual Budget?

Actual Budget ist eine “local-first”-App: Dein Budget liegt als vollständige Kopie in deinem Browser und zusätzlich auf deinem Server. Änderungen laufen im Hintergrund zum Server, die App bleibt auch bei schlechter Verbindung schnell.

Das Konzept dahinter heißt Umschlagmethode (Envelope Budgeting): Jeden Euro, den du einnimmst, weist du einer Kategorie zu, zum Beispiel Lebensmittel, Miete oder Sparen. Ausgaben ziehst du von der jeweiligen Kategorie ab. Ist ein “Umschlag” leer, ist das Geld für diese Kategorie aufgebraucht, und du entscheidest bewusst, ob du es aus einer anderen Kategorie umschichtest.

Das kann Actual Budget:

  • Mehrere Konten verwalten, auch Konten außerhalb des Budgets wie Depot oder Immobilie.
  • Transaktionen manuell eintragen oder aus Bankdateien importieren.
  • Regeln anlegen, die Transaktionen automatisch kategorisieren.
  • Wiederkehrende Zahlungen als Terminplan verwalten.
  • Berichte mit Reinvermögen, Cashflow und Ausgaben nach Kategorie erstellen.
  • Auf mehreren Geräten synchron bleiben, optional mit Ende-zu-Ende-Verschlüsselung.

Voraussetzungen

  1. Einen Server: Ich nutze einen kleinen VPS bei Hetzner mit Ubuntu 26.04. Actual Budget braucht wenig Ressourcen, ein kleiner Server genügt.
  2. Eine Domain: Sie muss per A-Record auf die IP-Adresse deines Servers zeigen, zum Beispiel {{domain}}. Warum du HTTPS brauchst, erkläre ich weiter unten.
  3. Offene Ports: 80 und 443 müssen erreichbar sein, damit Caddy das Zertifikat bekommt.

Docker installieren

Verbinde dich per SSH mit dem Server und installiere Docker mit dem offiziellen Skript:

Terminalbash
curl -fsSL https://get.docker.com | sudo sh

Prüfe danach die Installation:

Terminalbash
docker --version

Actual Budget mit Docker Compose starten

Erstelle ein Verzeichnis für Actual Budget:

Terminalbash
mkdir ~/actual
cd ~/actual

Lege die compose.yaml an:

Terminalbash
nano compose.yaml
yaml
services:
    actual_server:
        image: actualbudget/actual-server:latest
        container_name: actual_server
        restart: unless-stopped
        volumes:
            - ./data:/data

    caddy:
        image: caddy:2
        container_name: caddy
        restart: unless-stopped
        ports:
            - "80:80"
            - "443:443"
        volumes:
            - ./Caddyfile:/etc/caddy/Caddyfile
            - caddy_data:/data
            - caddy_config:/config

volumes:
    caddy_data:
    caddy_config:

Der Ordner ./data enthält dein komplettes Budget. Der Actual-Container veröffentlicht keinen eigenen Port. Erreichbar ist er nur über Caddy.

Lege die Caddyfile an:

Terminalbash
nano Caddyfile
{{domain}} {
    reverse_proxy actual_server:5006
}

Caddy holt sich beim ersten Start automatisch ein Zertifikat von Let’s Encrypt. Starte beide Container:

Terminalbash
sudo docker compose up -d

Mit sudo docker compose ps prüfst du, ob beide Container laufen. Ob das Zertifikat geklappt hat, siehst du in den Caddy-Logs:

Terminalbash
sudo docker compose logs caddy | grep "certificate obtained"

Warum Actual Budget HTTPS braucht

Ruft man Actual Budget über eine reine IP-Adresse mit http:// auf, startet die App nicht. Stattdessen erscheint diese Meldung:

Fehlermeldung “Schwerwiegender Fehler” wegen SharedArrayBuffer bei Zugriff über HTTP

Actual benötigt SharedArrayBuffer, und Browser stellen diese Funktion nur in einem sicheren Kontext bereit, also über HTTPS oder über localhost. Deshalb sitzt Caddy bereits in der compose.yaml. Rufst du deine Domain mit https:// auf, funktioniert die App.

Server-Passwort festlegen

Öffne https://{{domain}} im Browser. Beim ersten Aufruf fragt Actual nach einem Passwort für deinen Server. Vergib ein starkes Passwort und bestätige es. Danach meldest du dich mit diesem Passwort an.

Auf der Startseite wählst du “Start budgeting”. Mit “Try the demo” lädst du ein Beispielbudget mit Daten. Das Demo-Budget liegt nur lokal in deinem Browser und wird nicht auf den Server synchronisiert. Zum Ausprobieren der Berichte ist es praktisch, für deine echten Finanzen legst du aber eine neue Datei an.

In der Dateiliste klickst du auf “Neue Datei erstellen”:

Dateiliste mit dem lokalen Demo-Budget und dem Button “Neue Datei erstellen”

Actual legt ein leeres Budget mit Standardkategorien an. Die Kategorien kannst du später umbenennen, löschen oder erweitern.

Das erste Konto anlegen

Unten links in der Seitenleiste klickst du auf “Konto hinzufügen”.

Dialog “Konto hinzufügen” mit den Optionen für lokales Konto und Bank-Synchronisierung

Hier hast du zwei Wege:

  • Ein lokales Konto erstellen: Du trägst Transaktionen selbst ein oder importierst Dateien deiner Bank.
  • Bank-Synchronisation einrichten: Actual kann Konten über externe Anbieter anbinden. Das erfordert ein Konto bei dem jeweiligen Anbieter und ist nicht in jedem Land gleich gut verfügbar.

Ich nehme für den Einstieg das lokale Konto. Vergib einen Namen, trage den aktuellen Kontostand ein und klicke auf “Erstellen”.

Formular “Lokales Konto erstellen” mit Name Girokonto und Saldo 2500

Die Option “Außerhalb des Budgets” brauchst du für Konten, die nicht zu deinem Ausgabenbudget gehören, etwa ein Depot oder eine Immobilie. Sie zählen dann zum Reinvermögen, aber nicht zu dem Geld, das du verteilen kannst. Das lässt sich später nicht mehr ändern.

Der Kontostand erscheint als erste Buchung “Anfangssaldo” in der Kategorie “Anfangssalden”:

Girokonto mit der Anfangsbuchung über 2.500 Euro

Transaktionen eintragen

Im Konto klickst du oben auf “Erstellen”. Es erscheint eine neue Zeile. Mit der Tab-Taste springst du von Feld zu Feld: Datum, Zahlungsempfänger, Notizen, Kategorie, Auszahlung oder Einzahlung. Neue Zahlungsempfänger legt Actual beim Tippen an. Mit “Hinzufügen” oder der Eingabetaste speicherst du die Buchung.

Neue Transaktion mit Zahlungsempfänger Rewe, Kategorie Food und Auszahlung 42,50

Der Kontostand sinkt sofort, und die Ausgabe landet in der Kategorie “Food”. Verteilt ein Einkauf sich auf mehrere Kategorien, teilst du die Buchung auf (Split) und gibst jedem Teil eine eigene Kategorie.

Geld auf Kategorien verteilen

Jetzt kommt der Kern von Actual Budget. Auf der Seite “Budget” siehst du oben den Betrag “Zu budgetieren”. Das ist Geld, das du eingenommen, aber noch keiner Kategorie zugewiesen hast.

In der Spalte “Budgetiert” klickst du in die Zelle einer Kategorie und trägst einen Betrag ein. Ich habe 400 für Lebensmittel, 900 für Rechnungen und 500 fürs Sparen vergeben:

Budgetseite mit verteilten Beträgen und 700 Euro, die noch zu budgetieren sind

Die Spalten bedeuten:

  • Budgetiert: Was du dieser Kategorie in diesem Monat zugewiesen hast.
  • Ausgegeben: Was du tatsächlich ausgegeben hast.
  • Saldo: Was in der Kategorie noch übrig ist. Rote Werte zeigen Überschreitungen.

Ziel ist, dass “Zu budgetieren” auf 0 steht. Dann hat jeder Euro einen Zweck. Übrig gebliebene Beträge einer Kategorie werden in den nächsten Monat mitgenommen. Bei einer Überschreitung klickst du auf den roten Saldo und schichtest Geld aus einer anderen Kategorie um.

Berichte

Unter “Berichte” findest du ein Dashboard mit Widgets: Einnahmen und Ausgaben im Jahresverlauf, Reinvermögen, Cashflow, Vergleich mit dem Vormonat und einen Transaktionskalender. Über “Neues Widget hinzufügen” und “Dashboard bearbeiten” baust du es nach deinen Wünschen um.

Berichte-Dashboard mit Reinvermögen, Cashflow und Transaktionskalender

Der Screenshot stammt aus dem Demo-Budget, weil mein frisches Budget noch keine Daten hat.

Terminpläne für wiederkehrende Zahlungen

Miete, Internet oder Versicherungen buchst du nicht jeden Monat von Hand. Unter “Terminpläne” legst du sie einmal an. Actual zeigt dir dann, ob eine Zahlung bevorsteht, fällig oder verpasst ist, und bucht sie auf Wunsch automatisch.

Terminpläne mit Status verpasst, fällig, bevorstehend und geplant

Über “Neuen Terminplan hinzufügen” legst du Name, Zahlungsempfänger, Konto, Betrag und Rhythmus fest.

Regeln zur automatischen Kategorisierung

Unter “Einstellungen” -> “Regeln” legst du fest, was Actual bei neuen Transaktionen automatisch tun soll, etwa einen Zahlungsempfänger immer einer Kategorie zuordnen. Das spart beim Import von Bankdaten viel Handarbeit.

Regeln in den Einstellungen mit Bedingungen und Aktionen

Eine Regel besteht aus Bedingungen (“Wenn der Zahlungsempfänger Rewe ist”) und Aktionen (“setze die Kategorie auf Food”). Terminpläne erzeugen übrigens selbst Regeln, die du in der Liste siehst.

Transaktionen importieren

Im Konto klickst du auf “Import”. Actual liest Dateien in diesen Formaten:

  • OFX/QFX: Die beste Wahl, wenn deine Bank es anbietet. Die Dateien enthalten eindeutige Kennungen, Dubletten erkennt Actual dadurch zuverlässig.
  • QIF
  • CSV: Du ordnest die Spalten der Datei zu Datum, Zahlungsempfänger, Betrag und so weiter zu und prüfst das Datumsformat in der Vorschau.
  • CAMT

Importierst du Transaktionen doppelt, sucht Actual nach Buchungen mit ähnlichem Datum, gleichem Betrag und ähnlichem Zahlungsempfänger und führt sie zusammen.

Optional: Ende-zu-Ende-Verschlüsselung

Unter “Einstellungen” kannst du die Verschlüsselung für die Synchronisation aktivieren. Dein Budget wird dann auf dem Gerät mit einem Schlüssel aus deinem Passwort verschlüsselt, bevor es den Server erreicht. Der Server kann den Inhalt nicht lesen.

Beachte zwei Dinge: Einmal aktiviert, lässt sich die Verschlüsselung nicht mehr abschalten, außer du stellst dein Budget aus einem Backup in einer unverschlüsselten Datei wieder her. Und ohne dein Passwort und ohne lokale Kopie sind die Daten nicht wiederherstellbar.

Backup

Actual speichert alles im Ordner data. Sichere ihn regelmäßig, am besten auf einen anderen Rechner:

Terminalbash
cd ~
sudo tar czf actual-backup.tar.gz actual/data

Zusätzlich kannst du direkt in der App sichern: “Einstellungen” -> “Export data”. Du erhältst eine Datei, die du in einer neuen Installation wieder importieren kannst.

Actual Budget aktualisieren

Terminalbash
cd ~/actual
sudo docker compose pull
sudo docker compose up -d

Die Daten im Ordner data bleiben erhalten. Die aktuelle Version siehst du unter “Einstellungen” -> “General”.

Für wen passt Actual Budget, und was spricht dagegen?

Actual Budget passt, wenn du bewusst planen willst, wofür dein Geld da ist, und deine Daten nicht bei einem Cloud-Anbieter ablegen möchtest. Die Umschlagmethode zwingt dich dazu, Geld aktiv zu verteilen.

Einige Punkte solltest du kennen:

  • Die Umschlagmethode braucht Gewöhnung. Wer nur Ausgaben auswerten will, ist mit einer einfachen Tabelle schneller.
  • Beim Self-Hosting bist du für Updates und Backups selbst verantwortlich.
  • Die Bankanbindung läuft über externe Anbieter und ist nicht für jede Bank verfügbar. Der Dateiimport funktioniert dagegen immer.

Als Alternativen kommen Firefly III infrage, das mehr in Richtung Buchhaltung geht und ebenfalls auf dem eigenen Server läuft.

Fazit

Mit Docker und Caddy läuft Actual Budget in wenigen Minuten auf deinem Server. Die Umschlagmethode braucht etwas Gewöhnung, danach sieht man aber auf einen Blick, wie viel Geld für welchen Zweck noch da ist. Einnahmen und Ausgaben eintragen, Geld verteilen, Berichte ansehen: Mehr brauchst du für den Anfang nicht. Regeln, Terminpläne und Import kommen dazu, wenn du sie brauchst.

Nutzt du schon ein Haushaltsbuch, und welche Funktion fehlt dir dort? Schreib es gerne in die Kommentare.

FAQ

Häufige Fragen

Ist Actual Budget kostenlos?

Ja. Actual Budget ist Open Source und kostenlos. Für das Self-Hosting zahlst du nur für den Server.

Ist Actual Budget sicher?

Deine Daten liegen auf deinem eigenen Server. Über HTTPS ist die Verbindung verschlüsselt, und optional verschlüsselst du dein Budget zusätzlich Ende-zu-Ende. Den Server selbst musst du aktuell halten und sichern.

Warum startet Actual Budget nicht und zeigt einen Fehler zu SharedArrayBuffer?

Du greifst vermutlich über HTTP auf eine IP-Adresse zu. Actual braucht einen sicheren Kontext. Richte einen Reverse Proxy wie Caddy mit einer Domain ein und rufe die App über HTTPS auf. Nur localhost funktioniert auch ohne HTTPS.

Wo speichert Actual Budget meine Daten?

Auf dem Server im Ordner, den du in der compose.yaml nach /data gemountet hast, hier ./data. Zusätzlich hält jedes Gerät, auf dem du die App öffnest, eine lokale Kopie.

Kann ich Actual Budget mit meiner Bank verbinden?

Ja, über Anbieter wie SimpleFIN, GoCardless oder Pluggy.ai. Welcher Anbieter für deine Bank infrage kommt, hängt vom Land ab. Alternativ importierst du Dateien im OFX-, QFX-, QIF-, CSV- oder CAMT-Format.

Was ist die Umschlagmethode?

Du weist jeden eingenommenen Euro einer Kategorie zu, dem sogenannten Umschlag. Ausgaben werden vom Umschlag abgezogen. Ist er leer, ist das Geld für diese Kategorie aufgebraucht.

Wie aktualisiere ich Actual Budget?

Im Ordner mit der compose.yaml führst du sudo docker compose pull und danach sudo docker compose up -d aus. Deine Daten bleiben erhalten.

Wie sichere ich mein Budget?

Kopiere regelmäßig den Ordner data auf einen anderen Rechner und exportiere zusätzlich in der App unter Einstellungen die Daten über Export data.