Zum Inhalt springen

Docker Cluster

Die Docker-Cluster-Bereitstellung betreibt RAMP in einer Hochverfügbarkeitskonfiguration mit mehreren API-Instanzen, Load Balancing, zentralisiertem Dateispeicher und einem Redis-Backplane für Echtzeit-Messaging. Dies ist die empfohlene Einrichtung für Produktionsumgebungen mit mehr als 10 Benutzern.

KomponenteInstanzenZweck
API3 (mit Load Balancing)Backend-Anwendungsserver
Web UI2 (mit Load Balancing)Frontend-Server für statische Dateien
Nginx1Load Balancer und Reverse-Proxy
PostgreSQL1Relationale Datenbank
Redis1Cache + SignalR-Backplane
MinIO1S3-kompatibler Dateispeicher
LDAP1Unternehmensauthentifizierung

  • Docker Desktop 4.0+ (Windows/Mac) oder Docker Engine 20.10+ (Linux)
  • Docker Compose 2.0+
  • Verfügbarer Arbeitsspeicher: mindestens 8 GB (16 GB empfohlen)
  • Speicherplatz: mindestens 20 GB
Terminal-Fenster
# Installation prüfen
docker --version # 24.0.0 oder höher
docker-compose --version # 2.0.0 oder höher

  1. Navigieren Sie zum RAMP-Verzeichnis:

    Terminal-Fenster
    cd /path/to/RAMP
  2. Erstellen Sie eine .env-Datei mit sicheren Passwörtern:

    Terminal-Fenster
    DB_PASSWORD=YourSecureDbPassword123!
    LDAP_ADMIN_PASSWORD=YourLdapPassword123!
    LDAP_JWT_SECRET=your_jwt_secret_min_32_chars_long!
    JWT_SECRET=YourApiJwtSecretAtLeast32CharsLong!
    MINIO_ROOT_USER=admin
    MINIO_ROOT_PASSWORD=YourMinioPassword123!
  3. Cluster starten (beim ersten Start dauert das Erstellen der Images 5—10 Minuten):

    Terminal-Fenster
    docker-compose -f docker-compose.cluster.yml up -d --build
  4. Startfortschritt überwachen:

    Terminal-Fenster
    docker-compose -f docker-compose.cluster.yml ps

    Warten Sie, bis alle Dienste Up (healthy) anzeigen. Typische Startzeiten:

    • Infrastruktur (Redis, PostgreSQL, LDAP, MinIO): 30—60 Sekunden
    • API-Instanzen: 60—90 Sekunden (einschließlich Datenbankmigrationen)
    • Web UI + Load Balancer: 10—20 Sekunden nach Bereitschaft der APIs
  5. Öffnen Sie Ihren Browser unter http://localhost.


FeldWert
E-Mailadmin@ramp.local
PasswortAdmin123!
FeldWert
URLhttp://localhost:9001
Benutzernameadmin
Passwortminio_secure_password_change_me

Verwenden Sie die MinIO-Konsole, um hochgeladene Dateien anzuzeigen, Buckets zu erstellen, die Speicherauslastung zu überwachen und Zugriffsrichtlinien zu konfigurieren.

FeldWert
URLhttp://localhost:17170
Benutzernameadmin
PasswortLdapAdmin123!
FeldWert
Hostlocalhost
Port5432
Datenbankramp
Benutzernameramp
PasswortRampDbPassword123!

Verbindungszeichenfolge: postgresql://ramp:RampDbPassword123!@localhost:5432/ramp

FeldWert
Hostlocalhost
Port6379
PasswortKeines (standardmäßig keine Authentifizierung)
Terminal-Fenster
# Verbindung zu Redis herstellen
docker exec -it ramp-redis redis-cli
> PING
PONG
> KEYS RAMP:*

Überprüfen Sie nach dem Start, ob der Cluster korrekt funktioniert:

Terminal-Fenster
docker-compose -f docker-compose.cluster.yml ps

