Kostenlose Buchhaltungssoftware Haben auf ZimaOS installieren (Beta-Test)

Viktor Dite, Autor des Beitrags

Von - Publiziert in Homeserver
Dipl. Informatiker und Tech-Blogger seit 2006.
Aktualisiert am


Meine Buchhaltung mache ich seit Jahren mit Accountable. Das funktioniert, kostet aber jeden Monat Geld, und meine Rechnungen, Belege und Kontoumsätze liegen auf fremden Servern. Auf meinem Homeserver laufen längst Paperless, Papra, Open Archiver für meine Mails und Home Assistant. Warum also nicht auch die Buchhaltung? Mit Haben gibt es seit Oktober 2026 eine kostenlose Buchhaltungssoftware, die genau das verspricht: Open Source, selbst gehostet und mit direktem Draht zu ELSTER.

Ich teste Haben gerade auf meinem ZimaOS-Server. In diesem Artikel erkläre ich, was die Software kann, was sie ersetzen soll und warum du sie heute noch nicht für deine echte Buchhaltung nutzen solltest. Und ich zeige dir, wie du Haben mit meinem YAML-Generator auf ZimaOS, CasaOS oder in Portainer installierst.

Haben: kostenlose Buchhaltungssoftware auf dem eigenen Server mit E-Rechnung, ELSTER und Backup aufs NAS

tl;dr Haben ist eine kostenlose Open-Source-Buchhaltung für Freiberufler, Kleinunternehmer und kleine GmbHs mit E-Rechnung, Bankabgleich, EÜR und Umsatzsteuer-Voranmeldung an ELSTER. Sie läuft als Docker-Container auf deinem eigenen Server. Mit dem YAML-Generator erstellst du deine docker-compose.yml und installierst sie per App-Import in ZimaOS oder als Stack in Portainer. Ein tägliches, verschlüsseltes Backup aufs NAS richtet der Generator gleich mit ein. Aber: Haben ist Beta. Zum Testen ist es prima, für die echte Buchhaltung warte ich bis zum Jahreswechsel 2027.

Was ist Haben?

Haben ist eine Web-App für Buchhaltung, Steuern und Rechnungen, entwickelt von Tristan Teufel und veröffentlicht auf GitHub. Der Name kommt aus der doppelten Buchführung: Soll und Haben. Die Software ist komplett auf Deutsch, steht unter der Open-Source-Lizenz AGPL-3.0 und kostet nichts. Du brauchst nur einen Server, und den hast du als Homeserver-Besitzer ja schon. Falls nicht: Welche günstige Hardware sich dafür eignet, zeige ich in meinem Vergleich Raspberry Pi zu teuer? Diese 3 Homeserver-Alternativen nutze ich selbst.

Zielgruppe sind Freiberufler, Selbstständige und Kleinunternehmer mit Einnahmen-Überschuss-Rechnung (EÜR), auch mit Kleinunternehmerregelung nach § 19 UStG. Dazu kommen kleine GmbHs und UGs mit Bilanz und E-Bilanz.

Das steckt laut Projekt drin:

Bereich Was Haben kann
Rechnungen Live-Vorschau beim Schreiben, E-Rechnung als ZUGFeRD und XRechnung, Storno, Abschlags- und wiederkehrende Rechnungen, Mahnwesen, Versand per E-Mail
Angebote Optionale Positionen, Zahlungsplan, mit einem Klick zur Rechnung
Belege Hochladen per Drag-and-drop, Kamera oder E-Mail-Postfach; E-Rechnungen werden direkt gelesen, andere Belege optional per KI
Bank Automatischer Abruf per PSD2 oder Import (CAMT, DKB, N26, PayPal, Stripe und mehr), Zuordnung mit Vorschlägen
Umsatzsteuer Voranmeldung aus den Buchungen, Übermittlung direkt per ERiC oder über Mein ELSTER
Jahreserklärungen USt-Erklärung, Anlage EÜR, Einkommensteuer; für GmbH und UG Körperschaft- und Gewerbesteuer
Buchhaltung Doppelte Buchführung nach SKR03 oder SKR04, DATEV-Export für die Steuerberatung
Weiteres Fristenkalender, Anlagen und AfA, Kassenbuch, Lohn, REST-API, Lesezugang für die Steuerberatung

