Self-hosted-Fakturierungssoftware im Vergleich
Invoice Ninja, InvoiceShelf, InvoicePlane, Kimai und ERPNext auf einem VPS: Wiederkehrende Rechnungen, Steuern, Kundenportal, Zahlungs-Gateways und Lizenzen.
Welche selbst gehostete Fakturierungssoftware sollten Sie auswählen?
Bei selbst gehosteter Fakturierungssoftware gibt es auf einem VPS fünf realistische Optionen. Sie sind keine direkten Alternativen. 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 aufwendige Orchestrierung benötigt. Kimai stellt erfasste Arbeitszeiten statt einzelne Rechnungspositionen in Rechnung. ERPNext ist ein vollständiges Buchhaltungssystem, das zusätzlich Rechnungen erstellt.
Zwei Probleme bringen eine selbst gehostete Fakturierung 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 nichts. Das zweite sind Backups. Bei dieser selbst gehosteten Datenbank führt ein Verlust zu einem steuerlichen Problem und nicht nur zu Unannehmlichkeiten.
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 source-available, wobei die Nutzung erheblichen Einschränkungen unterliegt.
Die fünf Optionen und für wen sie 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 Zahlungsgateways einschließlich Stripe und PayPal sind enthalten. 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 eigenen Angaben bietet das Projekt „eine White-Label-Lizenz für 40 $ pro Jahr an, mit der sich das Invoice-Ninja-Branding aus den kundenorientierten Bereichen der Anwendung entfernen lässt“. Dieser Preis gilt im August 2026.
Wählen Sie diese Option, wenn Sie das vollständigste Produkt wünschen und den Betrieb des umfangreichsten Stacks akzeptieren.
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 laufen über den Stripe-Checkout.
Wählen Sie diese Option, wenn Sie eine kleine, vollständig quelloffene Anwendung wünschen und keine dreißig Zahlungsgateways 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. Vorlagen bestehen daher aus HTML und CSS. Kunden erhalten einen Gast-Link, über den sie eine Rechnung anzeigen und bezahlen können.
Der Nachteil sind die Zahlungen. In der Dokumentation steht ausdrücklich, 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 zu der 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 verwenden.
Kimai
Eine Zeiterfassung unter AGPL-3.0, die aus Stundenzetteln Rechnungen erzeugt. Sie ist die richtige Wahl für alle, die Arbeitsstunden abrechnen. Rechnungsvorlagen werden als DOCX-, ODS- oder XLSX-Dateien hochgeladen. Laut Dokumentation sind dies die einzigen akzeptierten Formate. Anschließend werden sie in PDF oder HTML gerendert. Sie erstellen das Layout der Rechnung in einem Textverarbeitungsprogramm, statt CSS zu schreiben. Das fällt den meisten Benutzern leichter.
Kimai hat weder ein Kundenportal noch ein Zahlungsgateway. Sie versenden daher 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. Unterstützt werden 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 Softwarekategorie. Eine Verkaufsrechnung ist hier ein Dokumenttyp innerhalb eines vollständigen Buchhaltungssystems mit Kontenplan, Buchungssätzen, Lagerverwaltung und Lohnabrechnung. Dies ist die richtige Wahl, sobald Rechnungen nicht mehr die gesamte Aufgabe darstellen. Für einen Freelancer mit acht Kunden ist die Anwendung deutlich überdimensioniert. Die Einrichtung ist ein eigenes Projekt, das unter ERPNext auf einem VPS betreiben behandelt 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 durch eine geplante Aufgabe, php artisan schedule:run, erstellt. Diese Aufgabe muss von außerhalb der Anwendung jede Minute aufgerufen werden. Wenn kein Aufruf erfolgt, zeigt die Liste der wiederkehrenden Rechnungen weiterhin ein nächstes Versanddatum an. Dieses Datum verstreicht einfach. Es wird keine Rechnung erstellt. Es wird auch kein Fehler protokolliert, weil kein Code ausgeführt wurde.
Legen Sie daher nach dem Erstellen Ihrer ersten wiederkehrenden Rechnung das nächste Versanddatum einige Minuten in die Zukunft und warten Sie ab. Wenn keine Rechnung eingeht, läuft der Scheduler nicht. Bei einer Docker-Installation bedeutet das normalerweise, dass der Cron- oder Scheduler-Dienst in der Compose-Datei nie gestartet wurde oder beendet wurde.
docker compose ps
docker compose logs --tail 50Jeder Dienst in der Datei sollte running melden. Ein Dienst im Status exited ist der Dienst, dessen Logs Sie lesen müssen.
Mehrwährungen und Steuern: Was Sie vor der Entscheidung prüfen sollten
Funktionslisten nennen „Mehrwährungen“, meinen damit aber sehr unterschiedliche Dinge. Führen Sie diese vier Prüfungen in einer Demo-Instanz mit realen Zahlen aus Ihrem eigenen Unternehmen durch. Einen Fehler entdeckt sonst eher Ihr Steuerberater als Sie.
- Speichert die Rechnung den Wechselkurs, der am Ausstellungsdatum galt? Das ist erforderlich. Wenn die Anwendung die Summen anhand eines aktuellen Wechselkurses neu berechnet, ändern sich die Berichte des letzten Quartals jedes Mal, wenn Sie sie öffnen. Ihre Buchhaltung stimmt dann nicht mehr mit den bereits eingereichten Unterlagen überein.
- Wird die Steuer pro Position, pro Rechnung oder auf beiden Ebenen angewendet? Ein einheitlicher Steuersatz auf Rechnungsebene funktioniert nur so lange, bis eine Position steuerbefreit oder mit 0 % besteuert wird.
- Können Sie Preise sowohl inklusive als auch zuzüglich Steuern eingeben? Eine nachträgliche Umrechnung führt pro Position zu Rundungsdifferenzen von einem Cent. Über ein Jahr summieren sich diese Centbeträge.
- Was zeigt das Dokument für einen Kunden in einem anderen Land, der keine VAT schuldet? Der Befreiungshinweis muss auf der Rechnung gedruckt werden, nicht nur eine 0 in der Steuer-Spalte.
Invoice Ninja und ERPNext decken alle vier Punkte ab. InvoiceShelf führt Steuern und Mehrwährungen als Funktionen auf. InvoicePlane und Kimai sind einfacher. Testen Sie sie daher mit Ihrer schwierigsten Rechnung und nicht mit der einfachsten.
Kundenportal und Zahlungs-Gateways
Ein Kundenportal ist eine Seite, auf der ein Kunde seine Rechnungen sieht, die PDF-Datei herunterlädt und bezahlt. Das ist wichtiger, als es zunächst klingt, weil Zahlungserinnerungen per E-Mail mehr Zeit kosten als die Rechnungserstellung.
Invoice Ninja ist in diesem Bereich am leistungsfähigsten. Es bietet ein vollständiges Portal, viele Gateways, gespeicherte Zahlungsmethoden und automatische Abrechnung für wiederkehrende 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 keines dieser Merkmale. Die PDF-Datei wird daher als Anhang versendet.
Ein Punkt wird häufig verwechselt. Das Self-Hosting der Rechnungsanwendung bedeutet nicht, dass Sie Kartennummern speichern. Beim Stripe-Checkout wird der Kunde zu Stripe weitergeleitet und gibt die Karte dort ein. Ihr VPS sieht die Kartennummer nie. Ihr PCI-Umfang (Payment Card Industry) bleibt gerade deshalb klein, weil Sie das Zahlungsformular nicht selbst implementiert haben. Wenn Sie später mehr als einen Zahlungsdienstleister benötigen oder Zahlungen nach Land weiterleiten möchten, gehört das in eine separate Schicht, beispielsweise Self-Hosted-Zahlungsorchestrierung mit Hyperswitch.
PDF-Qualität und die Vorlage, die Sie später 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. Dabei handelt es sich um reines PHP, das wenig Ressourcen benötigt, allerdings einige moderne CSS-Funktionen ignoriert. Kimai verfolgt den entgegengesetzten Ansatz und lässt Sie eine DOCX- oder ODS-Datei hochladen. Das Layout wird dadurch in LibreOffice oder Word von jemandem erstellt, der noch nie ein Stylesheet geschrieben hat.
Wenn Ihnen ein gestaltetes Rechnungsdokument wichtig ist und CSS keine Rolle spielt, ist der Ansatz von Kimai die bessere Wahl. Wenn Sie die Vorlage in der Versionsverwaltung speichern 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 Ihre eigenen Kunden abrechnen. Die Unterschiede zeigen sich, sobald Sie darüber hinausgehen.
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 Benutzern Zugriff auf einen wesentlichen Teil der Funktionen der Software gewährt.
Sie dürfen die Funktion zur Lizenzschlüsselprüfung in 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 und kein Patch am Quellcode ist.
InvoiceShelf, Kimai und Crater stehen unter der AGPL-3.0. Die kommerzielle Nutzung ist kostenlos, und es gibt keine darüberliegende Lizenzstufe. Die Verpflichtung ergibt sich aus Abschnitt 13: Wenn Sie den Code ändern und anderen Personen Ihre geänderte Version über ein Netzwerk zur Verfügung stellen, müssen Sie ihnen den Quellcode Ihrer Änderungen anbieten. Eine unveränderte Instanz ist bereits durch den öffentlichen Quellcode des Upstream-Projekts abgedeckt. Daher müssen die meisten Self-Hoster diese Verpflichtung nie umsetzen.
InvoicePlane steht unter der MIT-Lizenz. Damit gelten in dieser Gruppe die geringsten Verpflichtungen. Die README weist jedoch darauf hin, dass der Name und das Logo beim Projekt verbleiben.
ERPNext steht unter der GPL-3.0. Änderungen, die Sie weitergeben, müssen Sie ebenfalls zur Verfügung stellen. Der private Betrieb ist dagegen mit keiner Verpflichtung verbunden.
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. Viele Anleitungen empfehlen die Anwendung weiterhin. Im Standardbranch gab es seit 741 Tagen keinen Commit mehr.
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 fortführt. 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. Falls 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 --showKopieren Sie diesen Schlüssel in die Datei env im Repository und tragen Sie dort außerdem Ihren echten APP_URL ein. Setzen Sie anschließend die vom Image erwarteten Eigentumsrechte und starten Sie die Anwendung.
chmod 755 docker/app/public
sudo chown -R 1500:1500 docker/app
docker compose up -dDie Eigentümerschaft 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 die Anwendung starten. Jedes darin enthaltene Passwort ist ein Platzhalter, und die Kommentare in der Datei weisen ausdrücklich 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 die Anwendung anschließend.
docker compose up -dDie Anwendung veröffentlicht Port 8090 auf dem Host und stellt Port 8080 im Container bereit. Schalten Sie einen Reverse Proxy mit TLS (Transport Layer Security) davor, bevor Sie den ersten Client darauf zugreifen lassen.
Produktions-Compose-Datei für Kimai 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. ADMINMAIL und ADMINPASS erstellen beim ersten Start den ersten Administrator. Ändern Sie dieses Passwort anschließend in der Oberfläche und entfernen Sie es wieder aus der Datei.
InvoicePlane verfügt über 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.
Senden Sie Rechnungs-E-Mails nicht über die eigene IP-Adresse des VPS. Eine neue VPS-IP-Adresse hat keine Versandhistorie. Große Empfänger behandeln die erste Nachricht von einer unbekannten Adresse aus einem Hosting-Netz standardmäßig als verdächtig. Senden Sie über ein SMTP (simple mail transfer protocol)-Relay auf einer Domain, für die Sie authentifiziert sind. Die vollständige Einrichtung ist ein eigener Leitfaden. Zuverlässiger E-Mail-Versand aus einer selbst gehosteten Anwendung behandelt das Relay, die DNS-Einträge und die Tests.
Bei den meisten Rechnungs-Setups ist die From-Adresse die 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 als From-Adresse zu verwenden, wirkt 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 die Abweichung direkt zurück:
550 5.7.1 Unauthenticated email from example.com is not accepted due to domain's DMARC policyVerwenden Sie Ihre eigene Adresse als From-Adresse und tragen Sie den Kunden in Reply-To ein. Prüfen Sie Ihre veröffentlichten Einträge, bevor Sie echte Nachrichten senden.
dig +short TXT example.com
dig +short TXT _dmarc.example.com
dig +short TXT selector1._domainkey.example.comDer erste Befehl sollte einen SPF (sender policy framework)-Eintrag zurückgeben, der Ihr Relay nennt. Der zweite sollte eine DMARC (domain-based message authentication, reporting and conformance)-Richtlinie zurückgeben. Der dritte Eintrag 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 von Ihnen gesendete Nachricht fehl.
Senden Sie anschließend eine echte Rechnung an ein eigenes Konto bei einem großen Anbieter und lesen Sie die vollständigen Header. dkim=pass und spf=pass im Authentication-Results-Header sind der einzige relevante Nachweis. Das eigene "sent"-Flag 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, die Dateien erneut herunterzuladen. Selbst ein selbst gehosteter Fotoserver wie PhotoPrism oder Immich enthält normalerweise eine zweite Kopie der Originale, die noch auf dem Telefon vorhanden sind, mit dem sie aufgenommen wurden. 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. Und die als normale Dateien gespeicherten gerenderten PDFs, weil sich ein PDF auch in zehn Jahren noch ohne die Anwendung öffnen lässt, mit der es erzeugt wurde.
Die Umgebungsdatei ist wichtiger, als viele erwarten. Laravel verschlüsselt darin gespeicherte vertrauliche Werte, einschließlich der Zugangsdaten für das Payment-Gateway, mit dem APP_KEY aus dieser Datei. Stellen Sie die Datenbank neben einem neu erzeugten Schlüssel wieder her, lassen sich diese Werte nicht entschlüsseln. Ihre Rechnungen sind vollständig vorhanden, aber die Gateway-Einstellungen sind unlesbar.
Ein Dump aus dem InvoiceShelf-Stack sieht so aus. Der Datenbankdienst läuft mariadb:10, daher wird das Tool im Container mit mariadb-dump aufgerufen.
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ährend des Dumps weiter Anfragen bedienen. -T verhindert, dass Docker ein Terminal zuweist. Andernfalls könnte die umgeleitete Ausgabe beschädigt werden und eine Dump-Datei entstehen, die sich nicht importieren lässt.
Übertragen Sie die Backups nach einem Zeitplan mit verschlüsselten restic-Backups in einen externen Speicher vom Server weg. Legen Sie die Aufbewahrungsdauer so fest, dass sie den von Ihrem Steuerberater genannten Zeitraum abdeckt.
Stellen Sie die Sicherung anschließend wieder her. Starten Sie den Dump in einem temporären 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 das Backup funktioniert.
Was Ihr Steuerberater von Ihnen benötigt
Holen Sie keine Steuerberatung aus einem Tutorial ein. Im Folgenden steht, welche Daten diese Software erzeugen kann. Sie können diese Liste der Person vorlegen, die Sie berät.
Exportierbare Daten. Sie sollten Ihre Rechnungen und Zahlungen über die Oberflä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 keine Exportdatei, sondern eine Sicherung, weil Ihr Steuerberater ihn nicht öffnen kann.
Unveränderliche Nummerierung. Rechnungsnummern sollten lückenlos aufeinanderfolgen und niemals wiederverwendet werden. Das Löschen einer Rechnung erzeugt eine Lücke, die anschließend erklärt werden muss. Stornieren Sie die Rechnung stattdessen oder stellen Sie eine Gutschrift aus. 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 deshalb frühzeitig danach.
Aufbewahrung. Bewahren Sie die Datenbank-Dumps und die erzeugten PDFs so lange auf, wie es Ihre Vorschriften verlangen. Das PDF ist das Dokument, das tatsächlich versendet wurde. Dieses Dokument ist maßgeblich, wenn eine Rechnung angefochten wird.
Eine Änderungshistorie. Es ist sinnvoll, nachweisen zu können, wer eine Rechnung wann bearbeitet hat. Zwischen diesen Anwendungen bestehen dabei die größten Unterschiede. Invoice Ninja führt ein Aktivitätsprotokoll für jeden Datensatz.
Strukturierte elektronische Rechnungen sind in Teilen der EU inzwischen eine tatsächliche Anforderung und kein optionales Zusatzfeature mehr. Invoice Ninja erzeugt die gängigen Formate, darunter ZUGFeRD und XRechnung, Facturae, FatturaPA sowie das allgemeine Format EN16931. Der Versand über das Peppol-Netzwerk von einer selbst gehosteten Instanz läuft über den eigenen Access Point von Invoice Ninja. Sie registrieren Ihre Organisation dort und kaufen pro Übermittlung Credits. Seit August 2026 ist dies ein kostenpflichtiger Dienst. Kimai unterstützt dieselben Formate über sein kostenpflichtiges Plugin. Die drei anderen Anwendungen erzeugen derzeit überhaupt keine strukturierten elektronischen Rechnungen. Das ist der wichtigste einzelne Grund, Invoice Ninja zu wählen, wenn Sie innerhalb der EU Rechnungen stellen.
FAQ
Sollte ich Crater oder InvoiceShelf installieren?
InvoiceShelf. Der Standard-Branch von Crater enthält seit 741 Tagen keinen Commit (Stand: 21. August 2026). Der eigene Issue-Tracker verweist ebenfalls auf den Fork. InvoiceShelf verwendet dieselbe AGPL-3.0-Lizenz und dasselbe Datenmodell. Der Wechsel zwischen beiden ist daher eine Datenbankmigration und keine Neuentwicklung. Jede Anleitung, die weiterhin Crater empfiehlt, wurde verfasst, bevor das Projekt inaktiv wurde.
Kann ich Invoice Ninja für mein eigenes Unternehmen verwenden, ohne 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. Zum Entfernen der Invoice-Ninja-Marken auf kundenseitigen Seiten benötigen Sie die White-Label-Lizenz. Nach den eigenen Angaben des Projekts kostet sie im August 2026 "$40 per year". Der Versand 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 statt direkt vom VPS. Veröffentlichen Sie anschließend SPF- und DMARC-Einträge für Ihre Domain. Fügen Sie außerdem den DKIM-Eintrag unter dem Selector hinzu, den Ihr Relay vorgibt. Verwenden Sie Ihre eigene Adresse in From und tragen Sie den Kunden in Reply-To ein. Wenn Sie die Adresse des Kunden als Absender festlegen, lehnt Gmail die Nachricht mit 550 5.7.1 Unauthenticated email from example.com is not accepted due to domain's DMARC policy ab. Überprüfen Sie die Korrektur, indem Sie dkim=pass und spf=pass im Authentication-Results-Header einer Testnachricht suchen.
Welche Lösung sollte ich wählen, wenn ich nach Stunden abrechne?
Kimai. Kimai ist in erster Linie eine Zeiterfassung. Die Rechnung wird daher aus freigegebenen Zeiterfassungseinträgen erzeugt. Die Positionen entsprechen der von Ihnen erfassten Arbeit. Vorlagen sind DOCX-, ODS- oder XLSX-Dateien, die Sie in einem Textverarbeitungsprogramm erstellen. Das ist einfacher als die Bearbeitung von CSS. Der Nachteil ist, dass Kimai weder ein Kundenportal noch ein Payment-Gateway bietet. Sie senden die PDF-Datei per E-Mail und erhalten die Zahlung per Überweisung. Invoice Ninja erfasst ebenfalls Arbeitszeit und bietet ein Portal. Wählen Sie daher Invoice Ninja, wenn Online-Kartenzahlungen für Sie wichtiger sind als detaillierte Zeiterfassung.
Was muss ich genau sichern?
Die Datenbank, das Storage-Volume mit Logos und erzeugten PDF-Dateien, die Environment-Datei sowie die als normale Dateien gespeicherten gerenderten PDFs. Die Environment-Datei wird häufig vergessen. Laravel-Anwendungen wie Invoice Ninja und InvoiceShelf verschlüsseln gespeicherte Zugangsdaten mit APP_KEY. Wenn Sie eine Datenbank neben einem neu erzeugten Schlüssel wiederherstellen, sind die Einstellungen für Ihr Payment-Gateway nicht lesbar. Stellen Sie die vollständige Sicherung einmal in einer Wegwerfinstanz wieder her und öffnen Sie eine alte Rechnung. Nur so können Sie sicher feststellen, dass die Sicherung funktioniert.