Docker-Compose-Guide
Lokale Entwicklungsumgebung: eine PostgreSQL-Instanz (mit sechs Datenbanken, eine je Service, siehe ADR-0003) und ein Single-Node-Kafka-Broker (KRaft-Modus, kein ZooKeeper nötig). Bewusst kein Kubernetes/Helm — siehe ADR-0004.
Starten
cd infra
docker compose up -d
| Dienst | Port | Zugangsdaten |
|---|---|---|
| PostgreSQL | localhost:5432 |
Benutzer aurorabank, Passwort aurorabank; Datenbanken: customer_db, accounts_db, cards_db, payments_db, lending_db, notification_db |
| Kafka | localhost:9092 |
kein Auth (nur lokale Entwicklung) |
| Keycloak | localhost:8180 |
Admin-Konsole: admin/admin; Realm aurorabank wird per --import-realm automatisch geladen (siehe infra/keycloak/aurorabank-realm.json) |
Jeder Service verbindet sich über sein eigenes application.yml mit seiner Datenbank
(spring.datasource.url=jdbc:postgresql://localhost:5432/<service>_db) — niemals mit der eines
anderen Service.
Stoppen / Zurücksetzen
docker compose down # stoppen, Daten bleiben im Volume erhalten
docker compose down -v # stoppen und alle Daten loeschen (frischer Start)
Verhältnis zu Testcontainers
Dieses docker-compose.yml ist für manuelle, interaktive lokale Entwicklung (z. B. einen
Service mit mvn spring-boot:run starten und mit curl/Postman ausprobieren). Automatisierte
Integrationstests (*IT.java) verwenden nicht diese Instanz, sondern starten ihre eigenen,
isolierten Testcontainers-Container (siehe ADR-0006 und common-testing) — so bleiben Testläufe
reproduzierbar und unabhängig davon, ob docker compose up gerade läuft oder welchen Datenstand
die manuelle Instanz gerade hat.
Keycloak
docker-compose.yml enthält einen Keycloak-Dienst mit vorkonfiguriertem Realm-Export
(infra/keycloak/aurorabank-realm.json, per start-dev --import-realm automatisch geladen: Realm
aurorabank, ein öffentlicher Client aurorabank-swagger, ein Testnutzer alice/alice123).
Nur customer-service prüft Tokens tatsächlich (siehe ADR-0007) - alle anderen fünf Services
laufen weiterhin ohne Authentifizierung, eine bewusste Scope-Entscheidung, um den TDD-Kern-Flow der
übrigen Domain-Use-Cases nicht nachträglich zu verwässern.