183 lines
5.1 KiB
Markdown
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
|