SSD Nodes Learn 🎉 VPS ab $5.50/Monat
Anleitungen Matt ConnorVon Matt Connor

Selbst gehostete Rechnungssoftware im Vergleich

Invoice Ninja, InvoiceShelf, InvoicePlane, Kimai und ERPNext auf einem VPS: wiederkehrende Rechnungen, Steuern, Kundenportal, Zahlungs-Gateways und Lizenzen.

Welche selbst gehostete Rechnungssoftware sollten Sie auswählen?

Bei selbst gehosteter Rechnungssoftware bleiben auf einem VPS fünf realistische Optionen, die sich nicht direkt ersetzen. Invoice Ninja ist das ausgereifteste Produkt: Wiederkehrende Rechnungen, ein Kundenportal, Zahlungs-Gateways und E-Rechnungsformate funktionieren bereits am Tag der Installation. InvoiceShelf ist die schlankere vollständig quelloffene Option. InvoicePlane ist eine einfache PHP-Anwendung, die keine Orchestrierung benötigt. Kimai stellt erfasste Arbeitszeit statt Einzelpositionen in Rechnung. ERPNext ist ein vollständiges Buchhaltungssystem, das zusätzlich Rechnungen erstellt.

Zwei Probleme bringen eine selbst gehostete Rechnungslösung deutlich häufiger zum Scheitern als eine fehlende Funktion. Das erste ist E-Mail. Eine Rechnung im Spam-Ordner ist eine unbezahlte Rechnung, und Sie erfahren davon nicht automatisch. Das zweite sind Backups. Der Verlust dieser selbst gehosteten Datenbank wird zu einem Steuerproblem und nicht nur zu einer Unannehmlichkeit.

Lesen Sie die Lizenz, bevor Sie die Funktionsliste prüfen. Drei dieser fünf Lösungen stehen unter einer Copyleft-Lizenz, eine unter einer permissiven Lizenz und eine ist nur als Quellcode verfügbar, wobei echte Einschränkungen für ihre Nutzung gelten.

Die fünf Optionen und für wen sie jeweils geeignet sind

Invoice Ninja

Eine Laravel-Anwendung, derzeit in der v5-Reihe. Self-Hosting ist kostenlos und ohne Einschränkungen möglich: wiederkehrende Rechnungen, Angebote, Projekte, Zeiterfassung, Ausgaben, ein Kundenportal sowie Zahlungs-Gateways einschließlich Stripe und PayPal. Das Projekt bezeichnet sich selbst als „eine mit Laravel entwickelte Anwendung für Rechnungen, Angebote, Projekte und Zeiterfassung, deren Quellcode verfügbar ist“. Der einzige kostenpflichtige Bestandteil ist das Branding. Nach Angaben des Projekts gilt: „Wir bieten eine White-Label-Lizenz für 40 USD pro Jahr an, mit der sich das Invoice-Ninja-Branding aus den kundenseitigen Bereichen der Anwendung entfernen lässt.“ Dieser Preis gilt im August 2026.

Wählen Sie diese Option, wenn Sie das vollständigste Produkt möchten und bereit sind, den umfangreichsten Stack zu betreiben.

InvoiceShelf

Ein Fork von Crater unter der GNU Affero General Public License Version 3 (AGPL-3.0). Die Anwendung unterstützt Rechnungen, Kostenvoranschläge, wiederkehrende Abrechnungen, Ausgaben, Steuern, mehrere Währungen, ein Kundenportal und mehrere Unternehmen. Zahlungen und White-Labeling befinden sich in separaten offiziellen Modul-Repositories. Beide stehen unter AGPL-3.0 und sind kostenlos. Kartenzahlungen werden über den Stripe-Checkout abgewickelt.

Wählen Sie diese Option, wenn Sie eine kleine, vollständig quelloffene Anwendung möchten und nicht dreißig Gateways benötigen.

InvoicePlane

Eine PHP-Anwendung auf Basis von CodeIgniter unter der MIT-Lizenz. Sie ist die einzige Option hier, die durch das Entpacken von Dateien in ein Web-Root installiert wird. Es gibt weder Docker noch einen Node-Build-Schritt. PDFs werden mit mPDF erzeugt, daher bestehen die Vorlagen aus HTML und CSS. Kunden erhalten einen Gast-Link, über den sie eine Rechnung anzeigen und bezahlen können.

