feat: marketplace modules and isolated container management

This commit is contained in:
ayde64
2026-10-07 23:18:02 +02:00
parent 564f7def1c
commit 7b121fa908
68 changed files with 2560 additions and 699 deletions

View File

@@ -10,7 +10,7 @@ Zentrale, webbasierte Management-Plattform, über die eigenständige Web-Applika
Internet
│
▼
Docker Container (mpm-platform, unprivilegierter Benutzer "app")
Docker container (restricted-capability root supervisor; services run as app)
┌─────────────────────────────────────────────┐
│ Supervisor (Prozessmanager) │
│ ├── Nginx (Reverse Proxy, :8080) │
@@ -24,8 +24,9 @@ Docker Container (mpm-platform, unprivilegierter Benutzer "app")
PostgreSQL (eigener Container, persistentes Volume)
```
- **Ein** Applikationscontainer, **kein** Docker-in-Docker, **kein** Docker-Socket.
- Module laufen ab Phase 3 als interne Prozesse im selben Container (eigene Ports, nur über den Reverse Proxy erreichbar).
- Der MPM-Managementcontainer verwaltet Modul-Stacks über den Docker-Socket. Modulcode erhält selbst keinen Socketzugriff.
- Neue Module laufen in eigenen Compose-Stacks. Die App und optionale Datenbanken haben getrennte Container und persistente Volumes.
- Der Docker-Socket ermöglicht weitreichende Hoststeuerung. Daher dürfen nur vertrauenswürdige Administratoren Module installieren; der Socket wird nie in Modulcontainer durchgereicht.
- PostgreSQL liegt außerhalb des Applikationscontainers in einem persistenten Volume.
Details: [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) · Phasen: [`docs/PHASES.md`](docs/PHASES.md)
@@ -76,7 +77,7 @@ MPM/
├── docs/ # Architektur- & Phasen-Dokumentation
├── modules/ # Installierbare Module (ab Phase 3)
├── Dockerfile # Multi-Stage-Build des Management-Containers
└── docker-compose.yml # PostgreSQL + Management-Container
└── docker-compose.yml # PostgreSQL + MPM; Module erhalten eigene Compose-Stacks
```
## Tech-Stack
@@ -86,19 +87,19 @@ MPM/
| Frontend | React 19, TypeScript, Vite, Tailwind CSS, React Router, TanStack Query, Zod |
| Backend | NestJS 11, TypeScript, REST `/api/v1`, OpenAPI/Swagger |
| Datenbank | PostgreSQL 18 (Schemas: `management`, ab Phase 3 pro Modul) |
| Betrieb | Docker, Nginx, Supervisor, unprivilegierter Benutzer |
| Sicherheit | Argon2id, HttpOnly/Secure/SameSite-Cookies, serverseitige Sessions, CSRF-Schutz, Rate Limiting, Account Lockout, Audit-Log, Helmet, RBAC |
| Betrieb | Docker Compose, Nginx, MPM-Managementcontainer und separate Modul-Stacks |
| Sicherheit | Argon2id, HttpOnly/Secure/SameSite-Cookies, serverseitige Sessions, CSRF-Schutz, IP-basiertes Rate Limiting, Audit-Log, Helmet, RBAC |
## Funktionen
### Phase 1 – Grundgerüst
Login/Logout mit serverseitigen Sessions, Rollen (ADMIN/USER), Health-Monitoring, Audit-Log, Migrationen mit Advisory-Lock, responsive Management-UI mit Design-System.
Login/Logout mit serverseitigen Sessions, Rollen (ADMIN/USER), IP-basiertes Rate Limiting, Health-Monitoring, Audit-Log, Migrationen mit Advisory-Lock, responsive Management-UI mit Design-System.
### Phase 2 – Benutzerverwaltung
Vollständige Benutzer-CRUD-API (nur Admin) mit Duplikat-Schutz, Schutz des letzten Admins, sofortiger Session-Sperrung bei Deaktivierung, Passwort-Reset, eigenes Passwort ändern, Benutzerverwaltungs-UI (Tabelle, Modals, Toasts) und Profil-Seite.
### Phase 3 – Modul-System
Modul-Registry mit Manifest-Vertrag (`module.json`, Zod-validiert), ZIP-Installation mit Zip-Slip-Schutz, Prozess-Manager (Kindprozesse mit minimaler ENV, eigene Logs), Lifecycle (INSTALLED/STARTING/RUNNING/STOPPED/ERROR/DISABLED), Healthchecks mit Startup-Grace, Modulverwaltungs-UI und persistente Volumes für Modul-Dateien.
Modul-Registry mit Manifest-Vertrag (`module.json`, Zod-validiert), ZIP-Installation mit Zip-Slip-Schutz, eigene Compose-Stacks je Modul, Lifecycle (INSTALLED/STARTING/RUNNING/STOPPED/ERROR/DISABLED), Healthchecks mit Startup-Grace, Modulverwaltungs-UI und persistente Datenvolumes.
### Phase 4 – Gateway & Routing
Dynamisches Routing `/slug` über Nginx → Modul-Gateway (Middleware): Session-Check, Modul-Status-Check, Permission-Check (fail-closed), Proxy zu internen Ports. Sichere Identitätsübergabe über Header, Startup-Recovery mit Autostart nach Container-Neustarts.
@@ -117,4 +118,4 @@ Audit-Log-UI (Filter + Paginierung), Systemeinstellungen (Whitelist-Schlüssel,
## Annahme
„ChatCM" wurde als **shadcn-artige Komponentenbasis** interpretiert: Tailwind CSS plus zentral gepflegte, wiederverwendbare UI-Komponenten (`apps/platform-frontend/src/components/ui`).
„ChatCM" wurde als **shadcn-artige Komponentenbasis** interpretiert: Tailwind CSS plus zentral gepflegte, wiederverwendbare UI-Komponenten (`apps/platform-frontend/src/components/ui`).