169 lines
6.0 KiB
Markdown
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.
|