Erwartete Ausgabe: alle 10 Container laufen, API, Datenbank, Redis, MinIO und LDAP zeigen (healthy).

Terminal-Fenster
curl http://localhost/_health
Terminal-Fenster
curl http://localhost/_api/signalrmonitoring/health

Erwartete Antwort enthält:

{
"status": "healthy",
"signalr": {
"hubsInitialized": true,
"redisBackplaneEnabled": true,
"redisConnected": true
}
}
  1. Öffnen Sie zwei Browserfenster (verwenden Sie verschiedene Browser oder den Inkognito-Modus).
  2. Melden Sie sich in beiden Fenstern bei RAMP an.
  3. Navigieren Sie in beiden Fenstern zur selben Vorlage.
  4. Klicken Sie in Fenster 1 auf ein Feld, um es zu sperren.
  5. In Fenster 2 sollte sofort angezeigt werden, dass das Feld gesperrt ist.

Dies funktioniert, weil die beiden Fenster mit verschiedenen API-Instanzen verbunden sind und das Sperrereignis über den Redis-Backplane übertragen wird.

  1. Öffnen Sie RAMP im Browser und navigieren Sie umher.

  2. Stoppen Sie eine API-Instanz:

    Terminal-Fenster
    docker stop ramp-api-1
  3. Aktualisieren Sie die Seite. Die Anwendung funktioniert weiterhin, da Anfragen an die verbleibenden Instanzen weitergeleitet werden.

  4. Starten Sie die Instanz neu:

    Terminal-Fenster
    docker start ramp-api-1
  1. Melden Sie sich bei RAMP an und laden Sie einen Anhang zu einer Instanz hoch.
  2. Öffnen Sie die MinIO-Konsole unter http://localhost:9001.
  3. Überprüfen Sie, ob die Datei im Bucket ramp-uploads erscheint.
  4. Laden Sie die Datei von RAMP herunter, um den vollständigen Datenpfad zu bestätigen.

Terminal-Fenster
# Alle Container
docker-compose -f docker-compose.cluster.yml logs -f
# Spezifischer Dienst
docker-compose -f docker-compose.cluster.yml logs -f ramp-api-1
# Letzte 100 Zeilen
docker-compose -f docker-compose.cluster.yml logs --tail=100 ramp-api-1
Terminal-Fenster
# Eine einzelne Instanz neu starten
docker-compose -f docker-compose.cluster.yml restart ramp-api-1
# Alle API-Instanzen neu starten
docker-compose -f docker-compose.cluster.yml restart ramp-api-1 ramp-api-2 ramp-api-3
Terminal-Fenster
docker-compose -f docker-compose.cluster.yml stop

Terminal-Fenster
# Einfaches SQL
docker exec ramp-db pg_dump -U ramp -d ramp > ramp_backup_$(date +%Y%m%d).sql
# Komprimiert
docker exec ramp-db pg_dump -U ramp -d ramp | gzip > ramp_backup_$(date +%Y%m%d).sql.gz
Terminal-Fenster
# MinIO-Daten sichern
docker exec ramp-minio tar czf - /data | cat > minio_backup_$(date +%Y%m%d).tar.gz

Terminal-Fenster
docker-compose -f docker-compose.cluster.yml logs

Häufige Ursachen:

  • Ports bereits belegt (80, 443, 5432, 6379, 9000, 17170)
  • Unzureichender Arbeitsspeicher (mindestens 8 GB RAM benötigt)
  • Docker Desktop läuft nicht
Terminal-Fenster
# Port-Konflikte prüfen
lsof -i :80,5432,6379 # Linux/Mac
netstat -ano | findstr "80 5432 6379" # Windows
Terminal-Fenster
docker-compose -f docker-compose.cluster.yml logs ramp-api-1 | grep ERROR

Häufige Ursachen: Datenbankmigrierungsfehler, Redis-Verbindungsfehler, MinIO-Verbindungsfehler.

Lösung:

Terminal-Fenster
# Zuerst Infrastruktur neu starten
docker-compose -f docker-compose.cluster.yml restart ramp-db ramp-redis ramp-minio
# 30 Sekunden warten, dann API-Instanzen neu starten
docker-compose -f docker-compose.cluster.yml restart ramp-api-1 ramp-api-2 ramp-api-3
Terminal-Fenster
# Prüfen ob Admin-Benutzer vorhanden ist
docker exec -it ramp-db psql -U ramp -d ramp \
-c "SELECT \"Email\", \"UserName\" FROM \"AspNetUsers\" WHERE \"Email\" = 'admin@ramp.local';"

Wenn der Admin-Benutzer fehlt, wurden möglicherweise keine Datenbankmigrationen ausgeführt. Prüfen Sie die API-Protokolle auf Migrationsfehler.

Terminal-Fenster
curl http://localhost/_api/signalrmonitoring/health

Wenn redisConnected den Wert false hat:

Terminal-Fenster
# Prüfen ob Redis läuft
docker exec ramp-redis redis-cli PING
# Erwartet: PONG
# API-Instanzen neu starten
docker-compose -f docker-compose.cluster.yml restart ramp-api-1 ramp-api-2 ramp-api-3

Öffnen Sie die MinIO-Konsole unter http://localhost:9001 und prüfen Sie, ob der Bucket ramp-uploads vorhanden ist. Wenn er fehlt, erstellen Sie ihn manuell in der MinIO-Konsole.

Terminal-Fenster
# LDAP-Verbindung testen
docker exec ramp-ldap /app/lldap healthcheck
# LDAP-Protokolle anzeigen
docker logs ramp-ldap

Überprüfen Sie, ob Benutzer im LDAP-Administrationsbereich unter http://localhost:17170 unter ou=people,dc=ramp,dc=local vorhanden sind.


Terminal-Fenster
# Alle Container
docker stats
# Nur API-Instanzen
docker stats ramp-api-1 ramp-api-2 ramp-api-3
Terminal-Fenster
# Echtzeit-Operationen
docker exec -it ramp-redis redis-cli monitor
# Arbeitsspeicherauslastung
docker exec ramp-redis redis-cli INFO memory
Terminal-Fenster
docker exec -it ramp-db psql -U ramp -d ramp
-- Aktive Verbindungen
SELECT count(*) FROM pg_stat_activity;
-- Datenbankgröße
SELECT pg_size_pretty(pg_database_size('ramp'));

Bearbeiten Sie docker-compose.cluster.yml, um ramp-api-4, ramp-api-5 usw. hinzuzufügen, dann:

Terminal-Fenster
docker-compose -f docker-compose.cluster.yml up -d

In der Umgebung von ramp-db in docker-compose.cluster.yml hinzufügen:

- POSTGRES_MAX_CONNECTIONS=200

Den Redis-Befehl in docker-compose.cluster.yml bearbeiten:

ramp-redis:
command: redis-server --appendonly yes --maxmemory 4gb --maxmemory-policy allkeys-lru

Nach Änderungen neu starten:

Terminal-Fenster
docker-compose -f docker-compose.cluster.yml restart ramp-redis

  • Alle Standardpasswörter ändern (.env-Datei mit sicheren Werten erstellen)
  • SSL/TLS konfigurieren (Zertifikate zur Nginx-Load-Balancer-Konfiguration hinzufügen)
  • Automatische PostgreSQL-Sicherungen einrichten
  • Externes DNS konfigurieren (Domäne auf den Load Balancer zeigen)
  • Authentifizierung für Redis aktivieren (wenn dem Netzwerk ausgesetzt)
  • Sicherheitsheader in der Nginx-Konfiguration überprüfen
  • Überwachung einrichten (Prometheus, Grafana oder ähnlich)
  • Protokollaggregation konfigurieren (ELK-Stack, Splunk oder ähnlich)
  • Notfallwiederherstellung testen (Wiederherstellung aus Sicherung)
  • Betriebshandbücher für Ihr Betriebsteam dokumentieren