6.0 KiB
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.ymldefiniert, nicht indocker-compose.clients.yml - Bei standalone Ausführung von
docker-compose.clients.ymlkonnte Docker denapi-gatewayService nicht finden
Betroffene Services:
- web-app:
depends_on: - api-gateway(Zeile 27-28) - 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=localhostfür externe Gateway-Verbindung - Multi-File:
GATEWAY_HOSTnicht gesetzt = verwendetapi-gateway(Container-Name)
3. Erweiterte Usage-Dokumentation
Klare Deployment-Szenarien hinzugefügt:
- Standalone Client Deployment (jetzt möglich)
- Multi-File mit Infrastruktur
- 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:
- Infrastructure Services (postgres, redis, consul, api-gateway)
- 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_onfunktioniert nicht file-übergreifend bei standalone Ausführung- Client-Services müssen unabhängig startbar sein
Solution Pattern:
- Dependency Removal: Entfernung harter Dependencies zu externen Services
- Flexible Configuration: Environment-Variable für externe Service-Verbindungen
- Multi-Mode Support: Unterstützung sowohl standalone als auch multi-file deployment
- 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_HOSTEnvironment-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-networkist verfügbar - API Gateway ist healthy bevor Clients starten
Für Production Deployment:
- Alle Environment-Variablen in
.envkonfiguriert - 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.