14 KiB
Executable File
Inventarsystem
Aktuelle Version: 3.2.1
Ein modernes webbasiertes Inventarverwaltungssystem zur Verwaltung, Ausleihe, Reservierung und Rückgabe von Gegenständen. Das System richtet sich insbesondere an Bildungseinrichtungen, Organisationen und Labore.
Inhaltsverzeichnis
- Systemübersicht
- Hauptfunktionen
- Installation
- Docker Betrieb
- Erste Einrichtung
- Systembetrieb
- Benutzerverwaltung
- Artikelverwaltung
- Buchungssystem
- Backup & Wiederherstellung
- Wartung & Updates
- Versionsverwaltung
- Konfiguration
- Fehlerbehebung
- Systemanforderungen
- Lizenz Rechtliches & Datenschutz
Systemübersicht
Das Inventarsystem stellt folgende Wartungsskripte bereit:
| Skript | Beschreibung |
|---|---|
update.sh |
Aktualisiert Docker-Deployment aus GitHub Releases |
fix-all.sh |
Intelligentes Reparaturskript |
rebuild-venv.sh |
Python-Umgebung neu erstellen (nur Quellcode-Entwicklung) |
start.sh |
Dienste starten |
stop.sh |
Dienste stoppen |
restart.sh |
Dienste neu starten |
build-nuitka.sh |
Standalone-Build der App mit Nuitka erstellen |
Backup-DB.py |
Manuelles DB-Backup |
restore.sh |
Backup wiederherstellen |
manage-version.sh |
Versionssteuerung |
Hauptfunktionen
Benutzeranmeldung
- Sichere Passwortregeln (mindestens 6 Zeichen)
- Rollenbasiertes System
- Administrator
- Standardbenutzer
- Session-basierte Authentifizierung
Artikelverwaltung
- Artikel hinzufügen / löschen
- Ausleihen & Rückgabe
- Metadatenverwaltung
- Anschaffungsdaten (Jahr, Kosten)
- Mehrfach-Bildupload
- UUID-basierte Dateinamen
- Detaillierte Artikelansicht
Buchungssystem
- Konfliktprüfung
- Automatische Aktivierung
- Automatische Beendigung
- Kalenderansicht
- Perioden-Unterstützung (Schulstunden)
Barcode-Scanner
- Integrierter Scanner
- Schnelles Auffinden von Artikeln
- Mobile-optimiert
Filtersystem
- Dreistufige Filter
- Kombinierbare Suche
- Kategorie-Management
Administrator-Tools
- Benutzerverwaltung
- Ausleihprotokolle
- Artikel-Reset
- Standortverwaltung
Responsive Design
- Mobil optimiert
- Touch-freundlich
- Desktop-fähig
Installation
Voraussetzungen
- Python >= 3.7
- MongoDB
- pip
- Linux-System (empfohlen)
Installation (automatisch)
Option 1
wget -O - https://git.invario-software.eu/Invario/Inventarsystem/raw/branch/main/install.sh | sudo bash
Option 2
curl -s https://git.invario-software.eu/Invario/Inventarsystem/raw/branch/main/install.sh | sudo bash
Legacy-MongoDB uebernehmen und altes Host-System aufraeumen:
curl -s https://git.invario-software.eu/Invario/Inventarsystem/raw/branch/main/install.sh | \
sudo bash -s -- --migrate-legacy-db --remove-legacy-system
Optional kann ein alter Systempfad nach erfolgreicher Migration entfernt werden:
sudo ./install.sh --migrate-legacy-db --remove-legacy-system --legacy-system-dir /opt/Inventarsystem-alt
Ab dieser Version wird nach der Installation standardmaessig ein Alt-System-Cleanup ausgefuehrt (u. a. alte Inventarsystem/Admin-Systemd-Dienste stoppen/deaktivieren, Restprozesse und stale Sockets entfernen).
Optionales Verhalten beim Install:
# Alt-System-Cleanup komplett ueberspringen
sudo ./install.sh --skip-cleanup-old
# Beim Alt-System-Cleanup auch passende Cron-Eintraege entfernen
sudo ./install.sh --cleanup-old-remove-cron
Docker Betrieb
Das System läuft produktiv Docker-first. Deployments und Updates erfolgen über Release-Artefakte (Build-only), nicht über Quellcode-Pulls.
- Laufzeit-Stack: docker-compose-multitenant.yml
- Build-Pipeline: Dockerfile
- Release-Pipeline: .github/workflows/release-docker.yml
- Frontend/Reverse Proxy: Nginx (Container)
Voraussetzungen
- Docker Engine
- Docker Compose Plugin
Starten (portabel auf jedem Docker-Host)
docker compose up -d
Oder mit Hilfsskript:
./start.sh
Danach ist die Web-App erreichbar unter:
https://[SERVER-IP]
Wenn keine Zertifikate vorhanden sind, erstellt start.sh automatisch ein selbstsigniertes Zertifikat unter certs/inventarsystem.crt und certs/inventarsystem.key.
Wenn Docker/Compose/OpenSSL fehlen, installiert start.sh die benoetigten Pakete automatisch.
Dabei wird zuerst docker.io versucht. Falls das auf dem System nicht verfuegbar ist, richtet das Skript das Docker-Repository ein und installiert docker-ce inklusive Compose-Plugin.
Standardmaessig richtet start.sh zusaetzlich die taeglichen Cron-Jobs fuer Backup (02:30) und Update (03:00) ein.
Das kann bei Bedarf deaktiviert werden mit ./start.sh --no-cron oder per Umgebungsvariable INVENTAR_SETUP_CRON=0 ./start.sh.
App mit Nuitka neu bauen
Fuer einen Standalone-Build der Flask-App steht folgendes Skript bereit:
./build-nuitka.sh
Das Skript:
- verwendet die Python-Umgebung unter
.venv - installiert/aktualisiert Nuitka Build-Abhaengigkeiten
- baut
Web/app.pyals Standalone-Binary - bindet
Web/templates,Web/staticunduploadsals Laufzeitdaten ein - schreibt das Ergebnis nach
dist/app.dist/
Stoppen
docker compose down
Oder mit Hilfsskript:
./stop.sh
Logs ansehen
docker compose logs -f app
docker compose logs -f mongodb
docker compose logs -f nginx
Persistente Daten
Die Volumes sind in docker-compose-multitenant.yml definiert:
- MongoDB Daten
- Uploads / Thumbnails / Previews / QRCodes
- Backups und Logs
Hinweis: Für Container-Deployments werden MongoDB- und Speicherpfade via Umgebungsvariablen in Web/settings.py überschrieben.
Updates (nur aus Releases)
sudo ./update.sh
update.sh lädt ausschließlich das Release-Asset inventarsystem-docker-bundle.tar.gz aus dem neuesten GitHub Release, lädt das passende Release-Image lokal aus dem Release-Archiv und startet den Stack ohne lokalen Rebuild neu.
Wenn lokal ein passendes Image-Artefakt unter dist/ liegt (inventarsystem-image-<tag>.tar.gz oder inventarsystem-image-*.tar.gz), wird dieses zuerst verwendet.
Zusätzlich wird ein Health-Check ausgeführt; bei Fehlern endet das Update mit Exit-Code ungleich 0 und protokolliert Container-Logs in logs/update.log.
Release-Erstellung (Build-only)
Beim Push eines Tags v* erstellt GitHub Actions automatisch:
- Container-Image in GHCR:
ghcr.io/aiirondev/inventarsystem:<tag> - Release-Asset
inventarsystem-docker-bundle.tar.gz(nur Docker-Deployment-Dateien) - Release-Asset
inventarsystem-image-<tag>.tar.gz(offline Docker image export)
Damit enthalten Releases nur Build-Artefakte für Docker, nicht den produktiven Updatepfad über Roh-Quellcode.
Erste Einrichtung
Nach der Installation:
cd /opt/Inventarsystem
sudo ./start.sh
Öffnen Sie dann im Browser:
https://[SERVER-IP]
Admin-User erstellen
Wenn die Datenbank leer ist (beim ersten Start), erstellen Sie einen Admin-User:
Option 1: Interaktiv
cd Web && python3 generate_user.py
Option 2: Multitenant-Tenant erstellen
sudo ./manage-tenant.sh add <tenant-name> <port>
Dieser Weg erzeugt beim Anlegen eines neuen Tenants einen Standard-Admin für den Tenant.
Option 3: Direkt in MongoDB (Notlösung)
docker exec inventarsystem-mongodb mongosh --eval "
db.users.insertOne({
Username: 'admin',
Password: '\$(python3 -c \"import hashlib; print(hashlib.sha512(b\\\"deinPassword123\\\").hexdigest())\")' ,
Admin: true,
active_ausleihung: null,
name: 'Admin',
last_name: 'User',
favorites: []
})
" Inventarsystem
Systembetrieb
Starten
sudo ./start.sh
Stoppen
sudo ./stop.sh
Neustarten
sudo ./restart.sh
Status prüfen
docker compose ps
docker compose logs -f app
Benutzerverwaltung
Erstes Admin-Konto erstellen
cd /pfad/zum/Inventarsystem
source .venv/bin/activate
python Web/generate_user.py
Benutzer über GUI hinzufügen
- Als Admin anmelden
- Benutzer verwalten
- Neuen Benutzer hinzufügen
- Daten eingeben
- Speichern
Artikelverwaltung
Artikel hinzufügen
- Admin anmelden
- Artikel hochladen
- Formular ausfüllen
- Bilder hochladen
- Speichern
Unterstützte Formate
- JPG / JPEG
- PNG
- GIF
- MP4
- MOV
Artikel bearbeiten
- Bearbeitungssymbol klicken
- Änderungen speichern
Artikel löschen
- Mülleimer klicken
- Bestätigen
Buchungssystem
Artikel ausleihen
- Artikel öffnen
- Ausleihen klicken
Das System protokolliert automatisch.
Artikel zurückgeben
- Meine ausgeliehenen Artikel öffnen
- Zurückgeben klicken
Buchung planen
- Terminplan öffnen
- Zeitraum wählen
- Speichern
Backup & Wiederherstellung
Backup erstellen
Universell (empfohlen, erkennt Host/Docker automatisch):
sudo ./backup.sh --mode auto
Docker-only (gleiche Logik, optional):
sudo ./backup.sh --mode docker
Alternativ (Host-Backupskript):
sudo ./backup.sh
Backup-Pfad:
/var/backups/Inventarsystem-YYYY-MM-DD.tar.gz
Rechnungs-Archiv (separat, rechtssicher):
/var/backups/invoice-archive/invoices-YYYY-MM-DD_HH-MM-SS.jsonl
/var/backups/invoice-archive/invoices-YYYY-MM-DD_HH-MM-SS.csv
/var/backups/invoice-archive/invoices-YYYY-MM-DD_HH-MM-SS.meta.json
Standard-Aufbewahrung fuer Rechnungsarchive:
- 3650 Tage (10 Jahre)
Optional konfigurierbar:
sudo ./backup.sh --invoice-keep-days 3650
sudo ./backup.sh --invoice-archive-dir /var/backups/invoice-archive
Backup wiederherstellen
sudo ./restore.sh --list
sudo ./restore.sh --date=latest
sudo ./restart.sh
Wartung & Updates
System aktualisieren
sudo ./update.sh
Hinweis: Updatepfad ist release-only. Es wird kein git pull verwendet.
Virtuelle Umgebung neu erstellen
sudo ./rebuild-venv.sh
sudo ./restart.sh
Komplettreparatur
sudo ./fix-all.sh
Versionsverwaltung
Mit manage-version.sh können Sie gezielt Versionen steuern, Downgrades durchführen und Versionen pinnen.
Beispiele
# Dauerhaft auf eine Version (Tag, Commit oder Branch) pinnen
./manage-version.sh pin v2.5.17 --restart
# Einmalig auf eine Version wechseln
./manage-version.sh use <ref> --restart
# Aktuellen Status anzeigen
./manage-version.sh status
# Pin entfernen und zur Hauptversion zurückkehren
./manage-version.sh clear --restart
Wichtige Hinweise
- Pin wird in
.version-lockgespeichert - Unterstützt: Tags, Branches, Commits
- Erstellt automatische Backups vor jedem Wechsel
- Bewahrt Datenverzeichnisse über den Versionswechsel hinweg
Konfiguration
config.json bearbeiten
sudo nano config.json
Beispiel:
{
"dbg": false,
"key": "IhrGeheimSchlüssel",
"ver": "2.6.2",
"host": "0.0.0.0",
"port": 443
}
SSL aktualisieren
sudo chmod 600 certs/inventarsystem.key
sudo chmod 644 certs/inventarsystem.crt
Fehlerbehebung
Logs Auslesen
docker logs inventarsystem-app-1
docker exec inventarsystem-app-1 cat /data/logs/application.log | tail -n 100
docker compose exec mongodb mongosh
Webserver startet nicht
docker compose ps
docker compose logs -f nginx
docker compose logs -f app
MongoDB-Probleme
docker compose restart mongodb
docker compose logs -f mongodb
PyMongo/BSON-Konflikt
sudo ./fix-all.sh
oder
sudo ./rebuild-venv.sh
Bild-Upload Probleme
sudo ./fix-all.sh
Verzeichnisse prüfen:
sudo ls -la Web/uploads
sudo ls -la Web/QRCodes
sudo ls -la Web/thumbnails
Empfohlener Troubleshooting-Workflow
- Status prüfen
- Logs prüfen
fix-all.shausführen- Neustarten
Automatische Überwachung einrichten:
sudo ./fix-all.sh --setup-cron
Systemanforderungen
- Moderner Webbrowser (Chrome, Firefox, Safari, Edge)
- Internetzugang
- Kamera für QR-Scan
- Desktop empfohlen für Admins
Lizenz Rechtliches & Datenschutz
Dieses Projekt ist auf Transparenz und Datensparsamkeit ausgelegt. Um einen rechtskonformen Betrieb (insbesondere gemäß DSGVO) zu gewährleisten, wurden folgende Dokumente erstellt:
-
Datenschutzerklärung: Erläutert, welche personenbezogenen Daten (z. B. Inventarzuordnungen, Logins) verarbeitet werden.
-
Datenverarbeitung & Dokumentation: Details zu den technischen Abläufen und Speichermechanismen innerhalb des Systems.
-
Rechtsgrundlage: Informationen für Administratoren zur rechtmäßigen Nutzung im geschäftlichen oder privaten Umfeld.
-
Sicherheit & Mechanismen: Übersicht der implementierten Schutzmaßnahmen (Hashing, Zugriffskontrolle).
Wichtiger Hinweis: Die bereitgestellten Dokumente dienen als Vorlage. Als Betreiber einer Instanz dieses Inventarsystems sind Sie selbst dafür verantwortlich, diese an Ihre spezifische Hosting-Umgebung und Ihre internen Prozesse anzupassen.
Mitwirkende
Maximilian Gründinger — Projektgründer
Für technische Unterstützung oder Fragen bitte ein Issue im GitHub-Repository eröffnen.
Das Inventarsystem ist eine robuste, wartungsfreundliche Komplettlösung für Inventarverwaltung mit Fokus auf Bildungseinrichtungen. Durch automatisierte Wartung, integrierte Backups und intelligente Diagnose lässt sich das System zuverlässig betreiben und skalieren.