Der Nachteil betrifft die Zahlungen. Die Dokumentation weist ausdrücklich darauf hin, dass InvoicePlane 1.6 standardmäßig nur Stripe unterstützt und andere Anbieter in dieser Version entfernt wurden. Die veröffentlichten Anforderungen für die 1.6-Reihe sind PHP 8.0 bis 8.1 mit MySQL 5.5 oder der entsprechenden MariaDB-Version. Lesen Sie die Hinweise zur jeweiligen Version, die Sie herunterladen, da die 1.7-Reihe noch weiterentwickelt wird.

Wählen Sie diese Option, wenn Sie Shared Hosting oder einen VPS mit 512 MB nutzen.

Kimai

Eine AGPL-3.0-Zeiterfassung, die aus Arbeitszeitnachweisen Rechnungen erzeugt. Sie ist die richtige Lösung für alle, die Stunden abrechnen. Rechnungsvorlagen werden als DOCX-, ODS- oder XLSX-Dateien hochgeladen. Laut Dokumentation sind dies die einzigen unterstützten Formate. Anschließend werden die Vorlagen als PDF oder HTML ausgegeben. Sie gestalten Ihre Rechnung in einem Textverarbeitungsprogramm, anstatt CSS zu schreiben. Das empfinden die meisten Benutzer als einfacher.

Kimai verfügt weder über ein Kundenportal noch über ein Zahlungs-Gateway. Daher versenden Sie das PDF per E-Mail. Strukturierte elektronische Rechnungen sind über ein kostenpflichtiges Store-Plugin namens E-Invoice Plus verfügbar. Für eine selbst gehostete Installation kostet es im August 2026 99 EUR pro Jahr zuzüglich Mehrwertsteuer. Es unterstützt die Profile EN16931, XRechnung, ZUGFeRD, Factur-X und Peppol.

Wählen Sie diese Option, wenn die Rechnung das Ergebnis erfasster Arbeitszeit ist.

ERPNext

GPL-3.0 und eine andere Kategorie von Software. Eine Verkaufsrechnung ist ein Dokumenttyp innerhalb eines vollständigen Buchhaltungssystems mit Kontenplan, Buchungssätzen, Lagerverwaltung und Lohnabrechnung. Die Anwendung ist die richtige Lösung, sobald die Rechnungsstellung nicht mehr die gesamte Aufgabe ist. Für einen Freiberufler mit acht Kunden ist sie viel zu umfangreich. Die Einrichtung ist ein eigenes Projekt, das unter ERPNext auf einem VPS betreiben beschrieben wird.

Wiederkehrende Rechnungen hängen von einem Scheduler ab, den Sie nicht sehen können

Invoice Ninja, InvoiceShelf, InvoicePlane und ERPNext erstellen wiederkehrende Rechnungen. Kimai bietet im Kern keine Funktion für wiederkehrende Rechnungen, weil eine Rechnung dort aus den Zeiterfassungseinträgen eines Zeitraums erstellt wird.

Das Fehlerbild ist bei allen Laravel-basierten Anwendungen gleich und bleibt unauffällig. Wiederkehrende Rechnungen werden von einer geplanten Aufgabe, php artisan schedule:run, erstellt. Etwas außerhalb der Anwendung muss diese Aufgabe jede Minute aufrufen. Wenn kein Aufruf erfolgt, zeigt die Liste der wiederkehrenden Rechnungen weiterhin ein Datum für den nächsten Versand an. Dieses Datum verstreicht einfach. Es wird keine Rechnung erstellt. Es wird kein Fehler protokolliert, weil kein Code ausgeführt wurde.

Legen Sie daher nach dem Erstellen Ihrer ersten wiederkehrenden Rechnung das Datum für den nächsten Versand auf einige Minuten in der Zukunft fest und warten Sie. Wenn nichts eintrifft, läuft der Scheduler nicht. Bei einer Docker-Installation bedeutet das meist, dass der Cron- oder Scheduler-Dienst in der Compose-Datei nie gestartet wurde oder beendet wurde.

docker compose ps
docker compose logs --tail 50

Jeder Dienst in der Datei sollte running melden. Ein Dienst im Status exited ist der Dienst, dessen Logs Sie lesen müssen.

