# Konfigurationsmanagement Dieses Dokument beschreibt, wie die Konfiguration des Meldestelle-Projekts verwaltet wird. ## Übersicht Das Projekt verwendet einen mehrschichtigen Konfigurationsansatz, um verschiedene Umgebungen (Entwicklung, Test, Staging, Produktion) zu unterstützen. Die Konfiguration kann über folgende Quellen bereitgestellt werden: 1. Umgebungsvariablen (höchste Priorität) 2. Umgebungsspezifische Konfigurationsdateien (.properties) 3. Basis-Konfigurationsdatei (application.properties) 4. Standardwerte im Code (niedrigste Priorität) ## Konfigurationsquellen ### Umgebungsvariablen Umgebungsvariablen haben die höchste Priorität und überschreiben alle anderen Konfigurationen. Sie werden typischerweise verwendet, um sensible Informationen wie Passwörter oder umgebungsspezifische Werte zu setzen. Beispiel: ```bash # Umgebung festlegen export APP_ENV=PRODUCTION # Datenbank-Konfiguration export DB_HOST=db.example.com export DB_PORT=5432 export DB_NAME=meldestelle_db export DB_USER=db_user export DB_PASSWORD=secret_password # Server-Konfiguration export API_PORT=8081 ``` ### Konfigurationsdateien Das Projekt verwendet .properties-Dateien im `/config`-Verzeichnis. Die folgenden Dateien werden geladen (in dieser Reihenfolge): 1. `application.properties` - Basiseinstellungen für alle Umgebungen 2. Umgebungsspezifische Datei - abhängig von `APP_ENV`: - `application-dev.properties` - Entwicklungsumgebung (Standard) - `application-test.properties` - Testumgebung - `application-staging.properties` - Staging-Umgebung - `application-prod.properties` - Produktionsumgebung ## Umgebungen Das Projekt unterstützt folgende Umgebungen: | Umgebung | Beschreibung | Typische Verwendung | |----------|-------------|--------------------| | DEVELOPMENT | Lokale Entwicklungsumgebung | Lokale Entwicklung, Debug-Modus aktiv | | TEST | Testumgebung | Automatisierte Tests, Integrationstests | | STAGING | Vorabproduktionsumgebung | Manuelle Tests, UAT, Demos | | PRODUCTION | Produktionsumgebung | Live-System | Die aktuelle Umgebung wird über die Umgebungsvariable `APP_ENV` festgelegt. Wenn diese Variable nicht gesetzt ist, wird standardmäßig `DEVELOPMENT` verwendet. ## Konfigurationsstruktur Die Konfiguration ist in mehrere Kategorien unterteilt: ### AppInfo Allgemeine Anwendungsinformationen: ```properties app.name=Meldestelle app.version=1.0.0 app.description=Pferdesport Meldestelle System ``` ### Server Server-Konfiguration: ```properties server.port=8081 server.host=0.0.0.0 server.workers=4 server.cors.enabled=true server.cors.allowedOrigins=* ``` ### Datenbank Datenbank-Konfiguration: ```properties database.host=localhost database.port=5432 database.name=meldestelle_db database.username=meldestelle_user database.password=secure_password_change_me database.maxPoolSize=10 database.autoMigrate=true ``` ### Sicherheit Sicherheitseinstellungen (JWT, etc.): ```properties security.jwt.secret=your-secret-key security.jwt.issuer=meldestelle-api security.jwt.audience=meldestelle-clients security.jwt.realm=meldestelle security.jwt.expirationInMinutes=1440 ``` ### Logging Logging-Konfiguration: ```properties logging.level=INFO logging.requests=true logging.responses=false ``` ## Verwendung im Code Die Konfiguration wird über die zentrale `AppConfig`-Klasse bereitgestellt: ```kotlin 'import at.mocode.shared.config.AppConfig' // Verwendung der Konfiguration fun example() { // Umgebung prüfen if (AppConfig.environment.isDevelopment()) { println("Debug-Modus aktiv") } // Server-Port abrufen val port = AppConfig.server.port // Datenbank-Konfiguration val dbConfig = AppConfig.database // JWT-Secret val jwtSecret = AppConfig.security.jwt.secret } ``` ## Konfiguration für Docker Bei Verwendung von Docker werden Umgebungsvariablen in der `.env`-Datei und im `docker-compose.yml` definiert: ```yaml services: server: environment: - APP_ENV=PRODUCTION - DB_HOST=db - DB_PORT=5432 - DB_NAME=${POSTGRES_DB} - DB_USER=${POSTGRES_USER} - DB_PASSWORD=${POSTGRES_PASSWORD} pgadmin: environment: - PGADMIN_DEFAULT_EMAIL=${PGADMIN_DEFAULT_EMAIL:-admin@example.com} - PGADMIN_DEFAULT_PASSWORD=${PGADMIN_DEFAULT_PASSWORD:-admin_password_change_me} ``` ## Beste Praktiken 1. **Sensible Daten**: Speichern Sie niemals sensible Daten wie Passwörter oder API-Schlüssel direkt in Konfigurationsdateien, die in die Versionskontrolle eingecheckt werden. Verwenden Sie stattdessen Umgebungsvariablen. 2. **Umgebungsspezifische Konfiguration**: Verwenden Sie umgebungsspezifische Konfigurationsdateien nur für Werte, die sich zwischen den Umgebungen unterscheiden. 3. **Standardwerte**: Geben Sie für alle Konfigurationsparameter sinnvolle Standardwerte an, damit die Anwendung auch funktioniert, wenn nicht alle Konfigurationen explizit gesetzt sind. 4. **Validierung**: Validieren Sie kritische Konfigurationen beim Anwendungsstart, um Fehler frühzeitig zu erkennen. 5. **Dokumentation**: Halten Sie die Dokumentation der Konfigurationsparameter aktuell, damit neue Teammitglieder die Anwendung leicht konfigurieren können. ## Letztes Update 2025-07-21