GoBD-Konformität ist fest eingebaut. Was du festschreibst, lässt sich nicht mehr ändern oder löschen, nur noch stornieren. Jede Änderung landet in einem Audit-Log. Das ist bei einer Buchhaltung richtig so, beim Testen musst du es aber im Hinterkopf behalten. Dazu gleich mehr.

Was Haben ersetzen kann

Haben positioniert sich ausdrücklich als Open-Source-Alternative zu Lexware Office (früher lexoffice) und sevDesk. Für mich ist die spannende Frage, ob es auch Accountable ersetzen kann. Vom Funktionsumfang her deckt Haben alles ab, was ich als Kleingewerbe brauche: Rechnungen schreiben, Belege sammeln, Bank abgleichen, Voranmeldung schicken, EÜR erstellen.

Der große Unterschied ist das Modell. Bei Lexware Office, sevDesk oder Accountable zahlst du ein Abo und deine Daten liegen beim Anbieter. Bei Haben zahlst du nichts, dafür bist du selbst für Server, Updates und Backups zuständig. Wenn dein Homeserver abraucht und kein Backup existiert, sind Rechnungen weg, die du zehn Jahre aufbewahren musst.

Was Haben nicht kann oder anders macht:

  • Nur ein Inhaber: Haben ist für dich und deine eigene Firma gedacht. Mehrere gleichberechtigte Benutzer gibt es nicht, nur einen Lesezugang für die Steuerberatung.
  • Import nur aus Lexware Office und sevDesk: Wer von dort kommt, übernimmt Rechnungen, Belege und Kontakte ins Archiv. Aus Accountable und anderen Programmen gibt es keinen Import. Kontakte kommen per CSV rein, alte Rechnungen nicht.
  • ELSTER direkt nur mit Hersteller-ID: Für die direkte Übermittlung aus Haben brauchst du eine eigene Hersteller-ID beim Finanzamt, die Beantragung dauert oft Wochen. Ohne ID lädst du die Voranmeldung als XML bei Mein ELSTER hoch oder nutzt die Browser-Erweiterung des Projekts.
  • Keine App aus dem App Store: Haben lässt sich als Web-App auf Handy und Rechner installieren, aber nur über HTTPS.

Warum ich Haben teste

Drei Gründe haben mich neugierig gemacht. Erstens das Abo: Für eine überschaubare Kleingewerbe-Buchhaltung zahle ich Monat für Monat. Zweitens die Daten: Meine Dokumente verwalte ich schon längst auf dem eigenen Server, die Buchhaltung wäre der logische nächste Schritt. Drittens die E-Rechnung: Empfangen müssen Unternehmen sie seit 2025 können, ab 2027 wird das Ausstellen für Firmen mit über 800.000 Euro Vorjahresumsatz Pflicht, ab 2028 für fast alle anderen. Haben erzeugt ZUGFeRD und XRechnung von Haus aus.

Mein Plan: Ich teste Haben jetzt ausführlich mit Testdaten. Wenn es sich bewährt, starte ich zum 1. Januar 2027 mit einer frischen Instanz und mache die Buchhaltung des neuen Jahres komplett in Haben. Ein Wechsel zum Jahreswechsel ist am saubersten, weil die EÜR dann aus einem einzigen System kommt. Meine Erfahrungen schreibe ich in einem eigenen Artikel auf.

Wichtig: Haben ist Beta