Mehrere Währungen und Steuern: Was Sie vor der Festlegung prüfen sollten

Funktionslisten nennen „mehrere Währungen“ und meinen damit sehr unterschiedliche Funktionen. Führen Sie diese vier Prüfungen in einer Demo-Instanz mit realen Zahlen aus Ihrem eigenen Unternehmen durch. Einen Fehler erkennt sonst Ihr Steuerberater und nicht Sie.

  1. Speichert die Rechnung den Wechselkurs, der am Ausstellungsdatum gültig war? Das ist erforderlich. Wenn die Anwendung die Summen anhand eines aktuellen Wechselkurses neu berechnet, ändern sich die Berichte des letzten Quartals bei jedem Öffnen. Ihre Buchhaltung stimmt dann nicht mehr mit den bereits eingereichten Unterlagen überein.
  2. Wird die Steuer pro Position, pro Rechnung oder auf beiden Ebenen angewendet? Ein einheitlicher Rechnungssatz funktioniert nur so lange, bis eine Position steuerfrei oder mit 0 % besteuert wird.
  3. Können Sie Preise einschließlich und ausschließlich Steuer eingeben? Eine nachträgliche Umrechnung führt pro Position zu Rundungsdifferenzen von einem Cent. Diese Cent-Beträge summieren sich über ein Jahr.
  4. Was zeigt das Dokument für einen Kunden in einem anderen Land, der keine Mehrwertsteuer schuldet? Der Hinweis auf die Steuerbefreiung muss auf der Rechnung stehen und darf nicht nur als 0 in der Steuerspalte erscheinen.

Invoice Ninja und ERPNext unterstützen alle vier Punkte. InvoiceShelf führt Steuern und mehrere Währungen als Funktionen auf. InvoicePlane und Kimai sind einfacher gehalten. Testen Sie sie daher anhand Ihrer schwierigsten Rechnung und nicht anhand Ihrer einfachsten.

Kundenportale und Zahlungsanbieter

Ein Kundenportal ist eine Seite, auf der ein Kunde seine Rechnungen sieht, das PDF herunterlädt und bezahlt. Das ist wichtiger, als es zunächst klingt, weil die Zahlungserinnerung per E-Mail mehr Zeit kosten kann als die Erstellung der Rechnung.

Invoice Ninja ist in diesem Bereich am stärksten. Es bietet ein vollständiges Portal, zahlreiche Zahlungsanbieter, gespeicherte Zahlungsmethoden und die automatische Abrechnung wiederkehrender Rechnungen. InvoiceShelf verfügt über ein Kundenportal und ergänzt über sein Zahlungsmodul einen Stripe-Checkout. InvoicePlane stellt für jede Rechnung einen Gastlink bereit und unterstützt Stripe. Kimai bietet beides nicht. Das PDF wird daher als Anhang versendet.

Ein Punkt wird häufig verwechselt. Das Self-Hosting der Rechnungsanwendung bedeutet nicht, dass Sie Kartennummern speichern. Bei einem Stripe-Checkout wird der Kunde zu Stripe weitergeleitet und gibt die Kartendaten dort ein. Ihr VPS sieht die Kartennummer nie. Ihr PCI-Umfang (Payment Card Industry) bleibt gerade deshalb klein, weil Sie das Zahlungsformular nicht selbst erstellt haben. Wenn Sie später mehr als einen Zahlungsanbieter benötigen oder Zahlungen nach Land weiterleiten möchten, gehört das in eine separate Schicht, beispielsweise Self-Hosting der Zahlungsorchestrierung mit Hyperswitch.

PDF-Qualität und die Vorlage, die Sie anschließend bearbeiten

Sie bearbeiten die Vorlage. Jede Standardeinstellung platziert Ihre Adresse für Ihr Land an der falschen Stelle.

Invoice Ninja rendert HTML- und CSS-Vorlagen mithilfe eines in das Image eingebundenen Headless-Chromium zu PDF. Deshalb ist der Container groß. Planen Sie dafür ausreichend Arbeitsspeicher ein: Ein Headless-Browser ist der schwerste Prozess im Stack, daher ist ein VPS mit 1 GB knapp bemessen. InvoicePlane verwendet mPDF. Das ist reines PHP und benötigt wenig Ressourcen, ignoriert dafür einige moderne CSS-Funktionen. Kimai verfolgt den umgekehrten Ansatz und lässt Sie eine DOCX- oder ODS-Datei hochladen. Das Layout wird dadurch in LibreOffice oder Word von jemandem erstellt, der noch kein Stylesheet geschrieben hat.

