- PHP 97.9%
- Shell 1.7%
- CSS 0.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| actions | ||
| components | ||
| docs/superpowers | ||
| includes | ||
| install | ||
| pages | ||
| public | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| backup_cron.php | ||
| CHANGELOG.md | ||
| CONTRIBUTING.md | ||
| deploy.sh | ||
| index.php | ||
| install.sh | ||
| LICENSE | ||
| login.php | ||
| login_totp.php | ||
| logout.php | ||
| oidc_callback.php | ||
| README.md | ||
LagerPro
Webbasierte Lagerverwaltungs-Applikation für kleine und mittlere Betriebe. Vollständig DSGVO-konform – alle Ressourcen lokal gebündelt, keine externen CDNs.
Features
- Artikelverwaltung – Erstellen, Bearbeiten, Löschen mit Bildern, Standort und Preisen
- Preismodul – Einkaufs-/Verkaufspreis, Rabatt (bidirektional), Marge-Anzeige, Änderungsjournal, REST-API
- Benutzerverwaltung – Rollen & Berechtigungen (Admin, Operator, Benutzer)
- Sidebar-Sortierung – Per Drag & Drop individuell anpassbar; globale Vorgabe durch Admin in den Einstellungen
- Responsives Layout – Settings, Backup und Import nutzen auf breiten Bildschirmen ein 2-Spalten-Grid
- Zwei-Faktor-Auth – TOTP (Google Authenticator, Authy, etc.)
- SSO – Authentik OIDC-Integration mit Gruppen-Mapping
- Import / Export – CSV und JSON; REST-API für externe Systeme
- Backup – Datenbank-Backups direkt über die Oberfläche
- QR-Codes – Für jeden Artikel generierbar
- DSGVO-konform – Nur technisch notwendige Session-Cookies, keine Tracker
Voraussetzungen
| Komponente | Version |
|---|---|
| PHP | 8.0+ (empfohlen: 8.3/8.4) |
| Webserver | nginx oder Apache2 |
| Datenbank | MariaDB / MySQL oder SQLite |
| PHP-Extensions | pdo, pdo_mysql/pdo_sqlite, gd, mbstring, curl, openssl |
Installation
# Repository klonen
git clone https://gitlab.terpotiz.priv.at/bruckner/lagerpro.git
cd lagerpro
# Installer ausführen (als root) – beide Varianten funktionieren:
sudo bash install/install.sh
# oder alternativ:
sudo . ./install.sh
Der Installer richtet automatisch ein:
- PHP-FPM
- nginx oder Apache2 mit Sicherheits-Headern
- MariaDB oder SQLite
- Verzeichnisstruktur und Berechtigungen (
*.sh→ 700)
Reinstall / Update: Bestehende config.php wird standardmäßig beibehalten – DB-Credentials werden daraus übernommen, kein Passwort-Mismatch.
Standard-Login nach Erstinstallation: admin / password123 → sofort ändern!
Konfiguration
Die Konfiguration liegt in config/config.php (wird vom Installer angelegt, nicht im Repository).
E-Mail und SSO-Einstellungen sind zusätzlich über die Admin-Oberfläche unter Einstellungen konfigurierbar.
SSO / Authentik
- In Authentik eine OAuth2/OIDC-Applikation anlegen
- Redirect URI:
https://lagerpro.example.com/oidc_callback.php - Scopes:
openid,email,profile,groups - In LagerPro → Einstellungen → SSO / Authentik konfigurieren
Administrator-Login IP-Allowlist
Bei aktivem SSO kann der lokale Admin-Fallback-Login auf bestimmte IPs beschränkt werden:
- Einstellungen → Administrator-Login IP-Allowlist – Checkbox + IP-Liste (eine pro Zeile, CIDR erlaubt)
- Abschnitt nur sichtbar wenn SSO-Modul aktiv und SSO eingeschaltet (
sso_enabled = true) - Leer = alle IPs erlaubt
- Bei gesperrter IP: Button wird nicht angezeigt + POST blockiert
Module
Unter Module können Funktionen global aktiviert oder deaktiviert werden:
| Modul | Beschreibung |
|---|---|
| 2FA / TOTP | Zwei-Faktor-Authentifizierung (deaktiviert wenn SSO-Modul aktiv und sso_enabled = true) |
| SSO / Authentik | OIDC Single Sign-On |
| Datenimport | CSV/JSON-Import |
| Backup | Datenbank-Backups |
| DB-Administration | Adminer-Datenbankzugriff |
| Öffentliche Suche | Unangemeldeter Zugriff auf index.php; wenn deaktiviert → Redirect zu Login |
| Lager-Statistik | Statistik-Dashboard mit KPIs und Charts (Chart.js lokal gebundelt) |
| Admin-Dashboard | System/Benutzer-Übersicht für Admins (nur mit MANAGE_USERS-Berechtigung) |
| Preismodul | Preisfelder pro Artikel, Rabatt-Berechnung, Marge, Änderungsjournal, REST-API (einzelne Felder deaktivierbar) |
REST-API (Preismodul)
Wenn das Preismodul und die Preis-API unter Einstellungen → Module aktiv sind:
# Alle Artikel mit Preisen
curl -H "X-API-Key: <key>" https://lagerpro.example.com/public/api.php?action=articles
# Preise eines Artikels aktualisieren
curl -X PUT -H "X-API-Key: <key>" -H "Content-Type: application/json" \
-d '{"selling_price": 29.99, "purchase_price": 12.50}' \
"https://lagerpro.example.com/public/api.php?action=prices&id=<uuid>"
# Vollexport
curl -H "X-API-Key: <key>" https://lagerpro.example.com/public/api.php?action=backup
API-Key wird unter Einstellungen → Module generiert und angezeigt.
Automatisches Backup (Cron)
# In crontab eintragen (täglich 02:00 Uhr)
0 2 * * * /usr/bin/php /var/www/lagerpro/backup_cron.php
Externe Abhängigkeiten
Alle Abhängigkeiten sind lokal gebündelt – kein Internetzugang erforderlich:
| Komponente | Lizenz |
|---|---|
| Tailwind CSS | MIT |
| PHPQRCode | LGPL-3.0 |
| Inter Schriftart | SIL OFL 1.1 |
Lizenz
Proprietär – siehe LICENSE.