meldestelle/BETRIEBSANLEITUNG.md
StefanMoCoAt 1ecac43d72 (vision) SCS/DDD
Service Discovery einführen
Consul als Service-Registry implementieren
Services für automatische Registrierung konfigurieren
Dynamisches Service-Routing im API-Gateway einrichten
Health-Checks für jeden Service implementieren
2025-07-21 23:54:13 +02:00

265 lines
8.9 KiB
Markdown

# Betriebsanleitung für das Meldestelle-Projekt
Diese Betriebsanleitung beschreibt, wie Sie das Meldestelle-Projekt einrichten und ausführen können.
## Inhaltsverzeichnis
1. [Projektübersicht](#projektübersicht)
2. [Voraussetzungen](#voraussetzungen)
3. [Installation](#installation)
4. [Konfiguration](#konfiguration)
5. [Ausführung](#ausführung)
6. [Zugriff auf die Anwendung](#zugriff-auf-die-anwendung)
7. [Monitoring und Wartung](#monitoring-und-wartung)
8. [Fehlerbehebung](#fehlerbehebung)
## Projektübersicht
Das Meldestelle-Projekt ist ein Kotlin JVM Backend-Projekt, das eine Self-Contained Systems (SCS) Architektur für ein Pferdesport-Managementsystem implementiert. Es folgt den Prinzipien des Domain-Driven Design (DDD) mit klar getrennten Bounded Contexts.
### Module
- **shared-kernel**: Gemeinsame Domänentypen, Enums, Serialisierer, Validierungsdienstprogramme und Basis-DTOs
- **master-data**: Stammdatenverwaltung (Länder, Regionen, Altersklassen, Veranstaltungsorte)
- **member-management**: Personen- und Vereins-/Verbandsverwaltung
- **horse-registry**: Pferderegistrierung und -verwaltung
- **event-management**: Veranstaltungs- und Turnierverwaltung
- **api-gateway**: Zentrales API-Gateway, das alle Dienste aggregiert
- **composeApp**: Frontend-Modul
### Technologie-Stack
- **Kotlin JVM**: Primäre Programmiersprache
- **Ktor**: Web-Framework für REST-APIs
- **Exposed**: Datenbank-ORM
- **PostgreSQL**: Datenbank
- **Consul**: Service-Discovery und -Registry
- **Kotlinx Serialization**: JSON-Serialisierung
- **Gradle**: Build-System
- **Docker**: Containerisierung
## Voraussetzungen
Um das Projekt auszuführen, benötigen Sie:
### Für die lokale Entwicklung
- JDK 21 oder höher
- Gradle 8.14 oder höher
- PostgreSQL 16
- Docker und Docker Compose (für containerisierte Ausführung)
- Git (für den Quellcode-Zugriff)
### Für die containerisierte Ausführung
- Docker Engine 24.0 oder höher
- Docker Compose V2 oder höher
## Installation
### Quellcode herunterladen
```bash
git clone <repository-url>
cd meldestelle
```
### Umgebungsvariablen einrichten
Erstellen Sie eine `.env`-Datei im Stammverzeichnis des Projekts mit den folgenden Umgebungsvariablen:
```
# Postgres-Konfiguration
POSTGRES_USER=meldestelle_user
POSTGRES_PASSWORD=secure_password_change_me
POSTGRES_DB=meldestelle_db
POSTGRES_SHARED_BUFFERS=256MB
POSTGRES_EFFECTIVE_CACHE_SIZE=768MB
POSTGRES_WORK_MEM=16MB
POSTGRES_MAINTENANCE_WORK_MEM=64MB
POSTGRES_MAX_CONNECTIONS=100
# PgAdmin-Konfiguration
PGADMIN_DEFAULT_EMAIL=admin@example.com
PGADMIN_DEFAULT_PASSWORD=admin_password_change_me
PGADMIN_PORT=127.0.0.1:5050
# Grafana-Konfiguration
GRAFANA_ADMIN_USER=admin
GRAFANA_ADMIN_PASSWORD=admin
```
**Wichtig**: Ändern Sie die Passwörter für eine Produktionsumgebung!
## Konfiguration
Das Projekt verwendet einen mehrschichtigen Konfigurationsansatz, um verschiedene Umgebungen zu unterstützen:
1. Umgebungsvariablen (höchste Priorität)
2. Umgebungsspezifische Konfigurationsdateien (.properties)
3. Basis-Konfigurationsdatei (application.properties)
4. Standardwerte im Code (niedrigste Priorität)
### 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.
### Konfigurationsdateien
Die Konfigurationsdateien befinden sich im `/config`-Verzeichnis:
- `application.properties`: Basiseinstellungen für alle Umgebungen
- `application-dev.properties`: Entwicklungsumgebung
- `application-test.properties`: Testumgebung
- `application-staging.properties`: Staging-Umgebung
- `application-prod.properties`: Produktionsumgebung
## Ausführung
### Methode 1: Mit Docker Compose (empfohlen)
Diese Methode startet alle erforderlichen Dienste in Containern.
1. Stellen Sie sicher, dass Docker und Docker Compose installiert sind
2. Stellen Sie sicher, dass die `.env`-Datei konfiguriert ist
3. Führen Sie den folgenden Befehl aus:
```bash
docker compose up -d
```
Um die Logs zu überwachen:
```bash
docker compose logs -f
```
Um die Dienste zu stoppen:
```bash
docker compose down
```
Um die Dienste zu stoppen und alle Daten zu löschen:
```bash
docker compose down -v
```
### Methode 2: Lokale Entwicklung mit Gradle
Diese Methode ist für die Entwicklung gedacht und erfordert eine lokale PostgreSQL-Datenbank.
1. Stellen Sie sicher, dass JDK 21 oder höher installiert ist
2. Stellen Sie sicher, dass PostgreSQL installiert und konfiguriert ist
3. Konfigurieren Sie die Datenbankverbindung in `config/application-dev.properties`
4. Bauen Sie das Projekt:
```bash
./gradlew build
```
5. Starten Sie das API-Gateway:
```bash
./gradlew :api-gateway:jvmRun
```
## Zugriff auf die Anwendung
Nach dem Start der Anwendung können Sie auf folgende Dienste zugreifen:
- **API-Gateway**: http://localhost:8080
- **API-Dokumentation**: http://localhost:8080/docs
- **Swagger UI**: http://localhost:8080/swagger
- **OpenAPI-Spezifikation**: http://localhost:8080/openapi
- **PgAdmin**: http://localhost:5050
- **Consul UI**: http://localhost:8500
- **Prometheus**: http://localhost:9090
- **Grafana**: http://localhost:3000
- **Kibana**: http://localhost:5601
### API-Dokumentation
Die API-Dokumentation umfasst alle Bounded Contexts:
- Authentication API
- Master Data API
- Member Management API
- Horse Registry API
- Event Management API
## Monitoring und Wartung
### Monitoring-Stack
Das Projekt enthält einen vollständigen Monitoring-Stack:
- **Prometheus**: Metriken-Sammlung und -Speicherung
- **Grafana**: Visualisierung von Metriken und Dashboards
- **Alertmanager**: Benachrichtigungen bei Problemen
- **ELK-Stack**: Elasticsearch, Logstash und Kibana für Logging
### Service Discovery
Das Projekt verwendet Consul für Service Discovery, wodurch Dienste sich dynamisch entdecken und miteinander kommunizieren können, ohne fest codierte Endpunkte zu verwenden. Dies macht das System widerstandsfähiger und skalierbarer.
- **Consul UI**: Zugriff auf die Consul-UI unter http://localhost:8500
## Fehlerbehebung
### Häufige Probleme
1. **Dienste starten nicht**
- Überprüfen Sie die Docker-Logs: `docker-compose logs -f <service-name>`
- Stellen Sie sicher, dass alle erforderlichen Ports verfügbar sind
- Überprüfen Sie die Umgebungsvariablen in der `.env`-Datei
2. **Fehler bei Docker Compose Abhängigkeiten**
- Wenn Sie eine Fehlermeldung wie `service "X" depends on undefined service "Y"` erhalten, überprüfen Sie die `depends_on`-Einträge in der docker-compose.yml
- Stellen Sie sicher, dass alle referenzierten Dienste korrekt definiert sind
- Für Dienste, die über Hostnamen kommunizieren, können Sie Netzwerk-Aliase verwenden:
```yaml
services:
api-gateway:
networks:
meldestelle-net:
aliases:
- server
```
- Stellen Sie sicher, dass alle verwendeten Volumes in der `volumes`-Sektion definiert sind
3. **Datenbankverbindungsprobleme**
- Überprüfen Sie, ob die PostgreSQL-Datenbank läuft: `docker-compose ps db`
- Überprüfen Sie die Datenbankverbindungseinstellungen
- Überprüfen Sie die Datenbank-Logs: `docker-compose logs -f db`
4. **API-Gateway ist nicht erreichbar**
- Überprüfen Sie, ob der API-Gateway-Dienst läuft: `docker-compose ps api-gateway`
- Überprüfen Sie die API-Gateway-Logs: `docker-compose logs -f api-gateway`
- Stellen Sie sicher, dass Port 8080 nicht von einem anderen Dienst verwendet wird
5. **PostgreSQL SSL-Konfigurationsprobleme**
- Wenn die Datenbank mit der Fehlermeldung `FATAL: could not load server certificate file "server.crt": No such file or directory` nicht startet, ist SSL aktiviert, aber die erforderlichen Zertifikatsdateien fehlen
- Lösungen:
- Option 1: Deaktivieren Sie SSL in der PostgreSQL-Konfiguration (`config/postgres/postgresql.conf`), indem Sie `ssl = off` setzen
- Option 2: Stellen Sie die erforderlichen SSL-Zertifikatsdateien (server.crt, server.key) bereit und mounten Sie sie im Container
- Für Entwicklungsumgebungen ist Option 1 (SSL deaktivieren) in der Regel ausreichend
- Für Produktionsumgebungen sollten Sie Option 2 (SSL-Zertifikate bereitstellen) in Betracht ziehen, um die Datenbankverbindungen zu sichern
### Support
Bei weiteren Problemen wenden Sie sich bitte an das Entwicklungsteam oder erstellen Sie ein Issue im Repository.
---
Letzte Aktualisierung: 2025-07-21