Wenn Ihnen ein gestaltetes Rechnungsdokument wichtig ist und CSS nicht, ist der Ansatz von Kimai besser. Wenn Sie die Vorlage in der Versionsverwaltung ablegen und Änderungen vergleichen möchten, ist HTML die bessere Wahl.

Dürfen Sie die Software kommerziell nutzen?

Mit allen fünf Lösungen können Sie Ihren eigenen Kunden Rechnungen stellen. Unterschiede ergeben sich, sobald Sie darüber hinaus weitere Dinge tun.

Invoice Ninja steht unter der Elastic License 2.0. Zwei Klauseln sind relevant.

Sie dürfen die Software Dritten nicht als gehosteten oder verwalteten Dienst bereitstellen, wenn dieser Dienst seinen Nutzern Zugriff auf einen wesentlichen Teil der Funktionen oder des Funktionsumfangs der Software gewährt.
Sie dürfen die Lizenzschlüsselfunktion der Software nicht verschieben, ändern, deaktivieren oder umgehen.

Sie können die Software also für Ihr eigenes Unternehmen betreiben. Instanzen für Kunden als Produkt zu betreiben, ist dagegen nicht zulässig. Die zweite Klausel ist der Grund dafür, dass das Entfernen des Brandings eine Lizenz für $40 erfordert und keine Änderung am Quellcode ist.

InvoiceShelf, Kimai und Crater stehen unter der AGPL-3.0. Die kommerzielle Nutzung ist kostenlos, und es gibt keine übergeordnete Lizenzstufe. Maßgeblich ist Abschnitt 13: Wenn Sie den Code ändern und anderen Personen Ihre geänderte Version über ein Netzwerk zugänglich machen, müssen Sie ihnen den Quellcode Ihrer Änderungen anbieten. Eine unveränderte Instanz ist bereits durch den öffentlichen Quellcode des Upstream-Projekts abgedeckt. Die meisten Self-Hoster müssen sich damit daher nicht befassen.

InvoicePlane steht unter der MIT-Lizenz. Sie stellt die geringsten Pflichten in dieser Gruppe auf. In der README wird jedoch darauf hingewiesen, dass der Name und das Logo beim Projekt verbleiben.

ERPNext steht unter der GPL-3.0. Änderungen, die Sie weitergeben, müssen Sie ebenfalls bereitstellen. Der private Betrieb ist ohne zusätzliche Pflichten möglich.

Dies beschreibt den Lizenztext und stellt keine Rechtsberatung dar.

Wird das Projekt noch gepflegt? Prüfen Sie das Commit-Protokoll

Crater war mehrere Jahre lang eine beliebte Open-Source-Anwendung für die Rechnungsstellung, und viele Anleitungen empfehlen es weiterhin. Im Standardbranch gab es seit 741 Tagen keinen Commit.

ChartGap since the last commit on the default branch, in days, checked 21 August 2026
The data behind this chart
[
  {
    "label": "ERPNext",
    "commit_gap": 0
  },
  {
    "label": "Invoice Ninja",
    "commit_gap": 1
  },
  {
    "label": "Kimai",
    "commit_gap": 1
  },
  {
    "label": "InvoicePlane",
    "commit_gap": 3
  },
  {
    "label": "InvoiceShelf",
    "commit_gap": 4
  },
  {
    "label": "Crater",
    "commit_gap": 741
  }
]

Von den 6 Projekten in diesem Block hatte nur bei fünf innerhalb der vergangenen Woche ein Commit stattgefunden. InvoiceShelf ist der Fork, der die Arbeit an Crater unter derselben AGPL-3.0-Lizenz und mit demselben Datenmodell fortgeführt hat. Der Wechsel ist daher eine Datenmigration und keine Neuentwicklung. Installieren Sie InvoiceShelf, nicht Crater.

Jede Anwendung auf einem VPS installieren