Bevor du loslegst, solltest du diese Punkte kennen. Sie stammen zum Teil direkt aus der Doku des Projekts, zum Teil aus meiner eigenen Installation:

  • Beta-Status: Haben wird stark weiterentwickelt. Zwischen dem 5. Oktober und dem 7. November 2026 sind 24 Versionen erschienen. Datenmodell und Abläufe können sich von Version zu Version ändern.
  • Updates sind eine Einbahnstraße: Datenbank-Migrationen lassen sich nicht zurückspielen. Das tägliche Backup aufs NAS fängt das ab. Der Generator nutzt latest, damit du Updates bequem über ZimaOS bekommst. Wer lieber selbst bestimmt, wann aktualisiert wird, trägt eine feste Versionsnummer ein.
  • Ergebnisse prüfen: Auswertungen und Meldungen ans Finanzamt prüfst du vor dem Absenden selbst. Haben nimmt dir die Verantwortung nicht ab.
  • Festgeschrieben ist festgeschrieben: Testrechnungen, die du festschreibst, bleiben im Journal und verbrauchen Rechnungsnummern. Willst du später echt starten, setzt du Haben komplett neu auf.
  • Encryption Key sichern: Ohne ihn sind ELSTER-Zertifikat und gespeicherte API-Schlüssel nach einer Wiederherstellung nicht mehr lesbar. Leg ihn im Passwortmanager ab.
  • Ohne HTTPS keine Passkeys: Im Heimnetz über http:// meldest du dich mit E-Mail und Passwort an. Passkeys und die Installation als App funktionieren nur über HTTPS.
  • Ohne Backup kein Betrieb: Rechnungen und Belege musst du zehn Jahre aufbewahren. Mein Generator richtet deshalb standardmäßig ein tägliches Backup aufs NAS ein. Wie das funktioniert und wie das Wiederherstellen bei mir geklappt hat, steht weiter unten.

Was du für Haben brauchst

  • Einen Server mit Docker, zum Beispiel einen Mini-PC, Mac mini oder Raspberry Pi oder ein NAS von Synology. Die Images gibt es für amd64 und arm64.
  • ZimaOS bzw. CasaOS mit App-Import oder Portainer. Welches der beiden Systeme ich empfehle, steht in meinem Vergleich ZimaOS vs. CasaOS.
  • Ein Terminal, um Passwörter und Schlüssel zu erzeugen (am Mac und unter Linux ist openssl schon da)
  • Einen freien Port, im Generator ist 8690 vorbelegt
  • Für das Backup ein NAS oder eine zweite Platte, die dein Server als Ordner eingebunden hat. In ZimaOS geht das unter Dateien mit einer Netzwerkfreigabe.

Die Images lade ich von GitHub (ghcr.io) statt von Docker Hub. Auf meinem ZimaOS ist für Docker Hub ein Spiegelserver eingetragen, der nur in China ausliefert. Mit GHCR gibt es das Problem nicht, und für Portainer macht es keinen Unterschied.

Die Schlüssel erzeugen

Haben braucht ein Datenbank-Passwort und zwei geheime Schlüssel, das Backup ein eigenes Passwort. Mein Generator erzeugt sie bewusst nicht für dich, du machst das selbst im Terminal:

openssl rand -hex 24
openssl rand -base64 32
openssl rand -base64 32
openssl rand -base64 32

Die erste Zeile ist das Datenbank-Passwort, die zweite das Auth Secret, die dritte der Encryption Key und die vierte das Backup-Passwort.

In den Generator musst du sie nicht eintragen. Die Felder sind mit Platzhaltern wie [HIER-DB-PASSWORT-EINTRAGEN] vorbelegt. Du lädst die YAML herunter, öffnest sie in einem Texteditor und ersetzt jeden Platzhalter in eckigen Klammern durch deinen Wert. Am schnellsten geht das mit Suchen und Ersetzen, denn das Datenbank-Passwort steht mehrfach drin. Du kannst die Werte aber auch direkt im Generator eintragen, er läuft komplett in deinem Browser. Encryption Key und Backup-Passwort speicherst du zusätzlich in deinem Passwortmanager, denn ohne beide ist jedes Backup wertlos.

