01Voraussetzungen
Die Plattform ist bewusst anspruchslos gehalten. Sie läuft auf jedem Hoster, der einen modernen PHP-Stack mit MySQL bereitstellt. Eine eigene Domain ist nicht erforderlich — eine Subdomain oder ein Unterordner reichen.
| Komponente | Mindestanforderung | Empfohlen |
|---|---|---|
| PHP | 8.0 | 8.3 |
| MySQL | 5.7 | 8.0+ |
| MariaDB | 10.3 | 10.6+ |
| Webserver | Apache / Nginx / LiteSpeed | Apache 2.4 mit mod_rewrite |
| Speicher | 50 MB | 200 MB für Bilder & Backups |
| HTTPS | nicht erforderlich | dringend empfohlen |
PHP-Erweiterungen
Folgende PHP-Erweiterungen müssen aktiv sein. Auf den meisten Hostern sind sie es bereits:
pdo_mysql— Datenbankverbindungmbstring— Mehrbyte-String-Verarbeitung (Umlaute)json— JSON-Serialisierungsession— Login & Authentifizierunggdoderimagick— Bild-Upload & Thumbnails
02Installation in 4 Schritten
Vom Download bis zum ersten Login. Der Wizard erledigt fast alles selbst — du tippst nur die Datenbank-Zugangsdaten ein.
Schritt 1 — Dateien herunterladen
Lade das aktuelle ZIP von der Release-Seite herunter und entpacke es lokal:
# aktuelles Release herunterladen curl -O https://example.com/geschaeftsbuch-v4.7.zip # entpacken unzip geschaeftsbuch-v4.7.zip # Inhalt prüfen ls geschaeftsbuch/ # → 32 PHP-Dateien, assets/, includes/, api/, setup.php
Schritt 2 — Auf den Hoster laden
Lade den entpackten Ordner per FTP, SFTP oder SCP in das öffentliche Verzeichnis deines Hosters (meist htdocs/, public_html/ oder www/):
# mit SCP scp -r geschaeftsbuch/ user@dein-hoster.de:/var/www/ # oder per FTP-Client (FileZilla, Cyberduck, WinSCP) # Ziel: htdocs/ oder public_html/
Schritt 3 — Datenbank anlegen
Erstelle eine leere MySQL-Datenbank über das Hoster-Panel oder phpMyAdmin. Du brauchst:
- Den Datenbank-Namen (z. B.
db_12345_main) - Den Benutzernamen (z. B.
USER12345) - Das Passwort
- Den Host (meist
localhost, bei Lima-City:USERID.lima-db.de)
Schritt 4 — Setup-Wizard starten
Öffne im Browser:
https://deine-domain.de/setup.php
Der Wizard führt dich durch:
- Site-Title — wie soll dein Geschäft heißen? (z.B. „Mein Tabakhandel", „Westliche Pferderanche", „Familien-Farm"…)
- Datenbank-Verbindung — die vier Werte aus Schritt 3
- Verbindungstest — der Wizard prüft, ob er die Datenbank erreicht
- Erster Benutzer — Name & Passwort für den Admin-Account
setup.php nach erfolgreicher Installation vom Server entfernen. In config.php wird automatisch SETUP_COMPLETE = true gesetzt — der Wizard ist danach gesperrt, aber besser ist „weg".03Erstkonfiguration
Nach dem Setup ist die Plattform funktionsfähig — aber leer. Diese Reihenfolge hat sich für die ersten 30 Minuten bewährt:
- Mitarbeiter anlegen unter
Mitarbeiter → Neuer Eintrag. Auch wenn du allein arbeitest: einer reicht für den Anfang. - Berechtigungen prüfen unter
Berechtigungen. Die Standard-Rollen (Admin / Leitung / Mitarbeiter) sind sinnvoll vorbelegt — anpassen kannst du später. - Geschäftspartner / Lieferanten erfassen, falls du gleich Bestellungen anlegen willst.
- Erste Mitteilung ans Team — Geschäftsregeln, Hinweise, To-Dos.
- Module deaktivieren, die du nicht brauchst (siehe unten).
04config.php manuell bearbeiten
Wenn du Einstellungen nachträglich ändern willst (Datenbank wechseln, Site-Title anpassen, Sicherheitseinstellungen schärfen), bearbeitest du die Datei includes/config.php direkt:
<?php /** * Geschäftsbuch — Konfiguration */ // Datenbank-Einstellungen define('DB_HOST', 'localhost'); define('DB_NAME', 'mein_geschaeftsbuch'); define('DB_USER', 'mein_user'); define('DB_PASS', 'sicheres_passwort'); // Session-Einstellungen — pro Deployment einzigartig define('SESSION_NAME', 'mein_geschaeft_session'); define('SESSION_LIFETIME', 86400); // 24 Stunden // Branding define('SITE_TITLE', 'Mein Geschäft'); define('SITE_SUBTITLE', 'Geschaeftsverwaltung'); // Auslage — maximale Plätze define('AUSLAGE_MAX_PLAETZE', 100); // Zeitzone date_default_timezone_set('Europe/Berlin'); // Setup-Schutz — nicht ändern define('SETUP_COMPLETE', true); // Output Buffering — verhindert "headers already sent" ob_start(); // Error Reporting (Produktion: 0, Entwicklung: E_ALL) error_reporting(0); ini_set('display_errors', 0);
config.php in die .gitignore. Die Datei enthält Datenbank-Passwörter im Klartext.05Berechtigungen vergeben
Das Permissions-System ist das Herz der Plattform. Drei Standard-Rollen sind vorgegeben, weitere kannst du beliebig anlegen.
| Rolle | Geschäft | Personal | System |
|---|---|---|---|
| Admin | Voll | Voll | Voll inkl. Benutzer- & Modulverwaltung |
| Leitung | Voll | Voll außer Benutzerverwaltung | Lesen |
| Mitarbeiter | Lesen + Schnellverkauf | Eigene Schichten + Profil | Suche, To-Do, Notizen |
| Custom | Frei konfigurierbar — pro Modul, pro Aktion (Lesen / Schreiben / Löschen) | ||
Berechtigungen kannst du auf zwei Ebenen vergeben:
- Per Rolle — gilt für alle Mitarbeiter dieser Rolle. Sinnvoll für allgemeine Regelungen.
- Per Mitarbeiter (Override) — schaltet einzelne Module für einen einzelnen Mitarbeiter zusätzlich frei oder ab. Sinnvoll für Sonderfälle.
06Branding & Look
Jedes Deployment kann individuell gestaltet werden — vom Site-Title über Akzentfarben bis hin zu eigenen Logos. Drei Anpassungsebenen:
Ebene 1 — Texte
Site-Title und Untertitel werden über config.php gesetzt (siehe oben). Erscheinen im Browser-Tab, im Header und im Login.
Ebene 2 — Farbschema
Die Farben sind als CSS-Variablen in assets/css/style.css hinterlegt. Editiere die :root-Sektion:
:root { --accent: #f0a83e; /* Hauptakzent */ --accent-deep: #c98220; /* dunkler Akzent */ --bg: #0a0908; /* Hintergrund */ --surface: #141210; /* Panels */ --text: #f5f1e8; /* Haupttext */ }
Ebene 3 — Logo & Favicon
Logo und Favicon liegen unter assets/img/. Ersetze einfach die Dateien logo.svg und favicon.ico — die Plattform lädt automatisch das, was im Verzeichnis liegt.
07Module aktivieren / deaktivieren
Nicht jedes Geschäft braucht jedes Modul. Ein Tabakhandel braucht keine Stallverwaltung, eine Pferderanche keinen Schnellverkauf-POS. Module werden auf zwei Wegen abgeschaltet:
Variante A — Über die Berechtigungen
Wenn alle Rollen kein Recht für ein Modul haben, ist es de facto deaktiviert. Schnell, kein Code-Eingriff nötig.
Variante B — Datei entfernen
Wenn du das Modul gar nicht brauchst, kannst du die entsprechende PHP-Datei einfach löschen. Die Navigation prüft, welche Dateien existieren, und blendet fehlende automatisch aus.
# Beispiel: Schnellverkauf wird nicht gebraucht rm schnellverkauf.php # Modul ist sofort weg — auch aus der Navigation
08Modul-Rechte feinjustieren
Innerhalb eines aktiven Moduls kannst du jede Aktion einzeln freischalten oder sperren. Die Aktionsebenen sind durchgängig:
view— der Mitarbeiter sieht das Modul in der Navigation und kann Listen einsehencreate— neue Einträge anlegenedit— bestehende Einträge bearbeitendelete— Einträge löschen (Undo bleibt verfügbar)export— Daten als CSV / PDF exportieren
Beispiel: Eine Aushilfe darf das Kassenbuch sehen (view) und Buchungen anlegen (create), aber nichts ändern oder löschen. Genau das stellst du in der Rollenkonfiguration ein.
09Backup
Die Plattform speichert alle Geschäftsdaten in der MySQL-Datenbank. Backup heißt deshalb: Datenbank-Dump. Dazu Bilder und die config.php sichern, fertig.
Datenbank-Dump per CLI
# vollständiger Dump mysqldump -u DB_USER -p DB_NAME > backup_$(date +%Y-%m-%d).sql # mit Komprimierung mysqldump -u DB_USER -p DB_NAME | gzip > backup_$(date +%Y-%m-%d).sql.gz
Per phpMyAdmin
Datenbank auswählen → „Exportieren" → Format „SQL" → „OK". Die Datei landet im Download-Ordner.
Empfohlener Backup-Rhythmus
- Täglich — automatisch via Cron-Job, mindestens 7 Tage Aufbewahrung
- Wöchentlich — manuelle Sicherung lokal speichern
- Vor jedem Update — Pflicht, ohne Diskussion
10Updates einspielen
Updates kommen als ZIP. Der Ablauf ist immer derselbe:
- Backup machen. Datenbank dumpen,
config.phpkopieren. - ZIP entpacken in einen separaten Ordner.
- Alle Dateien außer
config.phpersetzen auf dem Server. - Erste Seite aufrufen. Module migrieren ihre Tabellen automatisch beim ersten Aufruf — neue Spalten werden ergänzt, neue Tabellen entstehen.
- Changelog lesen, falls Migrationsschritte oder Konfigurationsänderungen erforderlich sind.
config.example.php und ergänze nur neue Konstanten.11Troubleshooting
Die häufigsten Probleme und ihre Lösungen:
| Symptom | Ursache | Lösung |
|---|---|---|
| Weiße Seite | PHP-Fehler, aber display_errors ist aus |
In config.php kurzzeitig error_reporting(E_ALL) aktivieren, Fehlermeldung lesen, beheben, danach wieder aus |
| „Datenbank-Verbindung fehlgeschlagen" | Falsche Zugangsdaten oder DB-Server nicht erreichbar | Zugangsdaten in config.php prüfen. Bei Lima-City: Host muss auf USERID.lima-db.de enden |
| Setup-Wizard öffnet sich nicht | SETUP_COMPLETE steht bereits auf true |
config.php editieren: SETUP_COMPLETE auf false oder Konstante entfernen |
| Tabellen fehlen | Modul wurde noch nie aufgerufen | Modul einmal in der Navigation öffnen — die Tabelle wird beim ersten Zugriff angelegt |
| Bilder zu groß für Upload | PHP-Limit zu niedrig | In php.ini oder .htaccess: upload_max_filesize=10M und post_max_size=12M |
| Login schlägt sofort fehl | Session konnte nicht gestartet werden | Schreibrechte für session.save_path prüfen. Falls Output Buffering die Cookies frisst: ob_start() in config.php sicherstellen |
| Umlaute werden falsch dargestellt | Datenbank-Charset nicht UTF-8 | Datenbank auf utf8mb4_unicode_ci umstellen, in db.php ist die Verbindung schon UTF-8 |
| „Headers already sent" | Whitespace vor <?php oder fehlendes ob_start() |
Sicherstellen, dass config.php mit <?php beginnt — kein BOM, keine Leerzeichen davor |