Alles außer InvoicePlane lässt sich am einfachsten mit Docker Compose betreiben. Wenn das für Sie neu ist, beginnen Sie mit einem ersten Docker-Compose-Stack auf einem VPS und kehren Sie anschließend hierher zurück.

Invoice Ninja stellt ein eigenes Compose-Repository bereit.

git clone https://github.com/invoiceninja/dockerfiles.git
cd dockerfiles
docker run --rm -it invoiceninja/invoiceninja php artisan key:generate --show

Kopieren Sie diesen Schlüssel in die Datei env im Repository und tragen Sie dort außerdem Ihr echtes APP_URL ein. Setzen Sie anschließend den Besitz so, wie es das Image erwartet, und starten Sie es.

chmod 755 docker/app/public
sudo chown -R 1500:1500 docker/app
docker compose up -d

Der Besitz 1500:1500 entspricht dem Benutzer innerhalb des Images. Wenn Sie diesen Schritt überspringen, kann die Anwendung ihren Cache und die erzeugten PDFs nicht schreiben. Geben Sie im Einrichtungsassistenten db als Datenbank-Host an, weil dies der Dienstname im Compose-Netzwerk ist. localhost verweist dort auf den Anwendungskontainer selbst.

InvoiceShelf veröffentlicht fertige Compose-Dateien, jeweils eine pro Datenbank-Engine.

curl -fLO https://raw.githubusercontent.com/InvoiceShelf/docker/master/docker-compose.mysql.yml
mv docker-compose.mysql.yml docker-compose.yml

Öffnen Sie die Datei, bevor Sie den Stack starten. Jedes darin enthaltene Passwort ist ein Platzhalter, und die Kommentare in der Datei weisen darauf hin. APP_URL, SESSION_DOMAIN und SANCTUM_STATEFUL_DOMAINS verwenden standardmäßig localhost. Bei allen drei Werten müssen Sie vor der ersten Anmeldung Ihren echten Hostnamen eintragen. Starten Sie den Stack anschließend.

docker compose up -d

Der Host-Port 8090 wird veröffentlicht, während der Dienst innerhalb des Containers auf Port 8080 läuft. Schalten Sie einen Reverse Proxy mit TLS (Transport Layer Security) davor, bevor Sie den Dienst für einen einzigen Client erreichbar machen.

Kimai-Compose-Datei für den Produktivbetrieb aus der Projektdokumentation
services:

  sqldb:
    image: mysql:8.3
    volumes:
      - mysql:/var/lib/mysql
    environment:
      - MYSQL_DATABASE=kimai
      - MYSQL_USER=kimaiuser
      - MYSQL_PASSWORD=kimaipassword
      - MYSQL_ROOT_PASSWORD=changemeplease
    command: --default-storage-engine innodb
    restart: unless-stopped
    healthcheck:
      test: mysqladmin -uroot -p$$MYSQL_ROOT_PASSWORD ping -h 127.0.0.1 --silent
      interval: 10s
      timeout: 5s
      retries: 12
      start_period: 30s

  kimai:
    image: kimai/kimai2:stable
    depends_on:
      sqldb:
        condition: service_healthy
        restart: true
    volumes:
      - data:/opt/kimai/var/data
      - plugins:/opt/kimai/var/plugins
    ports:
      - 8001:8001
    environment:
      - APP_SECRET=your-fantastic-long-random-and-ultra-secure-secret
      - TRUSTED_HOSTS=kimai.example.com
      - ADMINMAIL=admin@example.com
      - ADMINPASS=changemeplease
      - DATABASE_URL=mysql://kimaiuser:kimaipassword@sqldb/kimai?charset=utf8mb4&serverVersion=8.3.0
    restart: unless-stopped

volumes:
  data:
  mysql:
  plugins:

Setzen Sie APP_SECRET auf eine lange, zufällig erzeugte Zeichenfolge Ihrer Wahl und TRUSTED_HOSTS auf die Domain, die Sie tatsächlich verwenden werden. ADMINMAIL und ADMINPASS legen beim ersten Start den ersten Administrator an. Ändern Sie dieses Passwort anschließend in der Oberfläche und entfernen Sie es wieder aus der Datei.

InvoicePlane hat keinen Container. Erstellen Sie zuerst eine leere Datenbank.

