Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
# Verfeinerte KI-Anweisung zur Planung der Software
## Ziel
Entwirf eine moderne, skalierbare und wartbare Enterprise-Webanwendung auf Basis von Spring Boot 4, MySQL und React/TypeScript.
Die Anwendung kombiniert Kernfunktionen aus:
* Datei- und Medienverwaltung wie Nextcloud
* Digital Asset Management wie ResourceSpace
* Medienstreaming wie Jellyfin
Der Fokus liegt auf:
* Verwaltung großer Medien- und Dokumentbestände
* Rollen- und Rechteverwaltung
* Streaming von Videos mit Untertiteln
* Durchsuchbaren Metadaten
* Skalierbarer Architektur
* Moderner API-basierter Frontend-/Backend-Trennung
---
# Technologiestack
## Backend
* Java 21+
* Spring Boot 4
* Spring Security
* Spring Data JPA
* Hibernate
* MySQL 8
* Flyway oder Liquibase für Datenbankmigrationen
* JWT oder OAuth2 Authentication
* FFmpeg für Vorschau-Generierung
* Apache Tika zur Dokumentanalyse
* Elasticsearch oder OpenSearch für Volltextsuche
* Maven oder Gradle
## Frontend
* React
* TypeScript
* Vite
* React Query / TanStack Query
* Zustand oder Redux Toolkit
* Material UI oder Ant Design
* Video.js oder Shaka Player für Videostreaming
* i18n-Unterstützung
* Responsive Design
## Infrastruktur
* Docker
* Docker Compose
* Optional Kubernetes-Support
* Nginx Reverse Proxy
* MinIO oder lokales Filesystem als Storage
* Optional S3-kompatibler Storage
---
# Hauptziel der Architektur
Die KI soll eine modulare Enterprise-Architektur planen mit:
* sauberer Schichtenarchitektur
* Domain-getriebenem Design
* REST API oder GraphQL
* hoher Erweiterbarkeit
* klarer Rechteverwaltung
* skalierbarer Dateiverarbeitung
* asynchronen Jobs
* hoher Performance bei großen Dateien
---
# Fachliche Kernfunktionen
## 1. Benutzer- und Rechteverwaltung
### Funktionen
* Benutzer anlegen
* Benutzer deaktivieren
* Passwortverwaltung
* Rollenverwaltung
* Gruppenverwaltung
* Benutzer Gruppen zuordnen
* Rechte auf:
* Ordner
* Dateien
* Metadaten
* Downloads
* Uploads
* Streams
* Bearbeitung
### Rechtearten
* Lesen
* Schreiben
* Löschen
* Download
* Upload
* Teilen
* Metadaten bearbeiten
* Untertitel verwalten
* Administration
### Anforderungen
* Rechtevererbung über Ordnerstruktur
* Direkte Benutzerrechte + Gruppenrechte
* Priorisierung von Deny-Regeln möglich
* ACL-System bevorzugt
---
# 2. Ordnerverwaltung
## Funktionen
* Ordner erstellen
* Ordner löschen
* Ordner umbenennen
* Verschieben
* Verschachtelte Unterordner
* Breadcrumb-Navigation
* Favoriten
* Papierkorb
## Anforderungen
* Rechte pro Ordner
* Rekursive Rechtevererbung
* Sehr große Ordnerstrukturen performant verwalten
* Lazy Loading im Frontend
---
# 3. Datei-Upload
## Anforderungen
* Upload großer Dateien bis mindestens 1 GB
* Chunked Upload
* Resume-fähige Uploads
* Mehrfach-Uploads
* Drag & Drop
* Fortschrittsanzeige
## Unterstützte Dateien
* Videos
* Bilder
* Dokumente
* Präsentationen
* Textdateien
* PDFs
## Backend-Anforderungen
* Streaming Upload
* Kein vollständiges Laden in RAM
* Asynchrone Verarbeitung nach Upload
* Event-basierte Verarbeitung
---
# 4. Metadaten-System
## Anforderungen
Jede Datei besitzt:
* Titel
* Beschreibung
* Tags
* Kategorien
* Upload-Datum
* Uploader
* Dateityp
* Größe
* Sprache
* Benutzerdefinierte Metadaten
## Erweiterungen
* Frei definierbare Metadatenfelder
* Metadaten-Schemas
* Mehrsprachige Metadaten
* Versionierung von Metadaten
## Durchsuchbarkeit
Die Suche muss unterstützen:
* Titel
* Beschreibung
* Tags
* Dateiname
* Ordnername
* OCR-Texte
* Dokumentinhalte
* Untertiteltexte
---
# 5. Videoverwaltung
## Funktionen
* HTML5-Streaming
* Adaptive Streams optional
* Untertitelverwaltung
* Vorschaubilder
* Kapitelmarken optional
## Untertitelregeln
Automatische Zuordnung über Dateinamen:
* Video1.mp4
* Video1.de.srt
* Video1.en.srt
## Anforderungen
* Mehrsprachige Untertitel
* Dynamisches Laden
* Auswahl im Player
* Unterstützung:
* SRT
* VTT
## Videoplayer
Der Player soll:
* Untertitel umschalten können
* Playback-Speed unterstützen
* Qualität wechseln können
* Resume-Position speichern
* Rechte prüfen vor Streaming
---
# 6. Vorschau-Generierung
## Bilder
* Thumbnails
* Mehrere Größen
## Videos
* FFmpeg-basierte Vorschau
* Timeline-Screenshots
* Poster-Images
## Dokumente
* PDF-Vorschau
* Office-Dokumente rendern
* Erste Seiten als Bild
## Anforderungen
* Asynchrone Queue-Verarbeitung
* Retry-Mechanismus
* Job-Status speichern
---
# 7. Dokumentenansicht
## Unterstützte Typen
* Word
* Excel
* PowerPoint
* PDF
* Textdateien
* Markdown
## Funktionen
* Browserbasierte Vorschau
* Inline-Anzeige
* Syntax Highlighting für Textdateien
## Optional
* Integration:
* OnlyOffice
* Collabora
* LibreOffice Headless
---
# 8. Texteditor
## Funktionen
* Bearbeiten von:
* TXT
* JSON
* XML
* YAML
* Markdown
## Anforderungen
* Autosave
* Versionierung
* Rechteprüfung
* Kollisionsschutz
---
# 9. Suche
## Anforderungen
Globale Suche über:
* Dateien
* Metadaten
* Ordner
* Inhalte
* Untertitel
* OCR
* Benutzer
## Features
* Volltextsuche
* Filter
* Facettensuche
* Sortierung
* Relevanzranking
## Technologie
Bevorzugt:
* Elasticsearch
* OpenSearch
---
# 10. API-Anforderungen
## Architektur
* REST API
* Optional GraphQL Gateway
## Anforderungen
* Versionierung
* OpenAPI / Swagger
* Pagination
* Filterung
* Sorting
* Rate Limiting
## Sicherheit
* JWT Access Tokens
* Refresh Tokens
* CSRF Schutz
* Audit Logging
---
# 11. Nichtfunktionale Anforderungen
## Performance
* Große Dateimengen
* Viele parallele Uploads
* Streaming optimiert
* CDN-fähig
## Skalierbarkeit
* Horizontale Skalierung
* Stateless Backend
* Separater Storage-Service möglich
## Sicherheit
* Virenscan optional
* MIME-Type-Prüfung
* Upload-Limits
* Schutz vor Path Traversal
* Verschlüsselung sensibler Daten
## Wartbarkeit
* Modulare Architektur
* Testbarkeit
* Hohe Codequalität
* Klare Trennung von Verantwortlichkeiten
---
# 12. Erwartete Architekturartefakte der KI
Die KI soll erzeugen:
## Fachliche Modelle
* Domainmodell
* ER-Diagramm
* Rechtekonzept
* Objektmodell
## Technische Architektur
* Komponentenübersicht
* Service-Struktur
* API-Design
* Storage-Konzept
* Suchindex-Konzept
## Datenmodell
Tabellen für:
* User
* Rollen
* Gruppen
* ACLs
* Dateien
* Ordner
* Metadaten
* Untertitel
* Vorschaugrafiken
* Upload-Jobs
## Frontend-Architektur
* Seitenstruktur
* Komponentenstruktur
* State-Management
* Routing-Konzept
## Backend-Architektur
* Module
* Services
* Repositories
* Security-Konzept
* Event-System
## Infrastruktur
* Docker Setup
* CI/CD
* Backup-Strategie
* Monitoring
* Logging
---
# Wichtige Architekturvorgaben
## Die KI soll:
* keine Monolithen ohne Modulgrenzen erzeugen
* keine Dateien in der Datenbank speichern
* große Dateien streamen
* asynchron arbeiten
* klare DTO-Trennung nutzen
* keine Businesslogik im Controller platzieren
* Security First denken
* Erweiterbarkeit priorisieren
---
# Erweiterungen für spätere Versionen
Die Architektur soll zukünftige Features ermöglichen:
* Sharing-Links
* Öffentliche Freigaben
* Kommentare
* Versionierung
* KI-gestützte Verschlagwortung
* Gesichtserkennung
* OCR
* Transcoding
* Mobile Apps
* WebDAV
* Desktop Sync Clients
* Activity Feed
* Benachrichtigungen
* Multi-Tenant-Betrieb
---
# Erwartete Ausgabe der KI
Die KI soll:
1. Eine vollständige Systemarchitektur entwerfen
2. Das Datenmodell definieren
3. Backend-Module strukturieren
4. Frontend-Struktur planen
5. Sicherheitskonzept definieren
6. Upload-/Streaming-Architektur erklären
7. Rechtekonzept detaillieren
8. Skalierungsstrategie erklären
9. API-Struktur definieren
10. Deployment-Architektur entwerfen
11. Risiken und Engpässe identifizieren
12. Konkrete Technologieempfehlungen begründen
Nach Mainboard Umbau prüfen:
root@pve:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master vmbr0 state UP group default qlen 1000
link/ether 70:85:c2:3f:9c:e1 brd ff:ff:ff:ff:ff:ff
altname enx7085c23f9ce1
3: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 70:85:c2:3f:9c:e1 brd ff:ff:ff:ff:ff:ff
inet 192.168.178.99/24 scope global vmbr0
valid_lft forever preferred_lft forever
inet6 fe80::7285:c2ff:fe3f:9ce1/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
4: veth106i0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master vmbr0 state UP group default qlen 1000
link/ether fe:6a:37:f7:0b:7e brd ff:ff:ff:ff:ff:ff link-netnsid 0
5: veth105i0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master vmbr0 state UP group default qlen 1000
link/ether fe:de:b6:68:92:78 brd ff:ff:ff:ff:ff:ff link-netnsid 1
6: veth107i0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master vmbr0 state UP group default qlen 1000
link/ether fe:c3:1a:11:5c:b2 brd ff:ff:ff:ff:ff:ff link-netnsid 2
7: veth109i0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master vmbr0 state UP group default qlen 1000
link/ether fe:00:99:ed:94:88 brd ff:ff:ff:ff:ff:ff link-netnsid 3
8: veth102i0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master fwbr102i0 state UP group default qlen 1000
link/ether fe:5b:25:31:b3:7c brd ff:ff:ff:ff:ff:ff link-netnsid 4
9: fwbr102i0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 4a:9d:bf:67:01:2e brd ff:ff:ff:ff:ff:ff
10: fwpr102p0@fwln102i0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master vmbr0 state UP group default qlen 1000
link/ether 12:4c:b4:6b:03:e7 brd ff:ff:ff:ff:ff:ff
11: fwln102i0@fwpr102p0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master fwbr102i0 state UP group default qlen 1000
link/ether 4a:9d:bf:67:01:2e brd ff:ff:ff:ff:ff:ff
16: veth110i0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master fwbr110i0 state UP group default qlen 1000
link/ether fe:fd:49:4f:af:5a brd ff:ff:ff:ff:ff:ff link-netnsid 5
17: fwbr110i0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 92:c5:47:a3:b0:5c brd ff:ff:ff:ff:ff:ff
18: fwpr110p0@fwln110i0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master vmbr0 state UP group default qlen 1000
link/ether 7e:32:48:02:24:85 brd ff:ff:ff:ff:ff:ff
19: fwln110i0@fwpr110p0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master fwbr110i0 state UP group default qlen 1000
link/ether 92:c5:47:a3:b0:5c brd ff:ff:ff:ff:ff:ff
root@pve:~#
root@pve:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 450G 0 loop
loop1 7:1 0 8G 0 loop
loop2 7:2 0 2G 0 loop
loop3 7:3 0 8G 0 loop
loop4 7:4 0 25G 0 loop
loop5 7:5 0 256G 0 loop
loop6 7:6 0 500G 0 loop
sda 8:0 0 1.8T 0 disk
└─sda1 8:1 0 1.8T 0 part /mnt/data1
sdb 8:16 0 1.8T 0 disk
└─sdb1 8:17 0 1.8T 0 part /mnt/data2
sdc 8:32 0 7.3T 0 disk
└─sdc1 8:33 0 7.3T 0 part /mnt/data3
nvme0n1 259:0 0 465.8G 0 disk
├─nvme0n1p1 259:1 0 1007K 0 part
├─nvme0n1p2 259:2 0 1G 0 part /boot/efi
└─nvme0n1p3 259:3 0 464.8G 0 part
├─pve-swap 252:0 0 8G 0 lvm [SWAP]
├─pve-root 252:1 0 96G 0 lvm /
├─pve-data_tmeta 252:2 0 3.4G 0 lvm
│ └─pve-data 252:4 0 337.9G 0 lvm
└─pve-data_tdata 252:3 0 337.9G 0 lvm
└─pve-data 252:4 0 337.9G 0 lvm
root@pve:~#
root@pve:~# pveversion -v
proxmox-ve: 9.2.0 (running kernel: 7.0.6-2-pve)
pve-manager: 9.2.3 (running version: 9.2.3/d0fde103346cf89a)
proxmox-kernel-helper: 9.2.0
proxmox-kernel-7.0: 7.0.6-2
proxmox-kernel-7.0.6-2-pve-signed: 7.0.6-2
proxmox-kernel-6.17: 6.17.13-13
proxmox-kernel-6.17.13-13-pve-signed: 6.17.13-13
proxmox-kernel-6.17.13-1-pve-signed: 6.17.13-1
proxmox-kernel-6.14: 6.14.11-9
proxmox-kernel-6.14.11-9-pve-signed: 6.14.11-9
proxmox-kernel-6.14.8-2-pve-signed: 6.14.8-2
amd64-microcode: 3.20251202.1~bpo13+1
ceph-fuse: 19.2.3-pve1
corosync: 3.1.10-pve2
criu: 4.1.1-1
frr-pythontools: 10.6.1-1+pve2
ifupdown2: 3.3.0-1+pmx12
ksm-control-daemon: 1.5-1
libjs-extjs: 7.0.0-5
libproxmox-acme-perl: 1.7.1
libproxmox-backup-qemu0: 2.0.2
libproxmox-rs-perl: 0.4.1
libpve-access-control: 9.1.1
libpve-apiclient-perl: 3.4.2
libpve-cluster-api-perl: 9.1.6
libpve-cluster-perl: 9.1.6
libpve-common-perl: 9.1.13
libpve-guest-common-perl: 6.0.3
libpve-http-server-perl: 6.0.5
libpve-network-perl: 1.6.6
libpve-notify-perl: 9.1.6
libpve-rs-perl: 0.15.3
libpve-storage-perl: 9.1.5
libspice-server1: 0.15.2-1+b1
lvm2: 2.03.31-2+pmx1
lxc-pve: 7.0.0-2
lxcfs: 7.0.0-pve1
novnc-pve: 1.7.0-1
proxmox-backup-client: 4.2.1-1
proxmox-backup-file-restore: 4.2.1-1
proxmox-backup-restore-image: 1.0.0
proxmox-firewall: 1.2.3
proxmox-kernel-helper: 9.2.0
proxmox-mail-forward: 1.0.3
proxmox-mini-journalreader: 1.6
proxmox-offline-mirror-helper: 0.7.4
proxmox-widget-toolkit: 5.2.3
pve-cluster: 9.1.6
pve-container: 6.1.10
pve-docs: 9.2.2
pve-edk2-firmware: 4.2025.05-2
pve-esxi-import-tools: 1.0.1
pve-firewall: 6.0.4
pve-firmware: 3.18-4
pve-ha-manager: 5.2.4
pve-i18n: 3.7.5
pve-qemu-kvm: 11.0.0-4
pve-xtermjs: 6.0.0-1
qemu-server: 9.1.16
smartmontools: 7.5-pve2
spiceterm: 3.4.2
swtpm: 0.8.0+pve3
vncterm: 1.9.2
zfsutils-linux: 2.4.2-pve1
Für die neue 6-TB-Platte
Die würde ich nach dem Umbau komplett neu initialisieren.
Beispiel:
lsblk
Neue Platte identifizieren.
Partition anlegen:
fdisk /dev/sdX
Dateisystem erstellen:
mkfs.ext4 /dev/sdX1
UUID ermitteln:
blkid /dev/sdX1
Mountpunkt anlegen:
mkdir /mnt/data4
In die fstab aufnehmen:
UUID=<UUID> /mnt/data4 ext4 defaults 0 2
Reihenfolge des Umbaus
Ich würde es so machen:
Backup der Proxmox-Konfiguration
Server herunterfahren
B350 → B550 tauschen
neues Seasonic-Netzteil einbauen
RTX 3050 einbauen
alte 2-TB-Platten entfernen
neue 6-TB-Platte einbauen
starten
BIOS prüfen (SVM, IOMMU)
Proxmox booten
Netzwerk testen
NVIDIA-Treiber prüfen
neue Platte einrichten:
. Richtige Platte ermitteln
lsblk
Angenommen die neue Platte ist:
/dev/sdb
2. GPT-Partition anlegen
fdisk /dev/sdb
In fdisk:
g
n
Enter
Enter
Enter
w
Erklärung:
g = GPT-Partitionstabelle anlegen
n = neue Partition
Enter = Partitionsnummer 1
Enter = erster Sektor (Standard)
Enter = letzter Sektor (gesamte Platte)
w = speichern
3. Dateisystem erstellen
mkfs.ext4 /dev/sdb1
4. UUID ermitteln
blkid /dev/sdb1
Beispiel:
/dev/sdb1: UUID="b812fd0d-1b59-4cd0-b468-1f32412db8db" TYPE="ext4"
5. Mountpunkt anlegen
mkdir -p /mnt/data4
6. In fstab eintragen
nano /etc/fstab
Zeile ergänzen:
UUID=12345678-abcd-1234-efgh-123456789abc /mnt/data4 ext4 defaults 0 2
Natürlich die echte UUID verwenden.
7. Testen
mount -a
8. Prüfen
df -h
Du solltest dann etwas sehen wie:
/dev/sdb1 5.5T ... /mnt/data4
Proxmox VE GNU/Linux, with Linux 6.14.11-9-pve