Die YAML mit dem Generator erstellen

Wähle den Installationsweg, trag die IP-Adresse deines Servers und den Backup-Ordner auf deinem NAS ein und lade die YAML als Datei herunter. Danach ersetzt du darin die Platzhalter, wie oben beschrieben. Für ZimaOS und CasaOS hängt der Generator den Block für die App-Kachel samt Icon gleich mit an.

YAML-Generator für Haben

Trag deine Werte ein, die fertige YAML erscheint darunter. Alles passiert in deinem Browser, nichts wird übertragen oder gespeichert. Passwörter und Schlüssel musst du hier nicht eintragen: Die Felder sind mit Platzhaltern in eckigen Klammern vorbelegt. Du lädst die YAML herunter und ersetzt die Platzhalter danach in der Datei, mit Werten, die du selbst im Terminal erzeugst.

Genau unter dieser Adresse rufst du Haben später auf. Mit einer anderen Adresse (etwa einem Hostnamen) klappt die Anmeldung nicht.

Er darf auf dem Server noch nicht belegt sein.

Darin liegen Datenbank, Belege und ERiC. Anlegen musst du nichts, ein Hilfs-Container setzt die Rechte.

Mit latest holt ZimaOS beim Update automatisch die neueste Version. Willst du selbst bestimmen, wann aktualisiert wird, trag eine feste Versionsnummer ein, z. B. 0.7.0 (GitHub-Releases).

Nur Buchstaben und Ziffern. Erzeugen: openssl rand -hex 24. Steht in der YAML mehrfach, ersetze also jede Fundstelle.

Signiert die Anmeldungen. Erzeugen: openssl rand -base64 32

Verschlüsselt ELSTER-Zertifikat und API-Schlüssel. Erzeugen: openssl rand -base64 32. Zusätzlich im Passwortmanager sichern, ohne ihn ist ein Backup davon unlesbar.

Mindestens 8 Zeichen, z. B. openssl rand -hex 6. Leer lassen geht auch: Dann schreibt Haben bei jedem Start einen neuen Code ins Container-Log.

ERiC ist die Schnittstelle zu ELSTER. Mit dem Haken stimmst du den Nutzungsbedingungen von ERiC zu. Ohne ERiC prüft und sendet Haben nur simuliert, zum Testen reicht das.

Backup aufs NAS

Sichert Datenbank und Belege jede Nacht verschlüsselt mit restic, im laufenden Betrieb. Alte Stände räumt es selbst auf: 14 Tages-, 24 Monats- und 11 Jahresstände.

Der Pfad, unter dem dein Server den NAS-Ordner sieht. In ZimaOS findest du ihn unter Dateien bei der eingebundenen Netzwerkfreigabe. Leg dort die leere Datei HABEN-BACKUP-ZIEL.txt an: Fehlt sie, weil das NAS gerade nicht eingehängt ist, bricht das Backup ab, statt still auf die lokale Platte zu sichern.

Verschlüsselt das Backup. Erzeugen: openssl rand -base64 32. Unbedingt im Passwortmanager sichern, ohne Backup-Passwort und Encryption Key ist das Backup wertlos.


Befehle für Backup und Wiederherstellen

Im Terminal deines Servers ausführen, auf ZimaOS per SSH mit sudo davor. Diese Befehle enthalten deine Passwörter, speichere sie nur an einem sicheren Ort.


Lieber ohne Generator? Die YAML für ZimaOS gibt es auch auf GitHub: vdite/haben-buchhaltung-zimaos. Die Platzhalter ersetzt du wie oben beschrieben.

Was in der YAML steckt

