refactoring: Env-Dateien und Docker-Dateien
This commit is contained in:
@@ -0,0 +1,269 @@
|
||||
# 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!**
|
||||
Reference in New Issue
Block a user