sudo mysql -e "CREATE DATABASE invoiceplane CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

Laden Sie das Archiv von der Release-Seite des Projekts herunter, entpacken Sie es in Ihr Webroot, kopieren Sie ipconfig.php.example nach ipconfig.php und tragen Sie darin gemäß den Kommentaren in der Datei Ihre URL ein. Öffnen Sie anschließend https://your-domain.example/index.php/setup und führen Sie den Installationsassistenten durch.

Warum Ihre Rechnung im Spam-Ordner landet

Dieser Fehler kostet Sie Geld, und die Anwendung meldet die Rechnung trotzdem problemlos als gesendet.

Versenden Sie Rechnungs-E-Mails nicht über die eigene IP-Adresse des VPS. Eine neue VPS-IP-Adresse hat noch keine Versandhistorie. Große Empfänger stufen die erste Nachricht von einer unbekannten Adresse aus einem Hosting-Netz standardmäßig als verdächtig ein. Versenden Sie die E-Mail über ein SMTP-Relay (Simple Mail Transfer Protocol) für eine Domain, die Sie authentifiziert haben. Die vollständige Einrichtung ist ein eigener Leitfaden. E-Mails zuverlässig aus einer selbst gehosteten Anwendung versenden behandelt das Relay, die DNS-Einträge und die Tests.

Bei den meisten Rechnungsanwendungen ist die From-Adresse die häufigste Fehlerquelle. Sie muss zu einer Domain gehören, die Sie kontrollieren und mit der Ihr Relay per DKIM (DomainKeys Identified Mail) signiert. Die eigene Adresse des Kunden in From einzutragen wirkt zwar höflich, verhindert aber die Zustellung. Der empfangende Server prüft, ob die From-Domain mit der Domain übereinstimmt, die die Nachricht authentifiziert hat. Gmail weist diese Abweichung direkt zurück:

550 5.7.1 Unauthenticated email from example.com is not accepted due to domain's DMARC policy

Verwenden Sie Ihre eigene Adresse in From und tragen Sie den Kunden in Reply-To ein. Prüfen Sie Ihre veröffentlichten DNS-Einträge, bevor Sie echte Nachrichten versenden.

dig +short TXT example.com
dig +short TXT _dmarc.example.com
dig +short TXT selector1._domainkey.example.com

Der erste Befehl sollte einen SPF-Eintrag (Sender Policy Framework) zurückgeben, der Ihr Relay nennt. Der zweite sollte eine DMARC-Richtlinie (Domain-based Message Authentication, Reporting and Conformance) zurückgeben. Der dritte hängt vom Selector ab, den Ihnen Ihr Relay mitgeteilt hat. Eine leere Antwort bedeutet, dass der DKIM-Eintrag fehlt oder unter dem falschen Namen veröffentlicht wurde. Dann schlägt die Signaturprüfung für jede gesendete Nachricht fehl.

Senden Sie anschließend eine echte Rechnung an ein eigenes Konto bei einem großen Anbieter und lesen Sie die Raw-Header. dkim=pass und spf=pass im Header Authentication-Results sind der einzige relevante Nachweis. Das Flag "sent" der Anwendung bedeutet nur, dass sie die Nachricht an das Relay übergeben hat.

Backups: die eine Datenbank, die Sie nicht verlieren dürfen

Der Verlust eines Medienservers bedeutet, dass Sie Dateien erneut herunterladen müssen. Wenn Sie Ihre Rechnungsdatenbank verlieren, können Sie nicht mehr nachweisen, was Sie abgerechnet haben, welche Zahlungen eingegangen sind oder welche Beträge noch offen sind. Behandeln Sie sie entsprechend.

Sichern Sie vier Dinge. Die Datenbank. Das Speichervolume mit Logos, erzeugten PDFs und Belegen für Ausgaben. Die Umgebungsdatei der Anwendung. Außerdem die als normale Dateien gespeicherten gerenderten PDFs, denn ein PDF lässt sich auch in zehn Jahren noch ohne die Anwendung öffnen, mit der es erzeugt wurde.

