chore(ci): Align GH Workflows with Docker SSoT, new paths; minimal SSoT guard; staticAnalysis (#23)
* chore(MP-21): snapshot pre-refactor state (Epic 1)
* chore(MP-22): scaffold new repo structure, relocate Docker Compose, move frontend/backend modules, update Makefile; add docs mapping and env template
* MP-22 Epic 2: Erfolgreich umgesetzt und verifiziert
* MP-23 Epic 3: Gradle/Build Governance zentralisieren
* MP-23 Epic 3: Gradle/Build Governance zentralisieren
* chore(devops)!: Docker-SSoT (.env) konsolidiert, Compose-Mounts ergänzt, Makefile entfernt
- ENV Single Source of Truth
- docker/.env.example neu (inkl. REDIS_PASSWORD, Ports, Build-Overrides)
- config/.env(.example) als DEPRECATED markiert (Verweis auf docker/.env[.example])
- Docker Compose vereinheitlicht (docker/docker-compose.yaml)
- Postgres: zentralen postgresql.conf mounten (../config/postgres/postgresql.conf)
und Start mit -c config_file=/etc/postgresql/postgresql.conf
- Redis: zentralen redis.conf mounten (../config/redis/redis.conf)
und Start via "redis-server … ${REDIS_PASSWORD:+--requirepass $REDIS_PASSWORD}"
- Web-Nginx: ../config/nginx/nginx.prod.conf → /etc/nginx/nginx.conf (ro)
- Monitoring: Prometheus/Grafana nutzen ../config/monitoring/* als SSoT
- Frontend/DI/Network (MP-23 Grundlage)
- :frontend:core:network Modul mit Koin `apiClient` (Ktor + JSON/Retry/Timeout/Logging)
- Plattform-Basis-URL-Auflösung (JVM: ENV API_BASE_URL; JS: globalThis.API_BASE_URL / Same-Origin)
- Web index.html setzt API_BASE_URL (Query `?apiBaseUrl=…` > Same-Origin > Fallback)
- Build/Gradle & Module-Refs
- settings.gradle.kts: neue Frontend-/Backend-Pfade bereits inkludiert
- Features/Shell: Abhängigkeiten auf :frontend:shared / :frontend:core:* angepasst
- Ping-API-Refs auf :backend:services:ping:ping-api vereinheitlicht
- Dockerfiles angepasst
- backend/infrastructure/gateway/Dockerfile → Tasks/Pfade auf :backend:gateway
- backend/services/ping/Dockerfile → Tasks/Pfade auf :backend:services:ping:ping-service
- Static Analysis / Guards
- config/detekt/detekt.yml hinzugefügt
- Leichter Arch-Guard (Frontend) gegen manuelle Authorization-Header vorbereitet
- Doku
- docs/ARCHITECTURE.md (Struktur, Mapping, Next Steps) ergänzt
- docs/adr/README.md angelegt
BREAKING CHANGES:
- Makefile komplett entfernt (bitte direkt `docker compose` verwenden)
- ENV-Quelle ist jetzt docker/.env (statt config/.env oder Root)
- Compose-Datei unter docker/docker-compose.yaml (nicht mehr compose.yaml im Repo-Root)
Verifikation (lokal):
- ENV anlegen: `cp docker/.env.example docker/.env` (Werte anpassen)
- Compose prüfen: `docker compose --env-file docker/.env -f docker/docker-compose.yaml config`
- Infrastruktur: `docker compose --env-file docker/.env -f docker/docker-compose.yaml -p meldestelle up -d postgres redis keycloak web-app`
- Services bauen: `docker compose --env-file docker/.env -f docker/docker-compose.yaml -p meldestelle build api-gateway ping-service --no-cache --progress=plain`
Refs: MP-22 (Epic 2), MP-23 (Epic 3)
* chore(devops)!: Docker-SSoT (.env) konsolidiert, Compose-Mounts ergänzt, Makefile entfernt
- ENV Single Source of Truth
- docker/.env.example neu (inkl. REDIS_PASSWORD, Ports, Build-Overrides)
- config/.env(.example) als DEPRECATED markiert (Verweis auf docker/.env[.example])
- Docker Compose vereinheitlicht (docker/docker-compose.yaml)
- Postgres: zentralen postgresql.conf mounten (../config/postgres/postgresql.conf)
und Start mit -c config_file=/etc/postgresql/postgresql.conf
- Redis: zentralen redis.conf mounten (../config/redis/redis.conf)
und Start via "redis-server … ${REDIS_PASSWORD:+--requirepass $REDIS_PASSWORD}"
- Web-Nginx: ../config/nginx/nginx.prod.conf → /etc/nginx/nginx.conf (ro)
- Monitoring: Prometheus/Grafana nutzen ../config/monitoring/* als SSoT
- Frontend/DI/Network (MP-23 Grundlage)
- :frontend:core:network Modul mit Koin `apiClient` (Ktor + JSON/Retry/Timeout/Logging)
- Plattform-Basis-URL-Auflösung (JVM: ENV API_BASE_URL; JS: globalThis.API_BASE_URL / Same-Origin)
- Web index.html setzt API_BASE_URL (Query `?apiBaseUrl=…` > Same-Origin > Fallback)
- Build/Gradle & Module-Refs
- settings.gradle.kts: neue Frontend-/Backend-Pfade bereits inkludiert
- Features/Shell: Abhängigkeiten auf :frontend:shared / :frontend:core:* angepasst
- Ping-API-Refs auf :backend:services:ping:ping-api vereinheitlicht
- Dockerfiles angepasst
- backend/infrastructure/gateway/Dockerfile → Tasks/Pfade auf :backend:gateway
- backend/services/ping/Dockerfile → Tasks/Pfade auf :backend:services:ping:ping-service
- Static Analysis / Guards
- config/detekt/detekt.yml hinzugefügt
- Leichter Arch-Guard (Frontend) gegen manuelle Authorization-Header vorbereitet
- Doku
- docs/ARCHITECTURE.md (Struktur, Mapping, Next Steps) ergänzt
- docs/adr/README.md angelegt
BREAKING CHANGES:
- Makefile komplett entfernt (bitte direkt `docker compose` verwenden)
- ENV-Quelle ist jetzt docker/.env (statt config/.env oder Root)
- Compose-Datei unter docker/docker-compose.yaml (nicht mehr compose.yaml im Repo-Root)
Verifikation (lokal):
- ENV anlegen: `cp docker/.env.example docker/.env` (Werte anpassen)
- Compose prüfen: `docker compose --env-file docker/.env -f docker/docker-compose.yaml config`
- Infrastruktur: `docker compose --env-file docker/.env -f docker/docker-compose.yaml -p meldestelle up -d postgres redis keycloak web-app`
- Services bauen: `docker compose --env-file docker/.env -f docker/docker-compose.yaml -p meldestelle build api-gateway ping-service --no-cache --progress=plain`
Refs: MP-22 (Epic 2), MP-23 (Epic 3)
* chore(devops)!: Docker-SSoT (.env) konsolidiert, Compose-Mounts ergänzt, Makefile entfernt
- ENV Single Source of Truth
- docker/.env.example neu (inkl. REDIS_PASSWORD, Ports, Build-Overrides)
- config/.env(.example) als DEPRECATED markiert (Verweis auf docker/.env[.example])
- Docker Compose vereinheitlicht (docker/docker-compose.yaml)
- Postgres: zentralen postgresql.conf mounten (../config/postgres/postgresql.conf)
und Start mit -c config_file=/etc/postgresql/postgresql.conf
- Redis: zentralen redis.conf mounten (../config/redis/redis.conf)
und Start via "redis-server … ${REDIS_PASSWORD:+--requirepass $REDIS_PASSWORD}"
- Web-Nginx: ../config/nginx/nginx.prod.conf → /etc/nginx/nginx.conf (ro)
- Monitoring: Prometheus/Grafana nutzen ../config/monitoring/* als SSoT
- Frontend/DI/Network (MP-23 Grundlage)
- :frontend:core:network Modul mit Koin `apiClient` (Ktor + JSON/Retry/Timeout/Logging)
- Plattform-Basis-URL-Auflösung (JVM: ENV API_BASE_URL; JS: globalThis.API_BASE_URL / Same-Origin)
- Web index.html setzt API_BASE_URL (Query `?apiBaseUrl=…` > Same-Origin > Fallback)
- Build/Gradle & Module-Refs
- settings.gradle.kts: neue Frontend-/Backend-Pfade bereits inkludiert
- Features/Shell: Abhängigkeiten auf :frontend:shared / :frontend:core:* angepasst
- Ping-API-Refs auf :backend:services:ping:ping-api vereinheitlicht
- Dockerfiles angepasst
- backend/infrastructure/gateway/Dockerfile → Tasks/Pfade auf :backend:gateway
- backend/services/ping/Dockerfile → Tasks/Pfade auf :backend:services:ping:ping-service
- Static Analysis / Guards
- config/detekt/detekt.yml hinzugefügt
- Leichter Arch-Guard (Frontend) gegen manuelle Authorization-Header vorbereitet
- Doku
- docs/ARCHITECTURE.md (Struktur, Mapping, Next Steps) ergänzt
- docs/adr/README.md angelegt
BREAKING CHANGES:
- Makefile komplett entfernt (bitte direkt `docker compose` verwenden)
- ENV-Quelle ist jetzt docker/.env (statt config/.env oder Root)
- Compose-Datei unter docker/docker-compose.yaml (nicht mehr compose.yaml im Repo-Root)
Verifikation (lokal):
- ENV anlegen: `cp docker/.env.example docker/.env` (Werte anpassen)
- Compose prüfen: `docker compose --env-file docker/.env -f docker/docker-compose.yaml config`
- Infrastruktur: `docker compose --env-file docker/.env -f docker/docker-compose.yaml -p meldestelle up -d postgres redis keycloak web-app`
- Services bauen: `docker compose --env-file docker/.env -f docker/docker-compose.yaml -p meldestelle build api-gateway ping-service --no-cache --progress=plain`
Refs: MP-22 (Epic 2), MP-23 (Epic 3)
* chore(ci): Workflows an Docker-SSoT & neue Struktur angepasst, minimaler SSoT-Guard
- ssot-guard.yml: Option B (minimal) → `docker compose -f docker/docker-compose.yaml config` als Lint
- integration-tests.yml: `./gradlew staticAnalysis` vor Integrationstests
- docs-kdoc-sync.yml: Dokka-Task Fallback (dokkaGfmAll || dokkaGfm), YouTrack-Sync nur wenn Script vorhanden
- deploy-proxmox.yml: Compose-Pfade auf docker/docker-compose.yaml + `--env-file docker/.env`; Build/Test Schritte vereinheitlicht
- ci-main.yml: SSoT-Skripte per `if: hashFiles(...)` guarded, Compose-Lint Fallback; OpenAPI‑Pfad → backend/gateway; ADR‑Pfade → docs/adr/**; `staticAnalysis` in Build integriert
- youtrack-sync.yml: unverändert (funktional)
Refs: MP-22, MP-23
* chore(ci): Workflows an Docker-SSoT & neue Struktur angepasst, minimaler SSoT-Guard
- ssot-guard.yml: Option B (minimal) → `docker compose -f docker/docker-compose.yaml config` als Lint
- integration-tests.yml: `./gradlew staticAnalysis` vor Integrationstests
- docs-kdoc-sync.yml: Dokka-Task Fallback (dokkaGfmAll || dokkaGfm), YouTrack-Sync nur wenn Script vorhanden
- deploy-proxmox.yml: Compose-Pfade auf docker/docker-compose.yaml + `--env-file docker/.env`; Build/Test Schritte vereinheitlicht
- ci-main.yml: SSoT-Skripte per `if: hashFiles(...)` guarded, Compose-Lint Fallback; OpenAPI‑Pfad → backend/gateway; ADR‑Pfade → docs/adr/**; `staticAnalysis` in Build integriert
- youtrack-sync.yml: unverändert (funktional)
Refs: MP-22, MP-23
* fix(ci): create .env from example before validating compose config
* fix(ci): update ssot-guard filename (.yaml) and sync workflow state
* fixing
* fix(webpack): correct sql.js fallback configuration for webpack 5
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
# DEPRECATED – Single Source of Truth moved to docker/.env
|
||||
#
|
||||
# This file is no longer used by Docker Compose or any build scripts.
|
||||
# Please configure environment variables in:
|
||||
# docker/.env (create from docker/.env.example)
|
||||
#
|
||||
# Reason: Avoid duplicated/conflicting configuration files.
|
||||
# Monitoring, Postgres, Redis, Keycloak, Gateway etc. read values from docker/.env.
|
||||
-190
@@ -1,190 +0,0 @@
|
||||
# =============================================================================
|
||||
# Meldestelle - Development Environment Configuration
|
||||
# =============================================================================
|
||||
# Development-specific environment variables
|
||||
# =============================================================================
|
||||
|
||||
# =============================================================================
|
||||
# 1. APPLICATION CONFIGURATION
|
||||
# =============================================================================
|
||||
APP_NAME=Meldestelle
|
||||
APP_VERSION=1.0.0
|
||||
APP_DESCRIPTION='Pferdesport Meldestelle System'
|
||||
APP_ENVIRONMENT=development
|
||||
APP_HOST=0.0.0.0
|
||||
|
||||
# Development-specific settings
|
||||
DEBUG_MODE=true
|
||||
DEV_HOT_RELOAD=true
|
||||
|
||||
# =============================================================================
|
||||
# 2. PORT MANAGEMENT
|
||||
# =============================================================================
|
||||
# Gateway Ports
|
||||
GATEWAY_PORT=8081
|
||||
GATEWAY_ADMIN_PORT=8080
|
||||
|
||||
# Service Ports
|
||||
PING_SERVICE_PORT=8082
|
||||
MEMBERS_SERVICE_PORT=8083
|
||||
HORSES_SERVICE_PORT=8084
|
||||
EVENTS_SERVICE_PORT=8085
|
||||
MASTERDATA_SERVICE_PORT=8086
|
||||
AUTH_SERVICE_PORT=8087
|
||||
|
||||
# Client Application Ports
|
||||
WEB_APP_PORT=4000
|
||||
DESKTOP_VNC_PORT=5901
|
||||
DESKTOP_WEB_VNC_PORT=6080
|
||||
|
||||
# Infrastructure Ports
|
||||
CONSUL_PORT=8500
|
||||
REDIS_PORT=6379
|
||||
KAFKA_PORT=9092
|
||||
PROMETHEUS_PORT=9090
|
||||
GRAFANA_PORT=3000
|
||||
|
||||
# =============================================================================
|
||||
# 3. DATABASE CONFIGURATION
|
||||
# =============================================================================
|
||||
DB_HOST=localhost
|
||||
DB_PORT=5432
|
||||
DB_NAME=meldestelle
|
||||
DB_USER=meldestelle
|
||||
DB_PASSWORD=meldestelle
|
||||
DB_MAX_POOL_SIZE=10
|
||||
DB_MIN_POOL_SIZE=5
|
||||
DB_AUTO_MIGRATE=true
|
||||
|
||||
POSTGRES_USER=meldestelle
|
||||
POSTGRES_PASSWORD=meldestelle
|
||||
POSTGRES_DB=meldestelle
|
||||
POSTGRES_EXTERNAL_PORT=5432
|
||||
|
||||
# =============================================================================
|
||||
# 4. REDIS CONFIGURATION
|
||||
# =============================================================================
|
||||
REDIS_EVENT_STORE_HOST=localhost
|
||||
REDIS_EVENT_STORE_PORT=6379
|
||||
REDIS_EVENT_STORE_PASSWORD=
|
||||
REDIS_EVENT_STORE_DATABASE=0
|
||||
REDIS_EVENT_STORE_CONNECTION_TIMEOUT=2000
|
||||
REDIS_EVENT_STORE_READ_TIMEOUT=2000
|
||||
REDIS_EVENT_STORE_USE_POOLING=true
|
||||
REDIS_EVENT_STORE_MAX_POOL_SIZE=8
|
||||
REDIS_EVENT_STORE_MIN_POOL_SIZE=2
|
||||
|
||||
REDIS_CACHE_HOST=localhost
|
||||
REDIS_CACHE_PORT=6379
|
||||
REDIS_CACHE_PASSWORD=
|
||||
REDIS_CACHE_DATABASE=1
|
||||
|
||||
REDIS_EXTERNAL_PORT=6379
|
||||
REDIS_PASSWORD=
|
||||
|
||||
# =============================================================================
|
||||
# 5. SECURITY CONFIGURATION
|
||||
# =============================================================================
|
||||
JWT_SECRET=meldestelle-jwt-secret-key-for-development-change-in-production
|
||||
JWT_ISSUER=meldestelle-api
|
||||
JWT_AUDIENCE=meldestelle-clients
|
||||
JWT_REALM=meldestelle
|
||||
API_KEY=meldestelle-api-key-for-development
|
||||
|
||||
# =============================================================================
|
||||
# 6. KEYCLOAK CONFIGURATION
|
||||
# =============================================================================
|
||||
KC_BOOTSTRAP_ADMIN_USERNAME=admin
|
||||
KC_BOOTSTRAP_ADMIN_PASSWORD=admin
|
||||
KC_DB=postgres
|
||||
KC_DB_URL=jdbc:postgresql://postgres:5432/meldestelle
|
||||
KC_DB_SCHEMA=keycloak
|
||||
KC_DB_USERNAME=meldestelle
|
||||
KC_DB_PASSWORD=meldestelle
|
||||
KC_HOSTNAME=localhost
|
||||
|
||||
# =============================================================================
|
||||
# 7. SERVICE DISCOVERY
|
||||
# =============================================================================
|
||||
CONSUL_HOST=consul
|
||||
CONSUL_ENABLED=true
|
||||
SERVICE_DISCOVERY_ENABLED=true
|
||||
SERVICE_DISCOVERY_REGISTER_SERVICES=true
|
||||
SERVICE_DISCOVERY_HEALTH_CHECK_PATH=/health
|
||||
SERVICE_DISCOVERY_HEALTH_CHECK_INTERVAL=10
|
||||
|
||||
# =============================================================================
|
||||
# 8. MESSAGING (Kafka)
|
||||
# =============================================================================
|
||||
ZOOKEEPER_CLIENT_PORT=2181
|
||||
KAFKA_BROKER_ID=1
|
||||
KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
|
||||
KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
|
||||
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
|
||||
KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT
|
||||
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1
|
||||
|
||||
# =============================================================================
|
||||
# 9. MONITORING
|
||||
# =============================================================================
|
||||
GF_SECURITY_ADMIN_USER=meldestelle
|
||||
GF_SECURITY_ADMIN_PASSWORD=meldestelle
|
||||
GF_USERS_ALLOW_SIGN_UP=false
|
||||
|
||||
METRICS_AUTH_USERNAME=admin
|
||||
METRICS_AUTH_PASSWORD=metrics
|
||||
|
||||
GRAFANA_HOSTNAME=grafana.meldestelle.local
|
||||
PROMETHEUS_HOSTNAME=prometheus.meldestelle.local
|
||||
|
||||
# =============================================================================
|
||||
# 10. LOGGING CONFIGURATION
|
||||
# =============================================================================
|
||||
LOGGING_LEVEL=DEBUG
|
||||
LOGGING_REQUESTS=true
|
||||
LOGGING_RESPONSES=true
|
||||
LOGGING_REQUEST_HEADERS=true
|
||||
LOGGING_REQUEST_BODY=true
|
||||
LOGGING_RESPONSE_HEADERS=true
|
||||
LOGGING_RESPONSE_BODY=true
|
||||
LOGGING_STRUCTURED=true
|
||||
LOGGING_CORRELATION_ID=true
|
||||
LOGGING_REQUEST_ID_HEADER=X-Request-ID
|
||||
|
||||
# =============================================================================
|
||||
# 11. CORS AND RATE LIMITING
|
||||
# =============================================================================
|
||||
SERVER_CORS_ENABLED=true
|
||||
SERVER_CORS_ALLOWED_ORIGINS=*
|
||||
RATELIMIT_ENABLED=true
|
||||
RATELIMIT_GLOBAL_LIMIT=100
|
||||
RATELIMIT_GLOBAL_PERIOD_MINUTES=1
|
||||
RATELIMIT_INCLUDE_HEADERS=true
|
||||
|
||||
# =============================================================================
|
||||
# 12. DOCKER BUILD ARGUMENTS
|
||||
# =============================================================================
|
||||
# Centralized Docker build arguments for compose files
|
||||
# These mirror the values from docker/build-args/ for standalone compose usage
|
||||
DOCKER_GRADLE_VERSION=9.0.0
|
||||
DOCKER_JAVA_VERSION=21
|
||||
DOCKER_NODE_VERSION=20.11.0
|
||||
DOCKER_NGINX_VERSION=1.25-alpine
|
||||
DOCKER_APP_VERSION=1.0.0
|
||||
BUILD_DATE=2025-09-13T23:32:00Z
|
||||
|
||||
# Monitoring & Infrastructure versions
|
||||
DOCKER_PROMETHEUS_VERSION=v2.54.1
|
||||
DOCKER_GRAFANA_VERSION=11.3.0
|
||||
DOCKER_KEYCLOAK_VERSION=26.4.0
|
||||
|
||||
# Spring profiles for Docker builds
|
||||
DOCKER_SPRING_PROFILES_DEFAULT=default
|
||||
DOCKER_SPRING_PROFILES_DOCKER=docker
|
||||
|
||||
# =============================================================================
|
||||
# 13. SPRING PROFILES AND GATEWAY
|
||||
# =============================================================================
|
||||
SPRING_PROFILES_ACTIVE=dev
|
||||
GATEWAY_ADMIN_USER=admin
|
||||
GATEWAY_ADMIN_PASSWORD=admin
|
||||
@@ -0,0 +1,7 @@
|
||||
# DEPRECATED – Single Source of Truth moved to docker/.env.example
|
||||
#
|
||||
# This file is no longer used by Docker Compose or any build scripts.
|
||||
# Please use and copy from:
|
||||
# docker/.env.example → docker/.env
|
||||
#
|
||||
# Reason: Avoid duplicated/conflicting configuration files.
|
||||
@@ -1,164 +0,0 @@
|
||||
# =============================================================================
|
||||
# Meldestelle - Production Environment Configuration
|
||||
# =============================================================================
|
||||
# Production-specific environment variables
|
||||
# IMPORTANT: Change all CHANGE_ME values before deployment!
|
||||
# =============================================================================
|
||||
|
||||
# =============================================================================
|
||||
# 1. APPLICATION CONFIGURATION
|
||||
# =============================================================================
|
||||
APP_NAME=Meldestelle
|
||||
APP_VERSION=1.0.0
|
||||
APP_DESCRIPTION='Pferdesport Meldestelle System'
|
||||
APP_ENVIRONMENT=production
|
||||
APP_HOST=0.0.0.0
|
||||
|
||||
# Production settings
|
||||
DEBUG_MODE=false
|
||||
DEV_HOT_RELOAD=false
|
||||
|
||||
# =============================================================================
|
||||
# 2. PORT MANAGEMENT
|
||||
# =============================================================================
|
||||
# Gateway Ports
|
||||
GATEWAY_PORT=8081
|
||||
GATEWAY_ADMIN_PORT=8080
|
||||
|
||||
# Service Ports
|
||||
PING_SERVICE_PORT=8082
|
||||
MEMBERS_SERVICE_PORT=8083
|
||||
HORSES_SERVICE_PORT=8084
|
||||
EVENTS_SERVICE_PORT=8085
|
||||
MASTERDATA_SERVICE_PORT=8086
|
||||
AUTH_SERVICE_PORT=8087
|
||||
|
||||
# Infrastructure Ports
|
||||
CONSUL_PORT=8500
|
||||
REDIS_PORT=6379
|
||||
KAFKA_PORT=9092
|
||||
PROMETHEUS_PORT=9090
|
||||
GRAFANA_PORT=3000
|
||||
|
||||
# =============================================================================
|
||||
# 3. DATABASE CONFIGURATION
|
||||
# =============================================================================
|
||||
DB_HOST=postgres
|
||||
DB_PORT=5432
|
||||
DB_NAME=meldestelle_prod
|
||||
DB_USER=meldestelle_prod
|
||||
DB_PASSWORD=CHANGE_ME_STRONG_DB_PASSWORD_HERE
|
||||
DB_MAX_POOL_SIZE=20
|
||||
DB_MIN_POOL_SIZE=10
|
||||
DB_AUTO_MIGRATE=false
|
||||
|
||||
POSTGRES_USER=meldestelle_prod
|
||||
POSTGRES_PASSWORD=CHANGE_ME_STRONG_DB_PASSWORD_HERE
|
||||
POSTGRES_DB=meldestelle_prod
|
||||
POSTGRES_EXTERNAL_PORT=5432
|
||||
|
||||
# =============================================================================
|
||||
# 4. REDIS CONFIGURATION
|
||||
# =============================================================================
|
||||
REDIS_EVENT_STORE_HOST=redis
|
||||
REDIS_EVENT_STORE_PORT=6379
|
||||
REDIS_EVENT_STORE_PASSWORD=CHANGE_ME_STRONG_REDIS_PASSWORD_HERE
|
||||
REDIS_EVENT_STORE_DATABASE=0
|
||||
REDIS_EVENT_STORE_CONNECTION_TIMEOUT=5000
|
||||
REDIS_EVENT_STORE_READ_TIMEOUT=5000
|
||||
REDIS_EVENT_STORE_USE_POOLING=true
|
||||
REDIS_EVENT_STORE_MAX_POOL_SIZE=20
|
||||
REDIS_EVENT_STORE_MIN_POOL_SIZE=5
|
||||
|
||||
REDIS_CACHE_HOST=redis
|
||||
REDIS_CACHE_PORT=6379
|
||||
REDIS_CACHE_PASSWORD=CHANGE_ME_STRONG_REDIS_PASSWORD_HERE
|
||||
REDIS_CACHE_DATABASE=1
|
||||
|
||||
REDIS_EXTERNAL_PORT=6379
|
||||
REDIS_PASSWORD=CHANGE_ME_STRONG_REDIS_PASSWORD_HERE
|
||||
|
||||
# =============================================================================
|
||||
# 5. SECURITY CONFIGURATION
|
||||
# =============================================================================
|
||||
JWT_SECRET=CHANGE_ME_STRONG_JWT_SECRET_AT_LEAST_256_BITS_HERE
|
||||
JWT_ISSUER=meldestelle-api-prod
|
||||
JWT_AUDIENCE=meldestelle-clients-prod
|
||||
JWT_REALM=meldestelle-prod
|
||||
API_KEY=CHANGE_ME_STRONG_API_KEY_HERE
|
||||
|
||||
# =============================================================================
|
||||
# 6. KEYCLOAK CONFIGURATION
|
||||
# =============================================================================
|
||||
KEYCLOAK_ADMIN=CHANGE_ME_ADMIN_USERNAME
|
||||
KEYCLOAK_ADMIN_PASSWORD=CHANGE_ME_STRONG_ADMIN_PASSWORD_HERE
|
||||
KC_DB=postgres
|
||||
KC_DB_URL=jdbc:postgresql://postgres:5432/keycloak_prod
|
||||
KC_DB_USERNAME=keycloak_prod
|
||||
KC_DB_PASSWORD=CHANGE_ME_STRONG_KEYCLOAK_DB_PASSWORD_HERE
|
||||
KC_HOSTNAME=auth.yourdomain.com
|
||||
|
||||
# =============================================================================
|
||||
# 7. SERVICE DISCOVERY
|
||||
# =============================================================================
|
||||
CONSUL_HOST=consul
|
||||
CONSUL_ENABLED=true
|
||||
SERVICE_DISCOVERY_ENABLED=true
|
||||
SERVICE_DISCOVERY_REGISTER_SERVICES=true
|
||||
SERVICE_DISCOVERY_HEALTH_CHECK_PATH=/health
|
||||
SERVICE_DISCOVERY_HEALTH_CHECK_INTERVAL=30
|
||||
|
||||
# =============================================================================
|
||||
# 8. MESSAGING (Kafka)
|
||||
# =============================================================================
|
||||
ZOOKEEPER_CLIENT_PORT=2181
|
||||
KAFKA_BROKER_ID=1
|
||||
KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
|
||||
KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
|
||||
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
|
||||
KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT
|
||||
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1
|
||||
|
||||
# =============================================================================
|
||||
# 9. MONITORING
|
||||
# =============================================================================
|
||||
GF_SECURITY_ADMIN_USER=CHANGE_ME_GRAFANA_ADMIN_USERNAME
|
||||
GF_SECURITY_ADMIN_PASSWORD=CHANGE_ME_STRONG_GRAFANA_PASSWORD_HERE
|
||||
GF_USERS_ALLOW_SIGN_UP=false
|
||||
|
||||
METRICS_AUTH_USERNAME=CHANGE_ME_METRICS_USERNAME
|
||||
METRICS_AUTH_PASSWORD=CHANGE_ME_STRONG_METRICS_PASSWORD_HERE
|
||||
|
||||
GRAFANA_HOSTNAME=monitoring.yourdomain.com
|
||||
PROMETHEUS_HOSTNAME=metrics.yourdomain.com
|
||||
|
||||
# =============================================================================
|
||||
# 10. LOGGING CONFIGURATION
|
||||
# =============================================================================
|
||||
LOGGING_LEVEL=INFO
|
||||
LOGGING_REQUESTS=false
|
||||
LOGGING_RESPONSES=false
|
||||
LOGGING_REQUEST_HEADERS=false
|
||||
LOGGING_REQUEST_BODY=false
|
||||
LOGGING_RESPONSE_HEADERS=false
|
||||
LOGGING_RESPONSE_BODY=false
|
||||
LOGGING_STRUCTURED=true
|
||||
LOGGING_CORRELATION_ID=true
|
||||
LOGGING_REQUEST_ID_HEADER=X-Request-ID
|
||||
|
||||
# =============================================================================
|
||||
# 11. CORS AND RATE LIMITING
|
||||
# =============================================================================
|
||||
SERVER_CORS_ENABLED=true
|
||||
SERVER_CORS_ALLOWED_ORIGINS=https://yourdomain.com,https://www.yourdomain.com
|
||||
RATELIMIT_ENABLED=true
|
||||
RATELIMIT_GLOBAL_LIMIT=1000
|
||||
RATELIMIT_GLOBAL_PERIOD_MINUTES=1
|
||||
RATELIMIT_INCLUDE_HEADERS=true
|
||||
|
||||
# =============================================================================
|
||||
# 12. SPRING PROFILES AND GATEWAY
|
||||
# =============================================================================
|
||||
SPRING_PROFILES_ACTIVE=prod
|
||||
GATEWAY_ADMIN_USER=CHANGE_ME_GATEWAY_ADMIN_USERNAME
|
||||
GATEWAY_ADMIN_PASSWORD=CHANGE_ME_STRONG_GATEWAY_ADMIN_PASSWORD_HERE
|
||||
@@ -1,164 +0,0 @@
|
||||
# =============================================================================
|
||||
# Meldestelle - Staging Environment Configuration
|
||||
# =============================================================================
|
||||
# Staging-specific environment variables (production-like but for testing)
|
||||
# =============================================================================
|
||||
|
||||
# =============================================================================
|
||||
# 1. APPLICATION CONFIGURATION
|
||||
# =============================================================================
|
||||
APP_NAME=Meldestelle
|
||||
APP_VERSION=1.0.0
|
||||
APP_DESCRIPTION='Pferdesport Meldestelle System'
|
||||
APP_ENVIRONMENT=staging
|
||||
APP_HOST=0.0.0.0
|
||||
|
||||
# Staging settings (production-like but with some debugging)
|
||||
DEBUG_MODE=false
|
||||
DEV_HOT_RELOAD=false
|
||||
|
||||
# =============================================================================
|
||||
# 2. PORT MANAGEMENT
|
||||
# =============================================================================
|
||||
# Gateway Ports
|
||||
GATEWAY_PORT=8081
|
||||
GATEWAY_ADMIN_PORT=8080
|
||||
|
||||
# Service Ports
|
||||
PING_SERVICE_PORT=8082
|
||||
MEMBERS_SERVICE_PORT=8083
|
||||
HORSES_SERVICE_PORT=8084
|
||||
EVENTS_SERVICE_PORT=8085
|
||||
MASTERDATA_SERVICE_PORT=8086
|
||||
AUTH_SERVICE_PORT=8087
|
||||
|
||||
# Infrastructure Ports
|
||||
CONSUL_PORT=8500
|
||||
REDIS_PORT=6379
|
||||
KAFKA_PORT=9092
|
||||
PROMETHEUS_PORT=9090
|
||||
GRAFANA_PORT=3000
|
||||
|
||||
# =============================================================================
|
||||
# 3. DATABASE CONFIGURATION
|
||||
# =============================================================================
|
||||
DB_HOST=postgres
|
||||
DB_PORT=5432
|
||||
DB_NAME=meldestelle_staging
|
||||
DB_USER=meldestelle_staging
|
||||
DB_PASSWORD=staging_password_change_me
|
||||
DB_MAX_POOL_SIZE=15
|
||||
DB_MIN_POOL_SIZE=5
|
||||
DB_AUTO_MIGRATE=true
|
||||
|
||||
POSTGRES_USER=meldestelle_staging
|
||||
POSTGRES_PASSWORD=staging_password_change_me
|
||||
POSTGRES_DB=meldestelle_staging
|
||||
POSTGRES_EXTERNAL_PORT=5432
|
||||
|
||||
# =============================================================================
|
||||
# 4. REDIS CONFIGURATION
|
||||
# =============================================================================
|
||||
REDIS_EVENT_STORE_HOST=redis
|
||||
REDIS_EVENT_STORE_PORT=6379
|
||||
REDIS_EVENT_STORE_PASSWORD=staging_redis_password
|
||||
REDIS_EVENT_STORE_DATABASE=0
|
||||
REDIS_EVENT_STORE_CONNECTION_TIMEOUT=3000
|
||||
REDIS_EVENT_STORE_READ_TIMEOUT=3000
|
||||
REDIS_EVENT_STORE_USE_POOLING=true
|
||||
REDIS_EVENT_STORE_MAX_POOL_SIZE=15
|
||||
REDIS_EVENT_STORE_MIN_POOL_SIZE=3
|
||||
|
||||
REDIS_CACHE_HOST=redis
|
||||
REDIS_CACHE_PORT=6379
|
||||
REDIS_CACHE_PASSWORD=staging_redis_password
|
||||
REDIS_CACHE_DATABASE=1
|
||||
|
||||
REDIS_EXTERNAL_PORT=6379
|
||||
REDIS_PASSWORD=staging_redis_password
|
||||
|
||||
# =============================================================================
|
||||
# 5. SECURITY CONFIGURATION
|
||||
# =============================================================================
|
||||
JWT_SECRET=staging-jwt-secret-key-not-for-production-use
|
||||
JWT_ISSUER=meldestelle-api-staging
|
||||
JWT_AUDIENCE=meldestelle-clients-staging
|
||||
JWT_REALM=meldestelle-staging
|
||||
API_KEY=staging-api-key-change-me
|
||||
|
||||
# =============================================================================
|
||||
# 6. KEYCLOAK CONFIGURATION
|
||||
# =============================================================================
|
||||
KEYCLOAK_ADMIN=admin
|
||||
KEYCLOAK_ADMIN_PASSWORD=admin
|
||||
KC_DB=postgres
|
||||
KC_DB_URL=jdbc:postgresql://postgres:5432/meldestelle_staging
|
||||
KC_DB_SCHEMA=keycloak
|
||||
KC_DB_USERNAME=meldestelle_staging
|
||||
KC_DB_PASSWORD=staging_password_change_me
|
||||
KC_HOSTNAME=localhost
|
||||
|
||||
# =============================================================================
|
||||
# 7. SERVICE DISCOVERY
|
||||
# =============================================================================
|
||||
CONSUL_HOST=consul
|
||||
CONSUL_ENABLED=true
|
||||
SERVICE_DISCOVERY_ENABLED=true
|
||||
SERVICE_DISCOVERY_REGISTER_SERVICES=true
|
||||
SERVICE_DISCOVERY_HEALTH_CHECK_PATH=/health
|
||||
SERVICE_DISCOVERY_HEALTH_CHECK_INTERVAL=15
|
||||
|
||||
# =============================================================================
|
||||
# 8. MESSAGING (Kafka)
|
||||
# =============================================================================
|
||||
ZOOKEEPER_CLIENT_PORT=2181
|
||||
KAFKA_BROKER_ID=1
|
||||
KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
|
||||
KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
|
||||
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
|
||||
KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT
|
||||
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1
|
||||
|
||||
# =============================================================================
|
||||
# 9. MONITORING
|
||||
# =============================================================================
|
||||
GF_SECURITY_ADMIN_USER=staging_admin
|
||||
GF_SECURITY_ADMIN_PASSWORD=staging_grafana_password
|
||||
GF_USERS_ALLOW_SIGN_UP=false
|
||||
|
||||
METRICS_AUTH_USERNAME=staging_metrics
|
||||
METRICS_AUTH_PASSWORD=staging_metrics_password
|
||||
|
||||
GRAFANA_HOSTNAME=grafana-staging.meldestelle.local
|
||||
PROMETHEUS_HOSTNAME=prometheus-staging.meldestelle.local
|
||||
|
||||
# =============================================================================
|
||||
# 10. LOGGING CONFIGURATION
|
||||
# =============================================================================
|
||||
LOGGING_LEVEL=INFO
|
||||
LOGGING_REQUESTS=true
|
||||
LOGGING_RESPONSES=false
|
||||
LOGGING_REQUEST_HEADERS=false
|
||||
LOGGING_REQUEST_BODY=false
|
||||
LOGGING_RESPONSE_HEADERS=false
|
||||
LOGGING_RESPONSE_BODY=false
|
||||
LOGGING_STRUCTURED=true
|
||||
LOGGING_CORRELATION_ID=true
|
||||
LOGGING_REQUEST_ID_HEADER=X-Request-ID
|
||||
|
||||
# =============================================================================
|
||||
# 11. CORS AND RATE LIMITING
|
||||
# =============================================================================
|
||||
SERVER_CORS_ENABLED=true
|
||||
SERVER_CORS_ALLOWED_ORIGINS=https://staging.meldestelle.local,https://app-staging.meldestelle.local
|
||||
RATELIMIT_ENABLED=true
|
||||
RATELIMIT_GLOBAL_LIMIT=500
|
||||
RATELIMIT_GLOBAL_PERIOD_MINUTES=1
|
||||
RATELIMIT_INCLUDE_HEADERS=true
|
||||
|
||||
# =============================================================================
|
||||
# 12. SPRING PROFILES AND GATEWAY
|
||||
# =============================================================================
|
||||
SPRING_PROFILES_ACTIVE=staging
|
||||
GATEWAY_ADMIN_USER=staging_gateway_admin
|
||||
GATEWAY_ADMIN_PASSWORD=staging_gateway_password
|
||||
@@ -1,178 +0,0 @@
|
||||
# =============================================================================
|
||||
# Meldestelle - Umgebungsvariablen Vorlage
|
||||
# =============================================================================
|
||||
# Dies ist die SINGLE SOURCE OF TRUTH für alle Umgebungsvariablen.
|
||||
# Kopieren Sie zu .env.dev, .env.prod, .env.staging oder .env.test und anpassen.
|
||||
#
|
||||
# ⚠️ SICHERHEITSWARNUNG:
|
||||
# - Niemals Produktions-Secrets in die Versionskontrolle committen
|
||||
# - JWT_SECRET in der Produktion ändern
|
||||
# - Starke Passwörter für Produktionsumgebungen verwenden
|
||||
# - API-Schlüssel regelmäßig rotieren
|
||||
# =============================================================================
|
||||
|
||||
# =============================================================================
|
||||
# 1. ANWENDUNGSKONFIGURATION
|
||||
# =============================================================================
|
||||
APP_NAME=Meldestelle
|
||||
APP_VERSION=1.0.0
|
||||
APP_DESCRIPTION='Pferdesport Meldestelle System'
|
||||
APP_ENVIRONMENT=development
|
||||
APP_HOST=0.0.0.0
|
||||
|
||||
# Entwicklungsspezifische Einstellungen
|
||||
DEBUG_MODE=true
|
||||
DEV_HOT_RELOAD=true
|
||||
|
||||
# =============================================================================
|
||||
# 2. PORT-VERWALTUNG - SINGLE SOURCE OF TRUTH
|
||||
# =============================================================================
|
||||
# Gateway Ports
|
||||
GATEWAY_PORT=8081
|
||||
GATEWAY_ADMIN_PORT=8080
|
||||
|
||||
# Service Ports (eindeutige Zuteilung)
|
||||
PING_SERVICE_PORT=8082
|
||||
MEMBERS_SERVICE_PORT=8083
|
||||
HORSES_SERVICE_PORT=8084
|
||||
EVENTS_SERVICE_PORT=8085
|
||||
MASTERDATA_SERVICE_PORT=8086
|
||||
AUTH_SERVICE_PORT=8087
|
||||
|
||||
# Infrastruktur Ports
|
||||
CONSUL_PORT=8500
|
||||
REDIS_PORT=6379
|
||||
KAFKA_PORT=9092
|
||||
PROMETHEUS_PORT=9090
|
||||
GRAFANA_PORT=3000
|
||||
|
||||
# =============================================================================
|
||||
# 3. DATENBANK-KONFIGURATION (PostgreSQL)
|
||||
# =============================================================================
|
||||
# Anwendungs-Datenbankeinstellungen
|
||||
DB_HOST=localhost
|
||||
DB_PORT=5432
|
||||
DB_NAME=meldestelle
|
||||
DB_USER=meldestelle
|
||||
DB_PASSWORD=meldestelle
|
||||
DB_MAX_POOL_SIZE=10
|
||||
DB_MIN_POOL_SIZE=5
|
||||
DB_AUTO_MIGRATE=true
|
||||
|
||||
# Docker PostgreSQL Container-Einstellungen
|
||||
POSTGRES_USER=meldestelle
|
||||
POSTGRES_PASSWORD=meldestelle
|
||||
POSTGRES_DB=meldestelle
|
||||
POSTGRES_EXTERNAL_PORT=5432
|
||||
|
||||
# =============================================================================
|
||||
# 4. REDIS-KONFIGURATION
|
||||
# =============================================================================
|
||||
# Event Store Konfiguration
|
||||
REDIS_EVENT_STORE_HOST=localhost
|
||||
REDIS_EVENT_STORE_PORT=6379
|
||||
REDIS_EVENT_STORE_PASSWORD=
|
||||
REDIS_EVENT_STORE_DATABASE=0
|
||||
REDIS_EVENT_STORE_CONNECTION_TIMEOUT=2000
|
||||
REDIS_EVENT_STORE_READ_TIMEOUT=2000
|
||||
REDIS_EVENT_STORE_USE_POOLING=true
|
||||
REDIS_EVENT_STORE_MAX_POOL_SIZE=8
|
||||
REDIS_EVENT_STORE_MIN_POOL_SIZE=2
|
||||
|
||||
# Cache-Konfiguration
|
||||
REDIS_CACHE_HOST=localhost
|
||||
REDIS_CACHE_PORT=6379
|
||||
REDIS_CACHE_PASSWORD=
|
||||
REDIS_CACHE_DATABASE=1
|
||||
|
||||
# Redis Docker-Einstellungen
|
||||
REDIS_EXTERNAL_PORT=6379
|
||||
REDIS_PASSWORD=
|
||||
|
||||
# =============================================================================
|
||||
# 5. SICHERHEITSKONFIGURATION
|
||||
# =============================================================================
|
||||
JWT_SECRET=meldestelle-jwt-secret-key-for-development-change-in-production
|
||||
JWT_ISSUER=meldestelle-api
|
||||
JWT_AUDIENCE=meldestelle-clients
|
||||
JWT_REALM=meldestelle
|
||||
API_KEY=meldestelle-api-key-for-development
|
||||
|
||||
# =============================================================================
|
||||
# 6. KEYCLOAK CONFIGURATION
|
||||
# =============================================================================
|
||||
KEYCLOAK_ADMIN=admin
|
||||
KEYCLOAK_ADMIN_PASSWORD=admin
|
||||
KC_DB=postgres
|
||||
KC_DB_URL=jdbc:postgresql://postgres:5432/keycloak
|
||||
KC_DB_USERNAME=meldestelle
|
||||
KC_DB_PASSWORD=meldestelle
|
||||
KC_HOSTNAME=auth.meldestelle.local
|
||||
|
||||
# =============================================================================
|
||||
# 7. SERVICE DISCOVERY (Consul)
|
||||
# =============================================================================
|
||||
CONSUL_HOST=consul
|
||||
CONSUL_ENABLED=true
|
||||
SERVICE_DISCOVERY_ENABLED=true
|
||||
SERVICE_DISCOVERY_REGISTER_SERVICES=true
|
||||
SERVICE_DISCOVERY_HEALTH_CHECK_PATH=/health
|
||||
SERVICE_DISCOVERY_HEALTH_CHECK_INTERVAL=10
|
||||
|
||||
# =============================================================================
|
||||
# 8. MESSAGING (Kafka)
|
||||
# =============================================================================
|
||||
ZOOKEEPER_CLIENT_PORT=2181
|
||||
KAFKA_BROKER_ID=1
|
||||
KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
|
||||
KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
|
||||
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
|
||||
KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT
|
||||
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1
|
||||
|
||||
# =============================================================================
|
||||
# 9. MONITORING
|
||||
# =============================================================================
|
||||
# Grafana Configuration
|
||||
GF_SECURITY_ADMIN_USER=admin
|
||||
GF_SECURITY_ADMIN_PASSWORD=admin
|
||||
GF_USERS_ALLOW_SIGN_UP=false
|
||||
|
||||
# Metrics Authentication
|
||||
METRICS_AUTH_USERNAME=admin
|
||||
METRICS_AUTH_PASSWORD=metrics
|
||||
|
||||
# Monitoring hostnames
|
||||
GRAFANA_HOSTNAME=grafana.meldestelle.local
|
||||
PROMETHEUS_HOSTNAME=prometheus.meldestelle.local
|
||||
|
||||
# =============================================================================
|
||||
# 10. LOGGING CONFIGURATION
|
||||
# =============================================================================
|
||||
LOGGING_LEVEL=DEBUG
|
||||
LOGGING_REQUESTS=true
|
||||
LOGGING_RESPONSES=true
|
||||
LOGGING_REQUEST_HEADERS=true
|
||||
LOGGING_REQUEST_BODY=true
|
||||
LOGGING_RESPONSE_HEADERS=true
|
||||
LOGGING_RESPONSE_BODY=true
|
||||
LOGGING_STRUCTURED=true
|
||||
LOGGING_CORRELATION_ID=true
|
||||
LOGGING_REQUEST_ID_HEADER=X-Request-ID
|
||||
|
||||
# =============================================================================
|
||||
# 11. CORS AND RATE LIMITING
|
||||
# =============================================================================
|
||||
SERVER_CORS_ENABLED=true
|
||||
SERVER_CORS_ALLOWED_ORIGINS=*
|
||||
RATELIMIT_ENABLED=true
|
||||
RATELIMIT_GLOBAL_LIMIT=100
|
||||
RATELIMIT_GLOBAL_PERIOD_MINUTES=1
|
||||
RATELIMIT_INCLUDE_HEADERS=true
|
||||
|
||||
# =============================================================================
|
||||
# 12. SPRING PROFILES AND GATEWAY
|
||||
# =============================================================================
|
||||
SPRING_PROFILES_ACTIVE=dev
|
||||
GATEWAY_ADMIN_USER=admin
|
||||
GATEWAY_ADMIN_PASSWORD=admin
|
||||
@@ -1,163 +0,0 @@
|
||||
# =============================================================================
|
||||
# Meldestelle - Test Environment Configuration
|
||||
# =============================================================================
|
||||
# Test-specific environment variables (optimized for automated testing)
|
||||
# =============================================================================
|
||||
|
||||
# =============================================================================
|
||||
# 1. APPLICATION CONFIGURATION
|
||||
# =============================================================================
|
||||
APP_NAME=Meldestelle
|
||||
APP_VERSION=1.0.0
|
||||
APP_DESCRIPTION='Pferdesport Meldestelle System'
|
||||
APP_ENVIRONMENT=test
|
||||
APP_HOST=localhost
|
||||
|
||||
# Test settings (fast and minimal for CI/CD)
|
||||
DEBUG_MODE=true
|
||||
DEV_HOT_RELOAD=false
|
||||
|
||||
# =============================================================================
|
||||
# 2. PORT MANAGEMENT
|
||||
# =============================================================================
|
||||
# Gateway Ports (use different ports to avoid conflicts during parallel testing)
|
||||
GATEWAY_PORT=9081
|
||||
GATEWAY_ADMIN_PORT=9080
|
||||
|
||||
# Service Ports
|
||||
PING_SERVICE_PORT=9082
|
||||
MEMBERS_SERVICE_PORT=9083
|
||||
HORSES_SERVICE_PORT=9084
|
||||
EVENTS_SERVICE_PORT=9085
|
||||
MASTERDATA_SERVICE_PORT=9086
|
||||
AUTH_SERVICE_PORT=9087
|
||||
|
||||
# Infrastructure Ports
|
||||
CONSUL_PORT=9500
|
||||
REDIS_PORT=9379
|
||||
KAFKA_PORT=9092
|
||||
PROMETHEUS_PORT=9090
|
||||
GRAFANA_PORT=9000
|
||||
|
||||
# =============================================================================
|
||||
# 3. DATABASE CONFIGURATION
|
||||
# =============================================================================
|
||||
DB_HOST=localhost
|
||||
DB_PORT=5433
|
||||
DB_NAME=meldestelle_test
|
||||
DB_USER=meldestelle_test
|
||||
DB_PASSWORD=test_password
|
||||
DB_MAX_POOL_SIZE=5
|
||||
DB_MIN_POOL_SIZE=1
|
||||
DB_AUTO_MIGRATE=true
|
||||
|
||||
POSTGRES_USER=meldestelle_test
|
||||
POSTGRES_PASSWORD=test_password
|
||||
POSTGRES_DB=meldestelle_test
|
||||
POSTGRES_EXTERNAL_PORT=5433
|
||||
|
||||
# =============================================================================
|
||||
# 4. REDIS CONFIGURATION
|
||||
# =============================================================================
|
||||
REDIS_EVENT_STORE_HOST=localhost
|
||||
REDIS_EVENT_STORE_PORT=9379
|
||||
REDIS_EVENT_STORE_PASSWORD=
|
||||
REDIS_EVENT_STORE_DATABASE=0
|
||||
REDIS_EVENT_STORE_CONNECTION_TIMEOUT=1000
|
||||
REDIS_EVENT_STORE_READ_TIMEOUT=1000
|
||||
REDIS_EVENT_STORE_USE_POOLING=true
|
||||
REDIS_EVENT_STORE_MAX_POOL_SIZE=3
|
||||
REDIS_EVENT_STORE_MIN_POOL_SIZE=1
|
||||
|
||||
REDIS_CACHE_HOST=localhost
|
||||
REDIS_CACHE_PORT=9379
|
||||
REDIS_CACHE_PASSWORD=
|
||||
REDIS_CACHE_DATABASE=1
|
||||
|
||||
REDIS_EXTERNAL_PORT=9379
|
||||
REDIS_PASSWORD=
|
||||
|
||||
# =============================================================================
|
||||
# 5. SECURITY CONFIGURATION
|
||||
# =============================================================================
|
||||
JWT_SECRET=test-jwt-secret-key-for-testing-only
|
||||
JWT_ISSUER=meldestelle-api-test
|
||||
JWT_AUDIENCE=meldestelle-clients-test
|
||||
JWT_REALM=meldestelle-test
|
||||
API_KEY=test-api-key
|
||||
|
||||
# =============================================================================
|
||||
# 6. KEYCLOAK CONFIGURATION
|
||||
# =============================================================================
|
||||
KEYCLOAK_ADMIN=test_admin
|
||||
KEYCLOAK_ADMIN_PASSWORD=test_password
|
||||
KC_DB=postgres
|
||||
KC_DB_URL=jdbc:postgresql://localhost:5433/keycloak_test
|
||||
KC_DB_USERNAME=keycloak_test
|
||||
KC_DB_PASSWORD=test_password
|
||||
KC_HOSTNAME=localhost
|
||||
|
||||
# =============================================================================
|
||||
# 7. SERVICE DISCOVERY
|
||||
# =============================================================================
|
||||
CONSUL_HOST=localhost
|
||||
CONSUL_ENABLED=false
|
||||
SERVICE_DISCOVERY_ENABLED=false
|
||||
SERVICE_DISCOVERY_REGISTER_SERVICES=false
|
||||
SERVICE_DISCOVERY_HEALTH_CHECK_PATH=/health
|
||||
SERVICE_DISCOVERY_HEALTH_CHECK_INTERVAL=5
|
||||
|
||||
# =============================================================================
|
||||
# 8. MESSAGING (Kafka)
|
||||
# =============================================================================
|
||||
ZOOKEEPER_CLIENT_PORT=2182
|
||||
KAFKA_BROKER_ID=1
|
||||
KAFKA_ZOOKEEPER_CONNECT=localhost:2182
|
||||
KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092
|
||||
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT
|
||||
KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT
|
||||
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1
|
||||
|
||||
# =============================================================================
|
||||
# 9. MONITORING
|
||||
# =============================================================================
|
||||
GF_SECURITY_ADMIN_USER=test_admin
|
||||
GF_SECURITY_ADMIN_PASSWORD=test_password
|
||||
GF_USERS_ALLOW_SIGN_UP=false
|
||||
|
||||
METRICS_AUTH_USERNAME=test_metrics
|
||||
METRICS_AUTH_PASSWORD=test_password
|
||||
|
||||
GRAFANA_HOSTNAME=localhost
|
||||
PROMETHEUS_HOSTNAME=localhost
|
||||
|
||||
# =============================================================================
|
||||
# 10. LOGGING CONFIGURATION
|
||||
# =============================================================================
|
||||
LOGGING_LEVEL=DEBUG
|
||||
LOGGING_REQUESTS=true
|
||||
LOGGING_RESPONSES=true
|
||||
LOGGING_REQUEST_HEADERS=true
|
||||
LOGGING_REQUEST_BODY=true
|
||||
LOGGING_RESPONSE_HEADERS=true
|
||||
LOGGING_RESPONSE_BODY=true
|
||||
LOGGING_STRUCTURED=true
|
||||
LOGGING_CORRELATION_ID=true
|
||||
LOGGING_REQUEST_ID_HEADER=X-Request-ID
|
||||
|
||||
# =============================================================================
|
||||
# 11. CORS AND RATE LIMITING
|
||||
# =============================================================================
|
||||
SERVER_CORS_ENABLED=true
|
||||
SERVER_CORS_ALLOWED_ORIGINS=*
|
||||
RATELIMIT_ENABLED=false
|
||||
RATELIMIT_GLOBAL_LIMIT=10000
|
||||
RATELIMIT_GLOBAL_PERIOD_MINUTES=1
|
||||
RATELIMIT_INCLUDE_HEADERS=true
|
||||
|
||||
# =============================================================================
|
||||
# 12. SPRING PROFILES AND GATEWAY
|
||||
# =============================================================================
|
||||
SPRING_PROFILES_ACTIVE=test
|
||||
GATEWAY_ADMIN_USER=test_admin
|
||||
GATEWAY_ADMIN_PASSWORD=test_password
|
||||
@@ -1,269 +0,0 @@
|
||||
# Zentrale Konfigurationsverwaltung - Single Source of Truth
|
||||
|
||||
> **Version:** 4.0.0
|
||||
> **Datum:** 15. September 2025
|
||||
> **Status:** ✅ Produktiv - Eliminiert 38+ Port-Redundanzen und 72+ Spring-Profile-Duplikate
|
||||
|
||||
## 🎯 Überblick
|
||||
|
||||
Das **zentrale Konfigurationssystem** eliminiert Redundanzen über das gesamte Meldestelle-Projekt und stellt sicher, dass alle Konfigurationswerte aus einer **einzigen Quelle der Wahrheit** stammen.
|
||||
|
||||
### Vor der Zentralisierung (Problem)
|
||||
|
||||
```
|
||||
Port 8082 war in 38+ Dateien dupliziert:
|
||||
├── gradle.properties
|
||||
├── docker-compose.services.yml
|
||||
├── dockerfiles/services/ping-service/Dockerfile
|
||||
├── scripts/test/integration-test.sh
|
||||
├── config/monitoring/prometheus.dev.yml
|
||||
└── ... 33 weitere Dateien!
|
||||
```
|
||||
|
||||
### Nach der Zentralisierung (Lösung)
|
||||
|
||||
```
|
||||
Port 8082 einmalig in config/central.toml definiert:
|
||||
├── config/central.toml [SINGLE SOURCE OF TRUTH]
|
||||
└── scripts/config-sync.sh sync [Automatische Synchronisation]
|
||||
└── 38+ Dateien automatisch aktualisiert ✓
|
||||
```
|
||||
|
||||
## 📁 Verzeichnisstruktur
|
||||
|
||||
```
|
||||
config/
|
||||
├── central.toml # 🎯 MASTER-Konfigurationsdatei
|
||||
├── README.md # 📖 Diese Dokumentation
|
||||
├── .env.template # 🔧 Environment-Variables Template (Legacy)
|
||||
└── monitoring/ # 📊 Monitoring-Konfigurationen
|
||||
├── prometheus.yml
|
||||
├── prometheus.dev.yml
|
||||
└── grafana/
|
||||
```
|
||||
|
||||
## 🛠️ Verwendung
|
||||
|
||||
### Schnellstart
|
||||
|
||||
```bash
|
||||
# 1. Aktuelle Konfiguration anzeigen
|
||||
./scripts/config-sync.sh status
|
||||
|
||||
# 2. Alle Konfigurationen synchronisieren
|
||||
./scripts/config-sync.sh sync
|
||||
|
||||
# 3. Konfiguration validieren
|
||||
./scripts/config-sync.sh validate
|
||||
```
|
||||
|
||||
### Port ändern (Beispiel)
|
||||
|
||||
```bash
|
||||
# 1. central.toml bearbeiten
|
||||
vim config/central.toml
|
||||
|
||||
[ports]
|
||||
ping-service = 8092 # Geändert von 8082
|
||||
|
||||
# 2. Alle abhängigen Dateien aktualisieren
|
||||
./scripts/config-sync.sh sync
|
||||
|
||||
# ✅ Ergebnis: 38+ Dateien automatisch synchronisiert!
|
||||
```
|
||||
|
||||
### Spring Profile ändern
|
||||
|
||||
```bash
|
||||
# 1. central.toml bearbeiten
|
||||
[spring-profiles.defaults]
|
||||
services = "production" # Geändert von "docker"
|
||||
|
||||
# 2. Synchronisieren
|
||||
./scripts/config-sync.sh sync
|
||||
|
||||
# ✅ Ergebnis: 72+ Profile-Referenzen automatisch aktualisiert!
|
||||
```
|
||||
|
||||
## 📋 Konfigurationsbereiche
|
||||
|
||||
### 1. **Ports** - Eliminiert 38+ Redundanzen
|
||||
|
||||
```toml
|
||||
[ports]
|
||||
# Infrastructure Services
|
||||
api-gateway = 8081
|
||||
auth-server = 8087
|
||||
monitoring-server = 8088
|
||||
|
||||
# Application Services
|
||||
ping-service = 8082
|
||||
members-service = 8083
|
||||
horses-service = 8084
|
||||
events-service = 8085
|
||||
masterdata-service = 8086
|
||||
|
||||
# External Infrastructure
|
||||
postgres = 5432
|
||||
redis = 6379
|
||||
consul = 8500
|
||||
prometheus = 9090
|
||||
grafana = 3000
|
||||
```
|
||||
|
||||
**Synchronisiert folgende Dateien:**
|
||||
|
||||
- `gradle.properties` - Service-Port-Eigenschaften
|
||||
- `docker-compose*.yml` - Port-Mappings und Environment-Variablen
|
||||
- `dockerfiles/*/Dockerfile` - EXPOSE-Statements
|
||||
- `scripts/test/*.sh` - Test-Endpunkt-URLs
|
||||
- `config/monitoring/*.yml` - Prometheus-Targets
|
||||
- Und 25+ weitere Dateien!
|
||||
|
||||
### 2. **Spring Profiles** - Eliminiert 72+ Duplikate
|
||||
|
||||
```toml
|
||||
[spring-profiles]
|
||||
default = "default"
|
||||
development = "dev"
|
||||
docker = "docker"
|
||||
production = "prod"
|
||||
test = "test"
|
||||
|
||||
[spring-profiles.defaults]
|
||||
infrastructure = "default" # Infrastructure Services
|
||||
services = "docker" # Application Services
|
||||
clients = "dev" # Client Applications
|
||||
```
|
||||
|
||||
**Synchronisiert folgende Dateien:**
|
||||
|
||||
- Alle `dockerfiles/*/Dockerfile` - `SPRING_PROFILES_ACTIVE` Build-Args
|
||||
- `docker-compose*.yml` - Spring-Profile Environment-Variablen
|
||||
- `docker/build-args/*.env` - Build-Argument-Dateien
|
||||
- Und 60+ weitere Referenzen!
|
||||
|
||||
### 3. **Service Discovery** - Standardisiert URLs
|
||||
|
||||
```toml
|
||||
[services.ping-service]
|
||||
name = "ping-service"
|
||||
port = 8082
|
||||
internal-host = "ping-service"
|
||||
external-host = "localhost"
|
||||
internal-url = "http://ping-service:8082"
|
||||
external-url = "http://localhost:8082"
|
||||
health-endpoint = "/actuator/health/readiness"
|
||||
metrics-endpoint = "/actuator/prometheus"
|
||||
info-endpoint = "/actuator/info"
|
||||
```
|
||||
|
||||
## 🚀 Scripts und Automatisierung
|
||||
|
||||
### `scripts/config-sync.sh` - Haupttool
|
||||
|
||||
```bash
|
||||
# Alle Konfigurationen synchronisieren
|
||||
./scripts/config-sync.sh sync
|
||||
|
||||
# Nur bestimmte Bereiche synchronisieren
|
||||
./scripts/config-sync.sh gradle # gradle.properties
|
||||
./scripts/config-sync.sh compose # Docker Compose files
|
||||
./scripts/config-sync.sh env # Environment files
|
||||
./scripts/config-sync.sh docker-args # Docker build arguments
|
||||
./scripts/config-sync.sh monitoring # Prometheus/Grafana config
|
||||
./scripts/config-sync.sh tests # Test scripts
|
||||
|
||||
# Status und Validierung
|
||||
./scripts/config-sync.sh status # Aktuelle Konfiguration anzeigen
|
||||
./scripts/config-sync.sh validate # TOML-Syntax validieren
|
||||
|
||||
# Hilfe
|
||||
./scripts/config-sync.sh --help
|
||||
```
|
||||
|
||||
## 🎯 Best Practices
|
||||
|
||||
### ✅ DO (Empfohlen)
|
||||
|
||||
```bash
|
||||
# Vor Änderungen Status prüfen
|
||||
./scripts/config-sync.sh status
|
||||
|
||||
# Nach Änderungen validieren
|
||||
./scripts/config-sync.sh validate
|
||||
|
||||
# Regelmäßig synchronisieren
|
||||
./scripts/config-sync.sh sync
|
||||
|
||||
# Backups vor wichtigen Änderungen
|
||||
cp config/central.toml config/central.toml.backup
|
||||
```
|
||||
|
||||
### ❌ DON'T (Vermeiden)
|
||||
|
||||
```bash
|
||||
# ❌ Niemals direkte Datei-Bearbeitung
|
||||
vim docker-compose.yml # Änderungen gehen verloren!
|
||||
vim gradle.properties # Wird überschrieben!
|
||||
|
||||
# ✅ Stattdessen zentrale Konfiguration verwenden
|
||||
vim config/central.toml
|
||||
./scripts/config-sync.sh sync
|
||||
```
|
||||
|
||||
## 🔍 Debugging und Troubleshooting
|
||||
|
||||
### Häufige Probleme
|
||||
|
||||
#### Problem: Synchronisation schlägt fehl
|
||||
|
||||
```bash
|
||||
# Lösung: Validierung prüfen
|
||||
./scripts/config-sync.sh validate
|
||||
|
||||
# TOML-Syntax-Fehler beheben
|
||||
vim config/central.toml
|
||||
```
|
||||
|
||||
#### Problem: Inkonsistente Konfiguration
|
||||
|
||||
```bash
|
||||
# Lösung: Status prüfen und re-synchronisieren
|
||||
./scripts/config-sync.sh status
|
||||
./scripts/config-sync.sh sync
|
||||
```
|
||||
|
||||
#### Problem: Backup wiederherstellen
|
||||
|
||||
```bash
|
||||
# Backups anzeigen
|
||||
ls -la *.bak.*
|
||||
|
||||
# Wiederherstellen
|
||||
cp gradle.properties.bak.20250915_103927 gradle.properties
|
||||
```
|
||||
|
||||
### Validierung
|
||||
|
||||
```bash
|
||||
# Umfassende Validierung
|
||||
./scripts/config-sync.sh validate
|
||||
|
||||
# Prüft:
|
||||
# ✓ TOML-Syntax
|
||||
# ✓ Duplicate Sections
|
||||
# ✓ Port-Konflikte
|
||||
# ✓ Ungültige Werte
|
||||
```
|
||||
|
||||
## 🚀 Migration und Integration
|
||||
|
||||
Die zentrale Konfigurationsverwaltung ist **rückwärtskompatibel** und kann schrittweise eingeführt werden:
|
||||
|
||||
1. **config/central.toml** erstellen ✅
|
||||
2. **scripts/config-sync.sh** ausführen ✅
|
||||
3. **Backups prüfen** und validieren ✅
|
||||
4. **Entwickler-Workflow** anpassen ✅
|
||||
|
||||
**🎉 Mit der zentralen Konfigurationsverwaltung haben Sie einen wartungsfreundlichen, skalierbaren und fehlerresistenten Ansatz für die Verwaltung aller Konfigurationswerte in Ihrem Meldestelle-Projekt!**
|
||||
@@ -0,0 +1,52 @@
|
||||
build:
|
||||
maxIssues: 0
|
||||
excludeCorrectable: false
|
||||
|
||||
config:
|
||||
validation: true
|
||||
warningsAsErrors: false
|
||||
|
||||
processors:
|
||||
active: true
|
||||
|
||||
console-reports:
|
||||
active: true
|
||||
exclude:
|
||||
- 'ProjectStatisticsReport'
|
||||
- 'ComplexityReport'
|
||||
- 'NotificationReport'
|
||||
|
||||
comments:
|
||||
active: true
|
||||
AbsentOrWrongFileLicense:
|
||||
active: false
|
||||
|
||||
style:
|
||||
active: true
|
||||
MagicNumber:
|
||||
active: false
|
||||
WildcardImport:
|
||||
active: false
|
||||
MaxLineLength:
|
||||
active: true
|
||||
maxLineLength: 140
|
||||
UnusedImports:
|
||||
active: true
|
||||
|
||||
complexity:
|
||||
active: true
|
||||
LongMethod:
|
||||
active: true
|
||||
threshold: 80
|
||||
TooManyFunctions:
|
||||
active: true
|
||||
thresholdInClasses: 30
|
||||
|
||||
performance:
|
||||
active: true
|
||||
|
||||
potential-bugs:
|
||||
active: true
|
||||
|
||||
exceptions:
|
||||
active: true
|
||||
@@ -7,7 +7,7 @@ max_connections = 100
|
||||
superuser_reserved_connections = 3
|
||||
|
||||
# Memory Settings
|
||||
# These will be overridden by environment variables in docker-compose.yml
|
||||
# These will be overridden by environment variables in docker-compose.yaml
|
||||
shared_buffers = 256MB # min 128kB
|
||||
work_mem = 16MB # min 64kB
|
||||
maintenance_work_mem = 64MB # min 1MB
|
||||
|
||||
Reference in New Issue
Block a user