# Meldestelle - Docker Konfiguration ## Übersicht Das Meldestelle-Projekt nutzt eine modulare Docker-Compose-Struktur für verschiedene Deployment-Szenarien: - **`docker-compose.yml`** - Basis-Infrastruktur (PostgreSQL, Redis, Keycloak, Consul, Kafka, Monitoring, Gateway) - **`docker-compose.services.yml`** - Microservices (Ping, Members, Horses, Events, Masterdata) - **`docker-compose.clients.yml`** - Client-Anwendungen (Web-App, Auth-Server, Monitoring-Server) ## Architektur ### Infrastruktur-Services (docker-compose.yml) - **PostgreSQL** (Port 5432) - Hauptdatenbank - **Redis** (Port 6379) - Cache und Event Store - **Keycloak** (Port 8180) - Authentifizierung und Autorisierung - **Consul** (Port 8500) - Service Discovery - **Kafka + Zookeeper** (Ports 9092, 2181) - Event Streaming - **Prometheus** (Port 9090) - Metriken-Sammlung - **Grafana** (Port 3000) - Monitoring-Dashboard - **API Gateway** (Port 8081) - Zentraler Eingang ### Microservices (docker-compose.services.yml) - **Ping Service** (Port 8082) - Health Check und Test Service - **Members Service** (Port 8083) - Mitgliederverwaltung - **Horses Service** (Port 8084) - Pferdedaten - **Events Service** (Port 8085) - Veranstaltungen - **Masterdata Service** (Port 8086) - Stammdaten ### Client-Anwendungen (docker-compose.clients.yml) - **Web Application** (Port 4000) - Kotlin Multiplatform Frontend - **Auth Server** (Port 8087) - Erweiterte Authentifizierung - **Monitoring Server** (Port 8088) - Monitoring-Erweiterungen ## Verwendung ### Nur Infrastruktur starten ```bash # Für Backend-Entwicklung docker-compose up -d ``` ### Vollständiges System ```bash # Alle Services und Clients docker-compose -f docker-compose.yml \ -f docker-compose.services.yml \ -f docker-compose.clients.yml up -d ``` ### Nur Services ohne Clients ```bash # Infrastruktur + Microservices docker-compose -f docker-compose.yml \ -f docker-compose.services.yml up -d ``` ### Spezifische Services ```bash # Nur bestimmte Services docker-compose up -d postgres redis keycloak ``` ## Umgebungsvariablen Die Docker-Konfiguration nutzt das zentrale `.env`-System aus dem `config/` Verzeichnis: ```bash # Für Entwicklung ln -sf config/.env.dev .env # Für Produktion ln -sf config/.env.prod .env # Für Tests ln -sf config/.env.test .env ``` ### Wichtige Variablen | Variable | Standard | Beschreibung | |----------|----------|--------------| | `POSTGRES_USER` | meldestelle | PostgreSQL Benutzer | | `POSTGRES_PASSWORD` | meldestelle | PostgreSQL Passwort | | `POSTGRES_DB` | meldestelle | PostgreSQL Datenbankname | | `REDIS_PASSWORD` | (leer) | Redis Passwort | | `GATEWAY_PORT` | 8081 | API Gateway Port | | `CONSUL_PORT` | 8500 | Consul Port | | `KAFKA_PORT` | 9092 | Kafka Port | | `PROMETHEUS_PORT` | 9090 | Prometheus Port | | `GRAFANA_PORT` | 3000 | Grafana Port | ## Health Checks Alle Services verfügen über Health Checks: ```bash # Status aller Services prüfen docker-compose ps # Service-spezifische Logs docker-compose logs -f [service-name] # Health Check einzelner Services docker-compose exec postgres pg_isready -U meldestelle docker-compose exec redis redis-cli ping curl http://localhost:8500/v1/status/leader # Consul curl http://localhost:8081/actuator/health # API Gateway ``` ## Entwicklung ### Hot Reload für Web-App ```bash # Web-App im Development-Modus docker-compose -f docker-compose.yml \ -f docker-compose.clients.yml up -d web-app ``` ### Debug-Modus für Services ```bash # Service mit Debug-Port (5005) docker-compose -f docker-compose.yml \ -f docker-compose.services.yml up -d # Debug-Port ist automatisch verfügbar ``` ### Logs verfolgen ```bash # Alle Logs docker-compose logs -f # Spezifischer Service docker-compose logs -f api-gateway # Letzten 100 Zeilen docker-compose logs --tail=100 -f ``` ## Datenmanagement ### Volumes - `postgres-data` - PostgreSQL Daten - `redis-data` - Redis Persistierung - `prometheus-data` - Prometheus Metriken - `grafana-data` - Grafana Dashboards - `monitoring-data` - Custom Monitoring Daten ### Backup ```bash # PostgreSQL Backup docker-compose exec -T postgres pg_dump -U meldestelle meldestelle > backup.sql # Redis Backup docker-compose exec redis redis-cli SAVE docker cp $(docker-compose ps -q redis):/data/dump.rdb ./redis-backup.rdb ``` ### Reset ```bash # Alle Container und Volumes löschen docker-compose down -v docker-compose -f docker-compose.yml \ -f docker-compose.services.yml \ -f docker-compose.clients.yml down -v # Images neu bauen docker-compose build --no-cache ``` ## Monitoring ### Prometheus Metriken - URL: http://localhost:9090 - Sammelt Metriken von allen Services - Konfiguration: `docker/monitoring/prometheus/prometheus.yml` ### Grafana Dashboards - URL: http://localhost:3000 - Benutzer: admin / admin (Standard) - Vorkonfigurierte Dashboards für alle Services ### Service Discovery - Consul UI: http://localhost:8500 - Zeigt alle registrierten Services - Health Status und Service-Informationen ## Troubleshooting ### Häufige Probleme 1. **Port-Konflikte** ```bash # Ports prüfen netstat -tulpn | grep :8081 # Alternative Ports in .env setzen GATEWAY_PORT=8082 ``` 2. **Service startet nicht** ```bash # Dependencies prüfen docker-compose ps # Logs analysieren docker-compose logs [service-name] # Service neu starten docker-compose restart [service-name] ``` 3. **Speicher-Probleme** ```bash # Speicher freigeben docker system prune -a # Volumes prüfen docker volume ls ``` 4. **Netzwerk-Probleme** ```bash # Netzwerk neu erstellen docker-compose down docker network prune docker-compose up -d ``` ### Konfiguration validieren ```bash # Docker-Compose Syntax prüfen docker-compose config # Mit allen Files docker-compose -f docker-compose.yml \ -f docker-compose.services.yml \ -f docker-compose.clients.yml config ``` ## Produktion ### Sicherheitsaspekte 1. **Secrets**: Verwenden Sie starke Passwörter in `.env.prod` 2. **Netzwerk**: Externe Zugriffe über Load Balancer 3. **Volumes**: Backup-Strategie implementieren 4. **Updates**: Regelmäßige Image-Updates ### Performance-Optimierungen 1. **Resource Limits**: In Produktion definieren 2. **Monitoring**: Vollständige Observability 3. **Load Balancing**: Mehrere Instanzen für kritische Services 4. **Caching**: Redis optimal konfigurieren ## Build-Automatisierung ### Makefile-Integration ```bash # Verfügbare Targets make help # System starten make start # System stoppen make stop # Logs anzeigen make logs # Services bauen make build ``` ### CI/CD Integration ```yaml # GitHub Actions Beispiel - name: Start Services run: | docker-compose -f docker-compose.yml \ -f docker-compose.services.yml up -d - name: Run Tests run: | docker-compose exec -T api-gateway ./gradlew test ``` ## Support Bei Problemen: 1. Überprüfen Sie die Logs: `docker-compose logs -f` 2. Validieren Sie die Konfiguration: `docker-compose config` 3. Prüfen Sie die Umgebungsvariablen: `docker-compose config | grep environment` 4. Konsultieren Sie die Service-spezifischen READMEs im jeweiligen Verzeichnis --- *Letzte Aktualisierung: 2025-01-06*