2026-06-28 16:55:57 +02:00
2026-06-28 16:55:57 +02:00
2026-06-23 12:01:23 +02:00
2026-04-10 14:48:52 +02:00
2026-04-10 14:48:52 +02:00
2026-04-10 14:48:52 +02:00

Inventarsystem

https://github.com/AIIrondev/legendary-octo-garbanzo

wakatime

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

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://raw.githubusercontent.com/AIIrondev/legendary-octo-garbanzo/main/install.sh | sudo bash

Option 2

curl -s https://raw.githubusercontent.com/AIIrondev/legendary-octo-garbanzo/main/install.sh | sudo bash

Legacy-MongoDB uebernehmen und altes Host-System aufraeumen:

curl -s https://raw.githubusercontent.com/AIIrondev/legendary-octo-garbanzo/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.

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.py als Standalone-Binary
  • bindet Web/templates, Web/static und uploads als 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

  1. Als Admin anmelden
  2. Benutzer verwalten
  3. Neuen Benutzer hinzufügen
  4. Daten eingeben
  5. Speichern

Artikelverwaltung

Artikel hinzufügen

  1. Admin anmelden
  2. Artikel hochladen
  3. Formular ausfüllen
  4. Bilder hochladen
  5. Speichern

Unterstützte Formate

  • JPG / JPEG
  • PNG
  • GIF
  • MP4
  • MOV

Artikel bearbeiten

  1. Bearbeitungssymbol klicken
  2. Änderungen speichern

Artikel löschen

  1. Mülleimer klicken
  2. Bestätigen

Buchungssystem

Artikel ausleihen

  1. Artikel öffnen
  2. Ausleihen klicken

Das System protokolliert automatisch.

Artikel zurückgeben

  1. Meine ausgeliehenen Artikel öffnen
  2. Zurückgeben klicken

Buchung planen

  1. Terminplan öffnen
  2. Zeitraum wählen
  3. 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-lock gespeichert
  • 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

  1. Status prüfen
  2. Logs prüfen
  3. fix-all.sh ausführen
  4. 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:

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.

S
Description
No description provided
Readme 3.6 MiB
main Latest
2026-07-16 12:57:47 +00:00
Languages
HTML 51.2%
Python 39.9%
Shell 5%
JavaScript 2.4%
CSS 1.4%