meldestelle/docs/DOCKER_COMPOSE_CLIENTS_FIX.md
2025-09-15 17:48:57 +02:00

6.0 KiB

Docker Compose Clients Fix - Problemlösung

🎯 Problemstellung

Ursprünglicher Fehler:

/usr/bin/docker compose -f /home/stefan/WsMeldestelle/Meldestelle/docker-compose.clients.yml -p meldestelle up -d
service "desktop-app" depends on undefined service "api-gateway": invalid compose project
`docker-compose` process finished with exit code 1

🔍 Problemanalyse

Hauptproblem: Fehlende Service-Dependencies

  • web-app und desktop-app Services hatten depends_on: - api-gateway
  • api-gateway Service ist aber in docker-compose.yml definiert, nicht in docker-compose.clients.yml
  • Bei standalone Ausführung von docker-compose.clients.yml konnte Docker den api-gateway Service nicht finden

Betroffene Services:

  1. web-app: depends_on: - api-gateway (Zeile 27-28)
  2. desktop-app: depends_on: - api-gateway (Zeile 64-65)

Implementierte Lösung

1. Dependencies entfernt

# VORHER (problematisch):
web-app:
  # ...
  depends_on:
    - api-gateway

desktop-app:
  # ...
  depends_on:
    - api-gateway
# NACHHER (funktioniert):
web-app:
  # ...
  # depends_on removed for standalone client deployment
  # When using multi-file setup, api-gateway dependency is handled externally

desktop-app:
  # ...
  # depends_on removed for standalone client deployment
  # When using multi-file setup, api-gateway dependency is handled externally

2. Flexible API-Gateway Konfiguration

# VORHER (hardcodiert):
environment:
  API_BASE_URL: http://api-gateway:${GATEWAY_PORT:-8081}

# NACHHER (flexibel):
environment:
  API_BASE_URL: http://${GATEWAY_HOST:-api-gateway}:${GATEWAY_PORT:-8081}

Vorteile:

  • Standalone: GATEWAY_HOST=localhost für externe Gateway-Verbindung
  • Multi-File: GATEWAY_HOST nicht gesetzt = verwendet api-gateway (Container-Name)

3. Erweiterte Usage-Dokumentation

Klare Deployment-Szenarien hinzugefügt:

  1. Standalone Client Deployment (jetzt möglich)
  2. Multi-File mit Infrastruktur
  3. Komplettes System

🚀 Usage-Beispiele

1. Standalone Client Deployment (FIXED)

# Clients alleine starten (externe API-Gateway Verbindung)
GATEWAY_HOST=localhost docker compose -f docker-compose.clients.yml up -d

# Oder mit .env Datei:
echo "GATEWAY_HOST=localhost" >> .env
docker compose -f docker-compose.clients.yml up -d

Verwendungszweck:

  • Development: Client-Development gegen lokalen Gateway
  • Staging: Clients gegen remote Gateway-Instance
  • Testing: Isoliertes Client-Testing

2. Multi-File mit Infrastruktur

# Infrastructure + Clients
docker compose -f docker-compose.yml -f docker-compose.clients.yml up -d

Service-Start-Reihenfolge:

  1. Infrastructure Services (postgres, redis, consul, api-gateway)
  2. Client Services (web-app, desktop-app)

3. Vollständiges System

# Infrastructure + Backend Services + Frontend Clients
docker compose -f docker-compose.yml -f docker-compose.services.yml -f docker-compose.clients.yml up -d

📋 Validierung und Tests

Standalone Deployment Test:

✅ docker compose -f docker-compose.clients.yml config --quiet
# Kein Fehler - Problem behoben!

Multi-File Setup Test:

✅ docker compose -f docker-compose.yml -f docker-compose.clients.yml config --quiet
# Funktioniert einwandfrei

Vollständiges System Test:

✅ docker compose -f docker-compose.yml -f docker-compose.services.yml -f docker-compose.clients.yml config --quiet
# Alle Konfigurationen gültig

🔧 Environment-Variablen

Neue Variables für Client-Konfiguration:

# Gateway-Host (für standalone deployment)
GATEWAY_HOST=localhost          # Externe Gateway-Verbindung
GATEWAY_HOST=api-gateway        # Container-zu-Container (default)

# Gateway-Port
GATEWAY_PORT=8081              # Standard API Gateway Port

# App-Konfiguration
APP_NAME=Meldestelle
APP_VERSION=1.0.0
NODE_ENV=production

🎯 Problemlösung im Detail

Root Cause:

  • Docker Compose kann Services nur innerhalb desselben Compose-File oder -Projekts referenzieren
  • depends_on funktioniert nicht file-übergreifend bei standalone Ausführung
  • Client-Services müssen unabhängig startbar sein

Solution Pattern:

  1. Dependency Removal: Entfernung harter Dependencies zu externen Services
  2. Flexible Configuration: Environment-Variable für externe Service-Verbindungen
  3. Multi-Mode Support: Unterstützung sowohl standalone als auch multi-file deployment
  4. Clear Documentation: Eindeutige Usage-Szenarien und Beispiele

🌟 Vorteile der Lösung

Standalone Deployment:

  • Clients können unabhängig von der Infrastruktur gestartet werden
  • Flexibel konfigurierbare Gateway-Verbindungen
  • Ideal für Development und Testing

Multi-File Deployment:

  • Funktioniert weiterhin einwandfrei
  • Automatische Container-zu-Container Kommunikation
  • Optimale Production-Deployment

Maintenance:

  • Klare Deployment-Szenarien dokumentiert
  • Flexible Environment-Variable Konfiguration
  • Keine Breaking Changes für existierende Deployments

📝 Deployment-Checkliste

Für Standalone Client Deployment:

  • GATEWAY_HOST Environment-Variable setzen
  • Externe API Gateway ist erreichbar
  • Ports 4000 (web-app) und 6080 (desktop-app) sind verfügbar

Für Multi-File Deployment:

  • Infrastruktur-Services starten zuerst
  • Netzwerk meldestelle-network ist verfügbar
  • API Gateway ist healthy bevor Clients starten

Für Production Deployment:

  • Alle Environment-Variablen in .env konfiguriert
  • Health-Checks funktionieren
  • Nginx Reverse-Proxy korrekt konfiguriert

Status: Problem gelöst

Original Error: service "desktop-app" depends on undefined service "api-gateway": invalid compose project

Status: BEHOBEN

Die docker-compose.clients.yml kann nun erfolgreich standalone ausgeführt werden und funktioniert gleichzeitig einwandfrei im Multi-File-Setup.