Die YAML startet vier Container:

  • haben-init-perms läuft einmal beim Start und gibt den Ordnern für Belege und ERiC die Rechte für den Benutzer, unter dem Haben läuft. Danach steht er auf „Exited (0)“. Das ist gewollt, lass ihn in der YAML.
  • haben-db ist die PostgreSQL-Datenbank. Das Image des Projekts hebt ältere Datenbestände bei einem Versionssprung von Postgres selbst an.
  • haben-app ist Haben selbst. Beim Start spielt es die Datenbank-Migrationen ein.
  • haben-backup sichert jede Nacht Datenbank und Belege aufs NAS. Mehr dazu im Abschnitt zum Backup.

Der wichtigste Wert ist BETTER_AUTH_URL. Dort steht die Adresse, unter der du Haben aufrufst, also zum Beispiel http://192.168.178.2:8690. Haben prüft bei jeder Anmeldung, ob die Anfrage von genau dieser Adresse kommt. Rufst du es über einen Hostnamen oder einen anderen Port auf, scheitert die Anmeldung.

Caddy für HTTPS und optionale Dienste wie die KI-Auslesung von Belegen habe ich für den Test weggelassen. Zum Ausprobieren im Heimnetz brauchst du sie nicht.

Weg 1: Haben auf ZimaOS installieren (oder CasaOS)

So läuft Haben bei mir. ZimaOS importiert die YAML direkt, die App erscheint danach als Kachel auf dem Dashboard.

  • Erstelle die YAML im Generator mit dem Installationsweg ZimaOS oder CasaOS, lade sie mit Als Datei herunter herunter und ersetze die Platzhalter.
  • Klicke in ZimaOS auf dem Dashboard oben rechts auf das + und wähle Benutzerdefinierte App installieren.
ZimaOS Dashboard: Benutzerdefinierte App installieren
  • Klicke im folgenden Fenster oben auf Import und wähle Docker Compose.
ZimaOS: Import als Docker Compose
  • Wähle die Datei docker-compose.yml aus. Seit ZimaOS 1.8.0 lädst du die Datei direkt hoch, Kopieren und Einfügen ist nicht mehr nötig. Prüfe die Angaben und klicke auf Installieren.

Der erste Start dauert etwas länger, weil ZimaOS vier Images lädt und die Datenbank angelegt wird.

In CasaOS findest du das Gleiche im App Store unter Custom Install, dort fügst du den Inhalt der YAML ein. Die Entwicklung von CasaOS ist allerdings faktisch eingestellt. Warum ich kein CasaOS mehr installieren würde und wie du deine Apps zu ZimaOS umziehst, habe ich separat aufgeschrieben.

Weg 2: Haben als Stack in Portainer installieren

  • Gehe in Portainer auf Stacks und dann auf + Add stack.
  • Nenne den Stack haben.
  • Füge im Web-Editor die YAML aus dem Generator ein, Installationsweg Portainer-Stack.
  • Klicke auf Deploy the stack.

Danach öffnest du Haben im Browser unter http://DEINE-SERVER-IP:8690, oder unter dem Port, den du im Generator eingetragen hast.

Ersteinrichtung von Haben: Konto anlegen

Ab hier ist der Ablauf gleich, egal ob du Haben über ZimaOS, CasaOS oder Portainer installiert hast. Beim ersten Aufruf leitet Haben auf die Seite /setup weiter. Dort legst du das Inhaber-Konto an:

  1. Einrichtungscode eingeben. Hast du im Generator einen festen Code eingetragen, nimmst du den. Sonst steht er im Log des Containers haben-app, in der Zeile „Einrichtungscode für …“. Der Code sorgt dafür, dass niemand anderes deine frische Instanz zuerst erreicht und das Konto übernimmt. Ohne festen Code gibt es nach jedem Neustart einen neuen.
  2. Name, E-Mail und Passwort eintragen. Das Passwort braucht mindestens 12 Zeichen.
  3. Den Hinweis auf einen Passkey überspringst du im Heimnetz ohne HTTPS mit „Später“.