Die Umgebungsdatei ist wichtiger, als viele erwarten. Laravel verschlüsselt sensible gespeicherte Werte, darunter Zugangsdaten für Payment-Gateways, mit dem APP_KEY aus dieser Datei. Stellen Sie die Datenbank zusammen mit einem neu erzeugten Schlüssel wieder her, lassen sich diese Werte nicht entschlüsseln. Alle Rechnungen sind vorhanden, aber Ihre Gateway-Einstellungen können nicht gelesen werden.

Ein Dump aus dem InvoiceShelf-Stack sieht so aus. Sein Datenbankdienst läuft mit mariadb:10, daher ist das Tool innerhalb des Containers mariadb-dump.

docker compose exec -T database mariadb-dump \
  --user=root --password=YOUR_ROOT_PASSWORD \
  --single-transaction --databases invoiceshelf > invoiceshelf.sql

--single-transaction erstellt einen konsistenten Snapshot der InnoDB-Tabellen, ohne sie zu sperren. Die Anwendung kann währenddessen weiter Anfragen bedienen. -T verhindert, dass Docker ein Terminal zuweist. Andernfalls könnte die Umleitung der Ausgabe beschädigt werden und eine Dump-Datei entstehen, die sich nicht importieren lässt.

Übertragen Sie diese Sicherung nach einem Zeitplan vom Server, beispielsweise mit verschlüsselten restic-Backups in einen externen Speicher, und wählen Sie die Aufbewahrungsdauer lang genug, um den von Ihrem Steuerberater genannten Zeitraum abzudecken.

Stellen Sie die Sicherung anschließend wieder her. Starten Sie den Dump in einem kurzlebigen Container, melden Sie sich an und öffnen Sie die Rechnung des letzten Monats. Solange Sie das nicht einmal durchgeführt haben, wissen Sie nicht, ob die Sicherung funktioniert.

Was Ihr Steuerberater anfordern wird

Holen Sie keine Steuerberatung aus einem Tutorial ein. Im Folgenden geht es darum, welche Daten diese Software erzeugen kann. Die Liste können Sie der Person vorlegen, die Sie steuerlich berät.

Exportierbare Daten. Sie sollten Ihre Rechnungen und Zahlungen über die Benutzeroberfläche als CSV exportieren können, ohne einen Datenbank-Client zu benötigen und ohne ein Support-Ticket zu eröffnen. Ein SQL-Dump ist eine Sicherung, aber kein Export, weil Ihr Steuerberater ihn nicht öffnen kann.

Unveränderliche Nummerierung. Rechnungsnummern sollten lückenlos fortlaufend vergeben und niemals wiederverwendet werden. Durch das Löschen einer Rechnung entsteht eine Lücke, die anschließend erklärt werden muss. Stornieren oder korrigieren Sie die Rechnung stattdessen. Das wird von jeder hier genannten Anwendung unterstützt. Ob eine lückenlose Nummerierung für Sie vorgeschrieben ist, hängt davon ab, wo Sie registriert sind. Fragen Sie dies am besten frühzeitig.

Aufbewahrung. Bewahren Sie die Datenbank-Dumps und die erzeugten PDFs so lange auf, wie es Ihre Vorschriften verlangen. Das PDF ist das tatsächlich versendete Dokument. Dieses Dokument ist maßgeblich, wenn eine Rechnung jemals beanstandet wird.

Eine Änderungshistorie. Es ist sinnvoll, nachweisen zu können, wer eine Rechnung wann bearbeitet hat. Dieser Punkt unterscheidet sich zwischen den Anwendungen am stärksten. Invoice Ninja führt ein Aktivitätsprotokoll pro Datensatz.

Strukturierte elektronische Rechnungen sind in Teilen der EU inzwischen eine echte Anforderung und kein optionales Zusatzmerkmal mehr. Invoice Ninja erzeugt die gängigen Formate, darunter ZUGFeRD und XRechnung, Facturae, FatturaPA und das generische EN16931. Der Versand über das Peppol-Netzwerk von einer selbst gehosteten Instanz erfolgt über den eigenen Access Point von Invoice Ninja: Sie registrieren Ihr Unternehmen dort und kaufen pro Übermittlung Credits. Seit August 2026 ist dies daher ein kostenpflichtiger Dienst. Kimai unterstützt dieselben Formate über sein kostenpflichtiges Plugin. Die anderen drei Anwendungen erzeugen derzeit überhaupt keine strukturierten elektronischen Rechnungen. Das ist der wichtigste Grund, Invoice Ninja zu wählen, wenn Sie innerhalb der EU Rechnungen ausstellen.

