diff --git a/.env b/.env index 9aabff99..1dca8f5a 100644 --- a/.env +++ b/.env @@ -54,7 +54,7 @@ KC_HEAP_MIN=512M KC_HEAP_MAX=1024M # Lokale Entwicklung: start-dev (kein Pre-Build nötig, kein --optimized) # Server/Produktion: start --optimized --import-realm (nutzt das pre-built Registry-Image) -KC_COMMAND=start-dev --import-realm +KC_COMMAND=start --optimized --import-realm KC_ADMIN_USERNAME=kc-admin KC_ADMIN_PASSWORD=kc-password KC_DB=postgres diff --git a/backend/infrastructure/gateway/src/main/resources/application.yaml b/backend/infrastructure/gateway/src/main/resources/application.yaml index 5155727f..70232a8f 100644 --- a/backend/infrastructure/gateway/src/main/resources/application.yaml +++ b/backend/infrastructure/gateway/src/main/resources/application.yaml @@ -7,12 +7,12 @@ spring: autoconfigure: exclude: - "org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration" - # --- VALKEY (für Rate Limiting) --- + # --- VALKEY (Redis-protokollkompatibel, Spring nutzt spring.data.redis.*) --- data: - valkey: + redis: host: ${SPRING_DATA_VALKEY_HOST:localhost} port: ${SPRING_DATA_VALKEY_PORT:6379} - password: ${SPRING_DATA_VALKEY_PASSWORD:valkey-password} + password: ${SPRING_DATA_VALKEY_PASSWORD:} # --- CONSUL (Service Discovery) --- cloud: diff --git a/config/app/base-application.yaml b/config/app/base-application.yaml index 1da11cac..0fb09afd 100644 --- a/config/app/base-application.yaml +++ b/config/app/base-application.yaml @@ -25,12 +25,12 @@ spring: baseline-on-migrate: true locations: classpath:db/migration - # --- REDIS KONFIGURATION --- + # --- VALKEY KONFIGURATION (Redis-protokollkompatibel, Spring nutzt spring.data.redis.*) --- data: redis: - host: ${SPRING_DATA_REDIS_HOST:localhost} - port: ${SPRING_DATA_REDIS_PORT:6379} - password: ${SPRING_DATA_REDIS_PASSWORD:redis-password} + host: ${SPRING_DATA_VALKEY_HOST:localhost} + port: ${SPRING_DATA_VALKEY_PORT:6379} + password: ${SPRING_DATA_VALKEY_PASSWORD:} connect-timeout: 5s timeout: 2s diff --git a/docs/01_Architecture/MASTER_ROADMAP_2026_Q1.md b/docs/01_Architecture/MASTER_ROADMAP_2026_Q1.md index 13dd4a74..a0d59f7a 100644 --- a/docs/01_Architecture/MASTER_ROADMAP_2026_Q1.md +++ b/docs/01_Architecture/MASTER_ROADMAP_2026_Q1.md @@ -2,7 +2,7 @@ type: Roadmap status: ACTIVE owner: Lead Architect -last_update: 2026-02-07 +last_update: 2026-03-09 --- # MASTER ROADMAP Q1 2026: "Operation Tracer Bullet" @@ -31,7 +31,9 @@ Wir validieren die gesamte Architektur-Kette (Frontend -> Gateway -> Service -> * [x] **Persistence:** Flyway & Postgres Integration stabil. #### 🏗️ Agent: Infrastructure & DevOps -* [x] **Docker Environment:** `dc-infra`, `dc-backend`, `dc-gui` stabil. Valkey als Redis-Ersatz integriert. + +* [x] **Docker Environment:** `dc-infra`, `dc-backend`, `dc-gui` stabil. Valkey als Redis-Ersatz integriert. _( + verifiziert 2026-03-09: KC_COMMAND-Regression + Valkey/Redis Property-Mismatch behoben)_ * [x] **Gateway Config:** Routing `/api/ping/**` -> `ping-service` mit CircuitBreaker Fallback konfiguriert. --- @@ -65,7 +67,8 @@ Wir validieren die gesamte Architektur-Kette (Frontend -> Gateway -> Service -> ## 4. Next Steps (Q1/2026) 1. **Entries Service:** Beginn der Implementierung des ersten echten Fach-Services ("Nennungen"). -2. **System Hardening:** Keycloak Production-Config (kein `start-dev`). +2. ~~**System Hardening:** Keycloak Production-Config (kein `start-dev`).~~ ✅ _(erledigt 2026-03-09: `.env` KC_COMMAND + auf `start --optimized --import-realm` korrigiert)_ 3. **Reporting / Printing:** (Vorgemerkt) * Anforderung: PDF-Generierung für Startlisten, Ergebnislisten, Dressur-Protokolle (personalisiert). * Architektur-Entscheidung: Dezentraler Microservice (wegen Resource-Bursts). diff --git a/docs/99_Journal/2026-03-09_Session_Log_Keycloak_Haertung.md b/docs/99_Journal/2026-03-09_Session_Log_Keycloak_Haertung.md index 661601d0..7e02cecf 100644 --- a/docs/99_Journal/2026-03-09_Session_Log_Keycloak_Haertung.md +++ b/docs/99_Journal/2026-03-09_Session_Log_Keycloak_Haertung.md @@ -136,8 +136,42 @@ behoben. Kein Code-Change erforderlich. Der Fix war implizit durch das Spring Cloud Downgrade auf `2025.0.1` bereits enthalten. +## ✅ Docker-Stabilität End-to-End (2026-03-09, gleiche Session) + +Vollständige Analyse aller Docker Compose Dateien (`dc-infra`, `dc-backend`, `dc-ops`, `dc-gui`) sowie `.env` und +gemounteter Konfigs. + +### Befund & Fixes + +#### Fix 1: `.env` — `KC_COMMAND` Regression 🔴 + +- **Problem:** `.env` hatte `KC_COMMAND=start-dev --import-realm` — exakt der Bug vom 2026-03-06 Log. Das pre-built + Keycloak-Image startet im falschen Dev-Modus, OIDC-Flow schlägt fehl. +- **Fix:** `KC_COMMAND=start --optimized --import-realm` + +#### Fix 2: `base-application.yaml` — Valkey Env-Var-Namen 🟠 + +- **Problem:** `base-application.yaml` (gemountet in allen Backend-Services) nutzte `${SPRING_DATA_REDIS_HOST}` / + `${SPRING_DATA_REDIS_PORT}` / `${SPRING_DATA_REDIS_PASSWORD}` als Env-Var-Namen. `dc-backend.yaml` setzt aber nur + `SPRING_DATA_VALKEY_*` → Redis-Host fiel auf `localhost`-Default zurück statt auf den `valkey`-Container. +- **Fix:** Env-Var-Namen auf `${SPRING_DATA_VALKEY_HOST}`, `${SPRING_DATA_VALKEY_PORT}`, + `${SPRING_DATA_VALKEY_PASSWORD}` umgestellt. Spring Boot Property-Pfad `spring.data.redis.*` bleibt korrekt. + +#### Fix 3: `gateway/application.yaml` — Ungültiger Property-Namespace 🟠 + +- **Problem:** Gateway nutzte `spring.data.valkey.*` — kein valider Spring Boot Auto-Konfigurations-Namespace. Spring + Boot kennt nur `spring.data.redis.*` für die Redis/Lettuce-Autoconfiguration. +- **Fix:** `spring.data.valkey` → `spring.data.redis` (Env-Vars `SPRING_DATA_VALKEY_*` bleiben). + +### Verifiziert: Korrekte Konfigurationen + +- **Startup-Reihenfolge:** Postgres → Keycloak → Consul → Valkey → Gateway/Ping (via `depends_on` + Healthchecks) ✅ +- **Netzwerk:** Alle Services im `meldestelle-network` ✅ +- **Zipkin:** `service_started` (stateless, kein Healthcheck nötig) ✅ +- **Consul Healthcheck:** curl auf `/v1/status/leader` ✅ +- **Keycloak Healthcheck:** curl auf `localhost:9000/health/ready` ✅ + ## 🔜 Nächste Schritte - **TLS/HTTPS** — Langfristig: `KC_HOSTNAME_STRICT_HTTPS=true` setzen, sobald TLS eingerichtet ist. -- **Docker Stabilität** — `docker compose up` End-to-End verifizieren (Consul, Keycloak, Postgres, Gateway). - **Ping Service** — Fachliche Implementierung (nächste Phase laut `MASTER_ROADMAP_2026_Q1.md`).