Danach geht es in die Einstellungen. Die Reihenfolge aus der Doku des Projekts hat sich bewährt:

  • Firmendaten, Rechtsform, Versteuerung (Ist oder Soll) und Kontenrahmen festlegen, gegebenenfalls die Kleinunternehmerregelung einschalten. Das musst du vor der ersten Buchung erledigen, danach ist es bis zum Jahreswechsel gesperrt.
  • Rechnungsnummer so setzen, dass sie an deine letzte Nummer aus dem alten Programm anschließt.
  • ELSTER: Zum Testen reicht die simulierte Übermittlung. Für den Echtbetrieb beantragst du Hersteller-ID und ELSTER-Zertifikat frühzeitig.
  • Bank: Kontoauszug als CAMT oder CSV importieren oder den automatischen Abruf einrichten.

Erster Eindruck: Die erste Rechnung

Als Erstes habe ich eine Testrechnung an eine erfundene Muster GmbH geschrieben. Links füllst du die Felder aus, rechts baut Haben bei jeder Eingabe die Vorschau neu auf, und zwar direkt als PDF/A-3 mit eingebettetem XML. Das Fälligkeitsdatum rechnet Haben aus dem Zahlungsziel selbst aus, das E-Rechnungsformat wählst du pro Rechnung, hier ZUGFeRD nach EN 16931.

Haben Rechnungseditor mit Live-Vorschau als PDF/A-3 mit eingebettetem ZUGFeRD-XML

Weil ich in den Firmendaten die Kleinunternehmerregelung eingeschaltet habe, steht der Hinweis „Gemäß § 19 UStG wird keine Umsatzsteuer berechnet.“ automatisch auf der Rechnung, die Umsatzsteuer-Spalte bleibt leer.

Mit Festschreiben wird aus dem Entwurf eine echte Rechnung mit dem Status „Offen“. Ab jetzt lässt sie sich nicht mehr ändern. Du lädst sie als PDF oder XML herunter, erzeugst einen Lieferschein oder schickst sie direkt per E-Mail. Unten auf der Rechnung steht ein GiroCode, den dein Kunde mit der Banking-App scannen kann. Den Zahlungseingang ordnest du später im Bankabgleich zu oder erfasst eine Barzahlung in der Kasse.

Festgeschriebene Rechnung in Haben mit Kleinunternehmer-Hinweis, GiroCode und Download als PDF und XML

Die Rechnung 2026-001 bleibt jetzt übrigens für immer in meiner Testinstanz. Genau das meine ich mit „Festgeschrieben ist festgeschrieben“: Spätestens für den echten Start setze ich Haben neu auf.

Kann ich bestehende Rechnungen importieren?

Das war meine erste Frage nach der Installation, und die Antwort hat mich kurz ausgebremst. Auf der Seite Rechnungen gibt es keinen Import. Bestehende Rechnungen übernimmt Haben über Archiv > Umzug, und zwar nur aus Lexware Office und sevDesk. Auch dann landen sie nicht in der normalen Rechnungsliste, sondern unveränderbar im Archiv, getrennt von der laufenden Buchhaltung.

Für mich als Accountable-Nutzer heißt das: Die alten Jahre bleiben, wo sie sind. Exporte wie PDFs oder einen DATEV-Buchungsstapel kann ich zwar im Archiv ablegen, durchsuchbare Rechnungen werden daraus aber nicht. Genau deshalb plane ich den Wechsel zum Jahresanfang.

Backup aufs NAS: So sichere ich Haben

Bei einer Buchhaltung ist das Backup kein Extra. Rechnungen und Belege musst du zehn Jahre aufbewahren, und auf einem Homeserver bist du dafür allein verantwortlich. Deshalb habe ich das Backup ausführlich getestet, bevor überhaupt echte Daten in Haben liegen.