FAQ

Sollte ich Crater oder InvoiceShelf installieren?

InvoiceShelf. Im Standard-Branch von Crater gab es seit 741 Tagen keinen Commit (Stand: 21. August 2026), und der eigene Issue-Tracker verweist auf den Fork. InvoiceShelf verwendet dieselbe AGPL-3.0-Lizenz und dasselbe Datenmodell. Der Wechsel ist daher eine Datenbankmigration und keine Neuentwicklung. Jede Anleitung, die weiterhin Crater empfiehlt, wurde geschrieben, bevor das Projekt inaktiv wurde.

Kann ich Invoice Ninja für mein eigenes Unternehmen verwenden, ohne dafür zu bezahlen?

Ja. Die selbst gehostete Version von Invoice Ninja ist unter der Elastic License 2.0 kostenlos voll funktionsfähig. Dazu gehören wiederkehrende Rechnungen, das Kundenportal und Payment-Gateways. Zwei Dinge kosten Geld. Um das Invoice-Ninja-Branding auf kundenseitigen Seiten zu entfernen, benötigen Sie die White-Label-Lizenz. Nach eigenen Angaben des Projekts kostet sie im August 2026 "$40 per year". Das Versenden elektronischer Rechnungen über das Peppol-Netzwerk wird separat abgerechnet. Die Lizenz verbietet den Betrieb der Software als gehosteten Dienst für andere Personen.

Warum landen meine Rechnungs-E-Mails im Spam-Ordner?

Fast immer, weil die Nachricht für die Domain in ihrer From-Adresse nicht authentifiziert ist. Senden Sie über ein SMTP-Relay und nicht direkt vom VPS. Veröffentlichen Sie anschließend SPF- und DMARC-Records für Ihre Domain und fügen Sie den DKIM-Record unter dem Selector hinzu, den Ihnen das Relay nennt. Verwenden Sie Ihre eigene Adresse in From und setzen Sie den Kunden in Reply-To. Wenn Sie die Adresse des Kunden als Absender festlegen, weist Gmail die Nachricht mit 550 5.7.1 Unauthenticated email from example.com is not accepted due to domain's DMARC policy zurück. Bestätigen Sie die Korrektur, indem Sie dkim=pass und spf=pass im Authentication-Results-Header einer Testnachricht finden.

Welche Lösung sollte ich wählen, wenn ich nach Stunden abrechne?

Kimai. Es ist in erster Linie eine Zeiterfassung. Die Rechnung wird daher aus genehmigten Zeiterfassungseinträgen erzeugt, und die Positionen enthalten die von Ihnen erfasste Arbeit. Die Vorlagen sind DOCX-, ODS- oder XLSX-Dateien, die Sie in einem Textverarbeitungsprogramm gestalten. Das ist einfacher als die Bearbeitung von CSS. Der Nachteil ist, dass Kimai kein Kundenportal und kein Payment-Gateway besitzt. Sie versenden daher das PDF per E-Mail und erhalten die Zahlung per Überweisung. Invoice Ninja erfasst ebenfalls Arbeitszeit und besitzt ein Portal. Wählen Sie diese Lösung, wenn Ihnen Online-Kartenzahlungen wichtiger sind als detaillierte Zeiterfassung.

Was muss ich genau sichern?

Die Datenbank, das Storage-Volume mit Logos und erzeugten PDFs, die Environment-Datei sowie die als normale Dateien gespeicherten gerenderten PDFs. Die Environment-Datei wird häufig übersehen. Laravel-Anwendungen wie Invoice Ninja und InvoiceShelf verschlüsseln gespeicherte Zugangsdaten mit APP_KEY. Wenn Sie die Datenbank neben einem neu erzeugten Schlüssel wiederherstellen, sind die Einstellungen Ihres Payment-Gateways nicht mehr lesbar. Stellen Sie die vollständige Sicherung einmal in einer temporären Instanz wieder her und öffnen Sie eine alte Rechnung. Nur so können Sie sicher feststellen, dass die Sicherung funktioniert.

#invoicing#self-hosting#small-business#docker#accounting