# Vendoo 1.32.0 – Docker, NAS & Production Deployment Foundation

## Ziel

Vendoo kann weiterhin unverändert lokal unter Windows betrieben werden und zusätzlich reproduzierbar in Docker beziehungsweise Portainer laufen. Anwendungscode und persistente Nutzerdaten sind getrennt. FLUX/ComfyUI bleibt ein optionaler externer Dienst und wird nicht in den Vendoo-Hauptcontainer eingebaut.

## Neue Deployment-Bausteine

- mehrstufiges `Dockerfile` auf Node.js 22
- reproduzierbare Installation über `npm ci` und Lockfile
- Ausführung als nicht privilegierter Benutzer `node` (UID/GID 1000)
- `read_only`-Container, `no-new-privileges`, alle Linux-Capabilities entfernt
- getrennte persistente Volumes für DB, Uploads, Backups, Operations und Logs
- `/healthz` für Liveness und `/readyz` für DB-/Schreibpfad-Readiness
- geordneter SIGTERM-/SIGINT-Shutdown mit SQLite-WAL-Checkpoint
- zentral konfigurierbare Laufzeitpfade, bei Windows aber identische Standardpfade wie zuvor
- Erst-Admin-Schutz über einen mindestens 32 Zeichen langen `VENDOO_SETUP_TOKEN`; bis zur Einrichtung bleiben alle übrigen API-Routen gesperrt
- konfigurierbare Secure-/SameSite-Cookies
- kontrollierte Browser-Extension-Origin-Allowlist
- Uploads nur noch nach Anmeldung abrufbar
- strengere Bildannahme: zulässige Endung und Bild-MIME müssen zusammenpassen
- Docker-Backup-/Restore-Hilfsskripte für Named Volumes und NAS-Bind-Mounts sowie ein Bind-Mount-Beispiel
- begrenzte Docker-Logrotation (`10m`, fünf Dateien)

## Laufzeitpfade

| Variable | Docker-Standard | Windows ohne Variable |
|---|---|---|
| `VENDOO_DATA_DIR` | `/app/data` | Projektordner |
| `VENDOO_DB_PATH` | `/app/data/db/vendoo.db` | `db/vendoo.db` |
| `VENDOO_UPLOADS_DIR` | `/app/data/uploads` | `uploads/` |
| `VENDOO_BACKUP_DIR` | `/app/data/backups` | `backups/` |
| `VENDOO_OPERATIONS_DIR` | `/app/data/operations` | `operations/` |
| `VENDOO_LOG_DIR` | `/app/data/logs` | `logs/` |

Leere Variablen fallen auf die kompatiblen Standardpfade zurück.

## Reverse Proxy

Der Compose-Port wird standardmäßig ausschließlich an `127.0.0.1` gebunden. Für ein NAS kann ein lokaler Reverse Proxy entweder denselben Docker-Netzwerkpfad verwenden oder der Host-Port bewusst im vertrauenswürdigen LAN bereitgestellt werden. Eine direkte öffentliche Portweiterleitung auf 8124 ist kein unterstützter Produktionsweg.

Erforderlich hinter HTTPS:

```env
PUBLIC_BASE_URL=https://vendoo.example.de
VENDOO_ALLOWED_HOSTS=vendoo.example.de
VENDOO_ALLOWED_ORIGINS=https://vendoo.example.de
VENDOO_TRUST_PROXY=1
VENDOO_COOKIE_SECURE=true
VENDOO_COOKIE_SAMESITE=lax
```

`VENDOO_TRUST_PROXY=1` bedeutet genau einen vertrauenswürdigen Proxy-Hop. Bei anderer Topologie muss die reale Hop-Anzahl oder ein zulässiger Express-Proxybereich gesetzt werden.

## Browser-Erweiterungen

Im Produktionsmodus ist die pauschale Freigabe aller Extension-Origins deaktiviert. Konkrete IDs werden eingetragen, zum Beispiel:

```env
VENDOO_EXTENSION_ORIGINS=chrome-extension://abcdefghijklmnop,moz-extension://uuid
VENDOO_ALLOW_ANY_EXTENSION_ORIGIN=false
```

Die bestehende Cookie-basierte Anmeldung bleibt kompatibel. Eine eigene widerrufbare Extension-Tokenkopplung ist bewusst nicht vorgezogen worden und bleibt Teil des späteren Extension Distribution Centers.

## FLUX/ComfyUI

Der Hauptcontainer startet standardmäßig mit:

```env
LOCAL_IMAGE_ENABLED=false
```

Für einen getrennten GPU-Dienst:

```env
LOCAL_IMAGE_ENABLED=true
LOCAL_IMAGE_URL=http://comfyui:8188
LOCAL_IMAGE_TOKEN=<starkes-dienst-token>
LOCAL_IMAGE_REQUIRE_TOKEN=true
LOCAL_IMAGE_ALLOW_REMOTE=true
```

ComfyUI darf nicht direkt öffentlich freigegeben werden. Das freie FLUX-Prompt-Workflow bleibt textbasiert; es wird kein Produktbild oder `LoadImage`-Knoten eingeschleust.

## Updateprinzip

- Windows: bestehender Drüberkopierablauf und `setup.bat` Menüpunkt 3 bleiben gültig.
- Docker: Nutzervolumes bleiben bestehen; nur Image/Code wird neu gebaut und der Container ersetzt.
- Vor jedem Update DB und Uploads gemeinsam sichern.
- Bei fehlgeschlagener Readiness nicht weiterarbeiten, sondern Logs und Volume-Rechte prüfen und gegebenenfalls auf das vorherige Image zurückgehen.