Warum nicht einfach den Ordner kopieren?

Für Paperless nutze ich einen selbst gebauten Cron-Container, der nachts den Datenordner als tar-Archiv aufs NAS kopiert. Für Haben habe ich mich dagegen entschieden, denn das Projekt bringt einen eigenen Backup-Container mit, der es besser macht:

  • Kein Herunterfahren nötig: Die Datenbank wird im laufenden Betrieb mit pg_dump gesichert. Das ergibt einen in sich stimmigen Stand, und der Container prüft, ob der Dump vollständig ist.
  • Verschlüsselt und platzsparend: Das Backup läuft mit restic. Jede Nacht kommen nur die Änderungen dazu, nicht jedes Mal eine komplette Kopie.
  • Aufbewahrung passend zur GoBD: 14 tägliche, 24 monatliche und 11 jährliche Stände bleiben erhalten, ältere räumt der Container selbst auf.
  • Wöchentlicher Test-Restore: Einmal pro Woche spielt er das Backup probehalber in eine Wegwerf-Datenbank ein und prüft es.
  • Status in der App: Haben zeigt unter Einstellungen > Export, ob das letzte Backup geklappt hat, und warnt in der Übersicht, wenn zwei Tage lang keins durchlief.
  • Kein Zugriff auf Docker nötig: Ein Container, der andere Container stoppt, braucht den Docker-Socket und damit volle Kontrolle über den Server. Das wollte ich neben meiner Buchhaltung nicht haben.

Was du einrichten musst

  1. Auf dem NAS einen Ordner für das Backup anlegen, zum Beispiel Backup/Haben.
  2. In diesem Ordner eine leere Datei HABEN-BACKUP-ZIEL.txt anlegen.
  3. Im Generator den Pfad eintragen, unter dem dein Server den Ordner sieht. Bei mir ist das ein Pfad unter /media/192.168.178.152/, weil ZimaOS Netzwerkfreigaben dort einbindet.
  4. Backup-Passwort und Encryption Key im Passwortmanager ablegen.

Die Datei HABEN-BACKUP-ZIEL.txt ist meine eigene Ergänzung zum Backup-Container des Projekts. Ist die Netzwerkfreigabe einmal nicht eingehängt, etwa nach einem Neustart des NAS, würde Docker den Pfad sonst einfach als leeren Ordner auf der lokalen Platte anlegen. Das Backup liefe scheinbar erfolgreich, läge aber auf derselben Platte wie die Daten. Mit der Datei bricht der nächtliche Lauf in diesem Fall ab, und Haben warnt dich.

Das erste Backup von Hand starten

Der Container sichert jede Nacht zur eingestellten Uhrzeit. Das erste Backup habe ich direkt nach der Installation von Hand gestartet, auf ZimaOS per SSH mit sudo davor:

docker exec haben-backup backup.sh

Beim ersten Lauf legt der Container das verschlüsselte Repository im NAS-Ordner an, darin liegen danach Ordner wie data, index und snapshots. Bei mir war das Backup nach wenigen Sekunden fertig, direkt danach lief der erste Test-Restore: 98 Tabellen eingespielt, die Prüfkette der Buchungen stimmte mit der laufenden Datenbank überein. Die vorhandenen Stände zeigt dir:

docker exec haben-backup restic snapshots

Wiederherstellen: Mein Test

Ein Backup ist erst etwas wert, wenn das Zurückspielen klappt. Deshalb habe ich es ausprobiert. Nach dem ersten Backup habe ich eine zusätzliche Tabelle in der Datenbank und eine Testdatei im Belegordner angelegt, beides Dinge, die es im Backup nicht gab. Dann habe ich zurückgespielt:

