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.
Architektur
Abschnitt betitelt „Architektur“| Komponente | Instanzen | Zweck |
|---|---|---|
| API | 3 (mit Load Balancing) | Backend-Anwendungsserver |
| Web UI | 2 (mit Load Balancing) | Frontend-Server für statische Dateien |
| Nginx | 1 | Load Balancer und Reverse-Proxy |
| PostgreSQL | 1 | Relationale Datenbank |
| Redis | 1 | Cache + SignalR-Backplane |
| MinIO | 1 | S3-kompatibler Dateispeicher |
| LDAP | 1 | Unternehmensauthentifizierung |
Voraussetzungen
Abschnitt betitelt „Voraussetzungen“- 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
# Installation prüfendocker --version # 24.0.0 oder höherdocker-compose --version # 2.0.0 oder höherSchnellstart
Abschnitt betitelt „Schnellstart“-
Navigieren Sie zum RAMP-Verzeichnis:
Terminal-Fenster cd /path/to/RAMP -
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=adminMINIO_ROOT_PASSWORD=YourMinioPassword123! -
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 -
Startfortschritt überwachen:
Terminal-Fenster docker-compose -f docker-compose.cluster.yml psWarten 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
-
Öffnen Sie Ihren Browser unter http://localhost.
Standardanmeldedaten
Abschnitt betitelt „Standardanmeldedaten“RAMP-Administrator
Abschnitt betitelt „RAMP-Administrator“| Feld | Wert |
|---|---|
admin@ramp.local | |
| Passwort | Admin123! |
MinIO-Konsole (Dateispeicher)
Abschnitt betitelt „MinIO-Konsole (Dateispeicher)“| Feld | Wert |
|---|---|
| URL | http://localhost:9001 |
| Benutzername | admin |
| Passwort | minio_secure_password_change_me |
Verwenden Sie die MinIO-Konsole, um hochgeladene Dateien anzuzeigen, Buckets zu erstellen, die Speicherauslastung zu überwachen und Zugriffsrichtlinien zu konfigurieren.
LDAP-Administrationsbereich
Abschnitt betitelt „LDAP-Administrationsbereich“| Feld | Wert |
|---|---|
| URL | http://localhost:17170 |
| Benutzername | admin |
| Passwort | LdapAdmin123! |
PostgreSQL
Abschnitt betitelt „PostgreSQL“| Feld | Wert |
|---|---|
| Host | localhost |
| Port | 5432 |
| Datenbank | ramp |
| Benutzername | ramp |
| Passwort | RampDbPassword123! |
Verbindungszeichenfolge: postgresql://ramp:RampDbPassword123!@localhost:5432/ramp
| Feld | Wert |
|---|---|
| Host | localhost |
| Port | 6379 |
| Passwort | Keines (standardmäßig keine Authentifizierung) |
# Verbindung zu Redis herstellendocker exec -it ramp-redis redis-cli
> PINGPONG> KEYS RAMP:*Überprüfung
Abschnitt betitelt „Überprüfung“Überprüfen Sie nach dem Start, ob der Cluster korrekt funktioniert:
Dienstintegrität prüfen
Abschnitt betitelt „Dienstintegrität prüfen“docker-compose -f docker-compose.cluster.yml psErwartete Ausgabe: alle 10 Container laufen, API, Datenbank, Redis, MinIO und LDAP zeigen (healthy).
Load Balancer testen
Abschnitt betitelt „Load Balancer testen“curl http://localhost/_healthAPI über den Load Balancer testen
Abschnitt betitelt „API über den Load Balancer testen“curl http://localhost/_api/signalrmonitoring/healthErwartete Antwort enthält:
{ "status": "healthy", "signalr": { "hubsInitialized": true, "redisBackplaneEnabled": true, "redisConnected": true }}SignalR-Echtzeit-Messaging prüfen
Abschnitt betitelt „SignalR-Echtzeit-Messaging prüfen“- Öffnen Sie zwei Browserfenster (verwenden Sie verschiedene Browser oder den Inkognito-Modus).
- Melden Sie sich in beiden Fenstern bei RAMP an.
- Navigieren Sie in beiden Fenstern zur selben Vorlage.
- Klicken Sie in Fenster 1 auf ein Feld, um es zu sperren.
- 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.
Instanz-Failover testen
Abschnitt betitelt „Instanz-Failover testen“-
Öffnen Sie RAMP im Browser und navigieren Sie umher.
-
Stoppen Sie eine API-Instanz:
Terminal-Fenster docker stop ramp-api-1 -
Aktualisieren Sie die Seite. Die Anwendung funktioniert weiterhin, da Anfragen an die verbleibenden Instanzen weitergeleitet werden.
-
Starten Sie die Instanz neu:
Terminal-Fenster docker start ramp-api-1
Datei-Uploads mit MinIO testen
Abschnitt betitelt „Datei-Uploads mit MinIO testen“- Melden Sie sich bei RAMP an und laden Sie einen Anhang zu einer Instanz hoch.
- Öffnen Sie die MinIO-Konsole unter http://localhost:9001.
- Überprüfen Sie, ob die Datei im Bucket
ramp-uploadserscheint. - Laden Sie die Datei von RAMP herunter, um den vollständigen Datenpfad zu bestätigen.
Häufige Vorgänge
Abschnitt betitelt „Häufige Vorgänge“Protokolle anzeigen
Abschnitt betitelt „Protokolle anzeigen“# Alle Containerdocker-compose -f docker-compose.cluster.yml logs -f
# Spezifischer Dienstdocker-compose -f docker-compose.cluster.yml logs -f ramp-api-1
# Letzte 100 Zeilendocker-compose -f docker-compose.cluster.yml logs --tail=100 ramp-api-1Dienste neu starten
Abschnitt betitelt „Dienste neu starten“# Eine einzelne Instanz neu startendocker-compose -f docker-compose.cluster.yml restart ramp-api-1
# Alle API-Instanzen neu startendocker-compose -f docker-compose.cluster.yml restart ramp-api-1 ramp-api-2 ramp-api-3Cluster stoppen
Abschnitt betitelt „Cluster stoppen“docker-compose -f docker-compose.cluster.yml stopdocker-compose -f docker-compose.cluster.yml down# WARNUNG: Löscht ALLE Daten einschließlich Datenbank, Dateien und Cachedocker-compose -f docker-compose.cluster.yml down -vSicherung und Wiederherstellung
Abschnitt betitelt „Sicherung und Wiederherstellung“PostgreSQL
Abschnitt betitelt „PostgreSQL“# Einfaches SQLdocker exec ramp-db pg_dump -U ramp -d ramp > ramp_backup_$(date +%Y%m%d).sql
# Komprimiertdocker exec ramp-db pg_dump -U ramp -d ramp | gzip > ramp_backup_$(date +%Y%m%d).sql.gz# Zuerst API-Instanzen stoppendocker-compose -f docker-compose.cluster.yml stop ramp-api-1 ramp-api-2 ramp-api-3
# Wiederherstellencat ramp_backup_20260110.sql | docker exec -i ramp-db psql -U ramp -d ramp
# API-Instanzen neu startendocker-compose -f docker-compose.cluster.yml start ramp-api-1 ramp-api-2 ramp-api-3MinIO-Dateien
Abschnitt betitelt „MinIO-Dateien“# MinIO-Daten sicherndocker exec ramp-minio tar czf - /data | cat > minio_backup_$(date +%Y%m%d).tar.gzFehlerbehebung
Abschnitt betitelt „Fehlerbehebung“Container starten nicht
Abschnitt betitelt „Container starten nicht“docker-compose -f docker-compose.cluster.yml logsHäufige Ursachen:
- Ports bereits belegt (80, 443, 5432, 6379, 9000, 17170)
- Unzureichender Arbeitsspeicher (mindestens 8 GB RAM benötigt)
- Docker Desktop läuft nicht
# Port-Konflikte prüfenlsof -i :80,5432,6379 # Linux/Macnetstat -ano | findstr "80 5432 6379" # WindowsAPI-Integritätsprüfung schlägt fehl
Abschnitt betitelt „API-Integritätsprüfung schlägt fehl“docker-compose -f docker-compose.cluster.yml logs ramp-api-1 | grep ERRORHäufige Ursachen: Datenbankmigrierungsfehler, Redis-Verbindungsfehler, MinIO-Verbindungsfehler.
Lösung:
# Zuerst Infrastruktur neu startendocker-compose -f docker-compose.cluster.yml restart ramp-db ramp-redis ramp-minio
# 30 Sekunden warten, dann API-Instanzen neu startendocker-compose -f docker-compose.cluster.yml restart ramp-api-1 ramp-api-2 ramp-api-3Anmeldung nicht möglich
Abschnitt betitelt „Anmeldung nicht möglich“# Prüfen ob Admin-Benutzer vorhanden istdocker 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.
SignalR funktioniert nicht
Abschnitt betitelt „SignalR funktioniert nicht“curl http://localhost/_api/signalrmonitoring/healthWenn redisConnected den Wert false hat:
# Prüfen ob Redis läuftdocker exec ramp-redis redis-cli PING# Erwartet: PONG
# API-Instanzen neu startendocker-compose -f docker-compose.cluster.yml restart ramp-api-1 ramp-api-2 ramp-api-3Dateien werden nicht hochgeladen
Abschnitt betitelt „Dateien werden nicht hochgeladen“Ö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.
LDAP-Authentifizierung funktioniert nicht
Abschnitt betitelt „LDAP-Authentifizierung funktioniert nicht“# LDAP-Verbindung testendocker exec ramp-ldap /app/lldap healthcheck
# LDAP-Protokolle anzeigendocker logs ramp-ldapÜberprüfen Sie, ob Benutzer im LDAP-Administrationsbereich unter http://localhost:17170 unter ou=people,dc=ramp,dc=local vorhanden sind.
Überwachung
Abschnitt betitelt „Überwachung“Container-Ressourcenauslastung
Abschnitt betitelt „Container-Ressourcenauslastung“# Alle Containerdocker stats
# Nur API-Instanzendocker stats ramp-api-1 ramp-api-2 ramp-api-3Redis-Überwachung
Abschnitt betitelt „Redis-Überwachung“# Echtzeit-Operationendocker exec -it ramp-redis redis-cli monitor
# Arbeitsspeicherauslastungdocker exec ramp-redis redis-cli INFO memoryDatenbanküberwachung
Abschnitt betitelt „Datenbanküberwachung“docker exec -it ramp-db psql -U ramp -d ramp
-- Aktive VerbindungenSELECT count(*) FROM pg_stat_activity;
-- DatenbankgrößeSELECT pg_size_pretty(pg_database_size('ramp'));Leistungsoptimierung
Abschnitt betitelt „Leistungsoptimierung“Weitere API-Instanzen hinzufügen
Abschnitt betitelt „Weitere API-Instanzen hinzufügen“Bearbeiten Sie docker-compose.cluster.yml, um ramp-api-4, ramp-api-5 usw. hinzuzufügen, dann:
docker-compose -f docker-compose.cluster.yml up -dPostgreSQL-Verbindungen erhöhen
Abschnitt betitelt „PostgreSQL-Verbindungen erhöhen“In der Umgebung von ramp-db in docker-compose.cluster.yml hinzufügen:
- POSTGRES_MAX_CONNECTIONS=200Redis-Arbeitsspeicher erhöhen
Abschnitt betitelt „Redis-Arbeitsspeicher erhöhen“Den Redis-Befehl in docker-compose.cluster.yml bearbeiten:
ramp-redis: command: redis-server --appendonly yes --maxmemory 4gb --maxmemory-policy allkeys-lruNach Änderungen neu starten:
docker-compose -f docker-compose.cluster.yml restart ramp-redisCheckliste für die Produktionsbereitstellung
Abschnitt betitelt „Checkliste für die Produktionsbereitstellung“- 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