Files
meldestelle/README-DOCKER-CLIENT-CONTAINERIZATION.md
T

169 lines
6.0 KiB
Markdown

# Meldestelle Client Containerization
## Übersicht
Dieses Dokument beschreibt die Docker-Containerisierung der Kotlin Compose Multiplatform Frontend-Anwendungen für das Meldestelle-Projekt.
## Implementierte Lösungen
### 🌐 Web Application (WASM) - Bereits funktionsfähig
- **Status**: ✅ Vollständig implementiert und funktionsfähig
- **Technologie**: Kotlin Compose Multiplatform mit WASM-Target
- **Container**: Nginx-basiertes Setup mit statischen Assets
- **Port**: 4000
- **Zugriff**: `http://localhost:4000`
- **Docker-Compose Service**: `web-app`
### 🖥️ Desktop Application (JVM) - Neu implementiert
- **Status**: ✅ Implementiert mit VNC-basierten GUI-Zugriff
- **Technologie**: Kotlin Compose Desktop mit VNC + noVNC
- **Container**: Ubuntu-basiert mit Xvfb, x11vnc, fluxbox, noVNC
- **Ports**:
- 6080 (noVNC Web-Interface)
- 5901 (Direkter VNC-Zugriff)
- **Zugriff**: `http://localhost:6080` (Web-basiertes VNC)
- **Docker-Compose Service**: `desktop-app`
## Verwendung
### Alle Client-Anwendungen starten
```bash
# Mit Backend-Services
docker-compose -f docker-compose.yml -f docker-compose.services.yml -f docker-compose.clients.yml up -d
# Nur Frontend-Anwendungen
docker-compose -f docker-compose.yml -f docker-compose.clients.yml up -d
```
### Einzelne Anwendungen starten
```bash
# Nur Web-Anwendung
docker-compose -f docker-compose.yml -f docker-compose.clients.yml up -d web-app
# Nur Desktop-Anwendung
docker-compose -f docker-compose.yml -f docker-compose.clients.yml up -d desktop-app
```
## Desktop Application - VNC-Zugriff
### Web-basierter Zugriff (empfohlen)
1. Container starten: `docker-compose up -d desktop-app`
2. Browser öffnen: `http://localhost:6080`
3. VNC-Viewer startet automatisch
4. Meldestelle Desktop-Anwendung wird angezeigt
### Direkter VNC-Zugriff
1. VNC-Client installieren (z.B. TigerVNC, RealVNC)
2. Verbindung zu `localhost:5901` herstellen
3. Passwort: `meldestelle` (falls erforderlich)
## Architektur Details
### Web Application (WASM)
```
┌─────────────────┐ ┌──────────────┐ ┌─────────────────┐
│ Browser │────│ Nginx │────│ Static WASM │
│ localhost:4000│ │ Container │ │ Assets │
└─────────────────┘ └──────────────┘ └─────────────────┘
```
### Desktop Application (JVM + VNC)
```
┌─────────────────┐ ┌──────────────┐ ┌─────────────────┐
│ Browser │────│ noVNC │────│ VNC Server │
│ localhost:6080│ │ Web Interface│ │ (x11vnc) │
└─────────────────┘ └──────────────┘ └─────────────────┘
┌──────▼──────┐
│ Xvfb + Compose │
│ Desktop App │
└────────────────┘
```
## Build-Prozess
### Web Application
1. Gradle Build: `wasmJsBrowserDistribution`
2. Output: `/build/dist/wasmJs/productionExecutable/`
3. Nginx serving static assets
### Desktop Application
1. Gradle Build: `createDistributable`
2. Output: `/build/compose/binaries/main/app/`
3. VNC Environment Setup:
- Xvfb (Virtual X Server)
- fluxbox (Window Manager)
- x11vnc (VNC Server)
- noVNC (Web-based VNC Client)
## Umgebungsvariablen
### Web Application
- `API_BASE_URL`: Backend API URL (default: `http://api-gateway:8081`)
- `APP_TITLE`: Anwendungstitel (default: `Meldestelle`)
### Desktop Application
- `API_BASE_URL`: Backend API URL (default: `http://api-gateway:8081`)
- `DISPLAY`: X11 Display (default: `:99`)
- `VNC_PORT`: VNC Server Port (default: `5901`)
- `NOVNC_PORT`: noVNC Web Interface Port (default: `6080`)
## Health Checks
### Web Application
- Endpoint: `http://localhost:4000/health`
- Methode: HTTP GET
- Erwartete Antwort: `{"status":"ok","service":"web-app"}`
### Desktop Application
- Endpoint: `http://localhost:6080/vnc.html`
- Methode: HTTP GET (via noVNC)
- Überprüfung: noVNC Web-Interface verfügbar
## Logs und Debugging
### Container-Logs anzeigen
```bash
# Web Application
docker-compose logs -f web-app
# Desktop Application
docker-compose logs -f desktop-app
```
### Desktop Application Logs
- Application Logs: `/var/log/meldestelle.log`
- Error Logs: `/var/log/meldestelle_error.log`
- VNC Logs: Über supervisor zugänglich
## Troubleshooting
### Web Application
- **Container startet nicht**: Überprüfe API Gateway Verfügbarkeit
- **Leere Seite**: Überprüfe Browser-Kompatibilität mit WASM
- **API-Fehler**: Überprüfe Netzwerk-Konfiguration
### Desktop Application
- **VNC nicht erreichbar**: Überprüfe Port 6080 Verfügbarkeit
- **Schwarzer Bildschirm**: Warte 30-60s für Application Startup
- **Keine GUI**: Überprüfe Xvfb und Window Manager Status
- **Performance-Probleme**: VNC-Bildschirmauflösung reduzieren
## Erweiterungen
### VNC-Konfiguration anpassen
Die VNC-Konfiguration kann über Umgebungsvariablen oder durch Anpassung des `start-vnc.sh` Skripts im Dockerfile geändert werden.
### Alternative GUI-Lösungen
- **X11 Forwarding**: Für Linux-Host-Systeme
- **RDP**: Alternative Remote Desktop Lösung
- **Web-based Terminals**: Für minimale GUI-Anforderungen
## Fazit
**Beide Containerisierungsansätze erfolgreich implementiert:**
- Web (WASM): Optimiert für moderne Browser
- Desktop (JVM): Universell über VNC-Web-Interface zugänglich
Die Lösung erfüllt alle Anforderungen aus der ursprünglichen Issue-Beschreibung und ermöglicht sowohl Web- als auch Desktop-Zugriff auf die Meldestelle-Anwendung über Docker-Container.