docker stop haben-app
docker run --rm -it --network haben \
  -e PGHOST=db -e PGUSER=haben -e PGDATABASE=haben \
  -e PGPASSWORD='DEIN_DB_PASSWORT' \
  -e RESTIC_PASSWORD='DEIN_BACKUP_PASSWORT' \
  -e RESTIC_REPOSITORY=/backups/repo -e BACKUP_HOST=haben \
  -v /DATA/AppData/haben/belege:/belege \
  -v /DEIN/NAS/ORDNER:/backups \
  ghcr.io/firsttris/haben-backup:latest restore.sh latest
docker start -a haben-init-perms
docker start haben-app

Den fertigen Befehl mit deinen Werten zeigt dir der Generator unter der YAML an. Das Skript fragt vor dem Ersetzen nach und macht nur bei der Antwort ja weiter. Danach waren Testtabelle und Testdatei verschwunden, meine Testrechnung war noch da, und Haben startete ohne Fehler. Der Aufruf von haben-init-perms setzt die Rechte der Belegdateien zurück, die beim Wiederherstellen neu geschrieben werden.

Wichtig: Das Wiederherstellen ersetzt Datenbank und Belege komplett. Alles, was du nach dem gewählten Backup in Haben erfasst hast, ist danach weg.

Haben aktualisieren

Mit latest musst du an der YAML nichts ändern:

  • ZimaOS: Zeigt ZimaOS bei der App ein Update an, klickst du darauf. Oder du gehst bei der App-Kachel über die drei Punkte auf Verwalten und dann auf Speichern. ZimaOS holt dabei die neuesten Images und startet Haben neu.
  • Portainer: Update the stack mit Re-pull image klicken.

Weil Migrationen nicht umkehrbar sind, starte ich vorher ein Backup von Hand: docker exec haben-backup backup.sh. Hast du eine feste Versionsnummer eingetragen, erhöhst du sie bei den drei Images haben, haben-db und haben-backup. Alle drei tragen immer dieselbe Version.

Welche Version gerade läuft, zeigt Haben unten links in der Navigation. Die Versionshinweise findest du auf der Release-Seite bei GitHub.

Ausblick auf 2027

Bis Ende 2026 teste ich Haben mit Testdaten: Rechnungen und E-Rechnungen schreiben, Belege hochladen, Kontoauszüge zuordnen und eine Voranmeldung simuliert übermitteln. Wenn das überzeugt, sieht mein Umstieg so aus:

  • Testinstanz komplett löschen und mit neuen Schlüsseln frisch aufsetzen
  • Backup-Ordner auf dem NAS leeren, damit dort nur noch echte Daten landen
  • HTTPS einrichten, damit Passkeys und die App-Installation funktionieren
  • Ab dem 1. Januar 2027 alle neuen Rechnungen und Belege in Haben

Bis dahin dürfte Haben auch einige Versionen weiter sein. Ob es sich im Alltag gegen Accountable schlägt, erfährst du in meinem Erfahrungsbericht.

Fazit: Spannende kostenlose Buchhaltungssoftware, aber noch zum Testen

Haben ist eines der spannendsten Self-Hosting-Projekte, die mir dieses Jahr begegnet sind. Eine kostenlose Buchhaltungssoftware mit E-Rechnung, Bankabgleich und ELSTER, die auf dem eigenen Server läuft, gab es in dieser Form bisher nicht. Die Installation auf ZimaOS hat bei mir auf Anhieb geklappt.

Für wen sich ein Test jetzt lohnt:

  • Du bist Freiberufler, Kleinunternehmer oder hast eine kleine GmbH und willst weg vom Abo.
  • Du betreibst schon einen Homeserver und kümmerst dich ohnehin um Backups.
  • Du willst deine Buchhaltung zum Jahreswechsel umstellen und vorher in Ruhe ausprobieren.

Wer seine laufende Buchhaltung ohne Risiko braucht, bleibt vorerst bei Lexware Office, sevDesk oder Accountable. Mehr Anleitungen für deinen Homeserver findest du in meiner ZimaOS-Übersicht.