meldestelle/README_CONFIG.md
2025-07-21 12:08:20 +02:00

183 lines
5.1 KiB
Markdown

# 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