| apache | ||
| migrations | ||
| public | ||
| scripts | ||
| src | ||
| .env.example | ||
| .gitignore | ||
| activate.sh | ||
| Changes.md | ||
| composer.json | ||
| docker-compose.yml | ||
| Dockerfile | ||
| install.sh | ||
| LICENSE.md | ||
| README.md | ||
| steuerkram.service | ||
Steuerkram
Self-hosted Buchhaltungs- und Steueranwendung für deutsche Freiberufler und Kleinunternehmer. Entwickelt als datensouveräne Alternative zu SaaS-Diensten.
Funktionsumfang
- Kontenrahmen SKR03 – vollständiger Kontenrahmen mit ~80 vorbesetzten Konten (CRUD)
- Belegverwaltung – Upload von PDF, PNG, TIFF und ZUGFeRD-XML; SHA-256 Integritätsprüfung
- Buchungen – doppelte Buchführung; GoBD-konforme Trigger verhindern nachträgliche Manipulation
- Kundenverwaltung – CRUD
- Ausgangsrechnungen – DIN 5008 Layout, PDF-Export via mPDF
- UStVA – Kennzahlen-Berechnung aus Buchungen, ELSTER XML-Export
- EÜR – Jahresauswertung mit PDF-Export
- Einstellungen – Firmendaten, Logo, ELSTER-Steuernummer
Tech Stack
Dieses Projekt wurden mit Unterstützung von Claude Code entwickelt.
| Schicht | Technologie |
|---|---|
| Webserver | Apache 2.4 |
| Backend | PHP 8.3 (MVC, kein Framework) |
| Datenbank | MariaDB 11 |
| PDF-Generierung | mPDF 8.x |
| Frontend | HTML, CSS, JavaScript (keine Bibliotheken) |
| Deployment | Docker / Docker Compose |
Voraussetzungen
- Docker ≥ 24
- Docker Compose ≥ 2.20 (in neueren Docker-Versionen enthalten)
- Git
Installation
Automatische Installation
Das Script install.sh übernimmt die gesamte Installation: es erkennt die Linux-Distribution, installiert git, curl und Docker, klont das Repository in das gewünschte Verzeichnis und legt die .env-Datei an.
Das Script muss vor dem Klonen des Repositories heruntergeladen werden – es erledigt das Klonen selbst:
curl -fsSL https://codeberg.org/fds2610/Steuerkram/raw/branch/main/install.sh -o install.sh
sudo bash install.sh
Das Script muss als root ausgeführt werden, da es Pakete installiert und ggf. den Docker-Dienst aktiviert. Mit
sudo bash install.shfunktioniert das ohne dauerhaft als root angemeldet zu sein.
Nach der Installation die .env-Datei im gewählten Installationsverzeichnis anpassen (siehe Hinweis am Ende des Scripts) und anschließend die Container starten:
cd /opt/Steuerkram # oder das gewählte Verzeichnis
docker compose up -d
Manuelle Installation
1. Repository klonen
git clone <repository-url> steuerkram
cd steuerkram
2. Zugangsdaten anpassen
Öffne docker-compose.yml und ändere die folgenden Umgebungsvariablen im web-Service:
environment:
AUTH_USER: admin # Login-Benutzername
AUTH_PASS: changeme # Login-Passwort – UNBEDINGT ändern!
APP_SECRET: change-this-in-production # Zufälligen langen String eintragen
Außerdem die Datenbankpasswörter in beiden Services (web und db) aufeinander abstimmen, falls gewünscht.
3. Container starten
docker compose up -d
Beim ersten Start werden automatisch:
- die Datenbank initialisiert (
migrations/001_initial_schema.sql) - der SKR03-Kontenrahmen eingespielt (
migrations/002_seed_skr03.sql) - das Docker-Image mit PHP-Abhängigkeiten (mPDF) gebaut
4. Anwendung aufrufen
http://localhost:8080
Login mit den in Schritt 2 gesetzten Zugangsdaten.
5. Firmendaten hinterlegen
Nach dem ersten Login unter Einstellungen Firmendaten, Logo und ELSTER-Steuernummer eintragen. Diese Angaben erscheinen auf Ausgangsrechnungen und im EÜR-Export.
Port ändern
Der Standard-Port ist 8080. Um ihn zu ändern, passe in docker-compose.yml die ports-Zeile an:
ports:
- "9090:80" # Beispiel: Port 9090 auf dem Host
Datenpersistenz
| Pfad | Inhalt |
|---|---|
./data/mariadb/ |
MariaDB-Datenbankdateien |
Docker Volume uploads |
Hochgeladene Belege |
Beide Pfade liegen außerhalb des Containers und bleiben bei docker compose down erhalten.
Backup
bash scripts/backup.sh
Das Skript erstellt ein Dump der Datenbank sowie ein Archiv der Uploads im Verzeichnis backups/.
Update
git pull
docker compose up -d --build
GoBD-Hinweise
- Gebuchte Sätze können nicht geändert oder gelöscht werden (MariaDB
BEFORE UPDATE/DELETETrigger). - Korrekturen erfolgen ausschließlich über Stornobuchungen.
- Jeder hochgeladene Beleg erhält einen SHA-256 Hash zur Integritätsprüfung.
Lizenz
Dieses Projekt steht unter der MIT-Lizenz – siehe LICENSE.md für Details.