Linux
Stellen Sie RAMP auf einem Bare-Metal- oder VM-basierten Linux-Server mit systemd-Diensten und Nginx als Reverse-Proxy bereit. Diese Anleitung behandelt Debian 13, die Schritte gelten jedoch mit geringen Anpassungen für die meisten systemd-basierten Distributionen.
Architekturübersicht
Abschnitt betitelt „Architekturübersicht“Die Linux-Bereitstellung betreibt drei Dienste:
| Dienst | Läuft als | Hört auf | Zweck |
|---|---|---|---|
| RAMP API | systemd (ramp.service) | localhost:5000 | Backend-API + eingebettetes Frontend |
| Keycloak | systemd (keycloak.service) | localhost:8180 | OIDC-Identitätsanbieter (optional) |
| Nginx | Systemdienst | Ports 80, 443, 8443 | TLS-Terminierung und Reverse-Proxy |
RAMP verwendet SQLite zur Datenspeicherung und lokalen Dateispeicher für Uploads. Keycloak ist optional — Sie können stattdessen die integrierte Authentifizierung von RAMP verwenden.
Voraussetzungen
Abschnitt betitelt „Voraussetzungen“- Debian 13 (oder Ubuntu 22.04+, RHEL 9+, andere systemd-basierte Distributionen)
- Root-Zugriff (oder sudo-Berechtigungen)
- 2 GB RAM mindestens (4 GB empfohlen mit Keycloak)
- 5 GB Speicherplatz mindestens
- Veröffentlichte RAMP-Build-Ausgabe (auf einem Entwicklungsrechner erstellt)
- SSL-Zertifikate (für HTTPS — für die Produktion empfohlen)
Schnellstart
Abschnitt betitelt „Schnellstart“Die Bereitstellung besteht aus vier Phasen, orchestriert durch das Skript deploy-all.sh:
- VM-Setup — .NET Runtime, Java (für Keycloak) und Nginx installieren.
- Keycloak-Installation — Keycloak herunterladen und als systemd-Dienst konfigurieren (optional).
- RAMP-Bereitstellung — Anwendung bereitstellen und als systemd-Dienst registrieren.
- Nginx-Konfiguration — Reverse-Proxy mit TLS-Terminierung konfigurieren.
# Alles auf einmal ausführen (als root)sudo ./deploy-all.shOder führen Sie jede Phase einzeln aus, wie unten beschrieben.
Phase 1: VM-Setup
Abschnitt betitelt „Phase 1: VM-Setup“Das Skript setup-vm.sh installiert alle Voraussetzungen und erstellt die erforderliche Verzeichnisstruktur.
Was installiert wird
Abschnitt betitelt „Was installiert wird“- Wichtige Tools — curl, wget, gnupg, unzip, net-tools, htop
- ASP.NET Core 10 Runtime — aus dem Microsoft-Paketrepository
- Java 21 (OpenJDK) — erforderlich für Keycloak
- Nginx — Reverse-Proxy
Setup ausführen
Abschnitt betitelt „Setup ausführen“sudo ./setup-vm.shWas erstellt wird
Abschnitt betitelt „Was erstellt wird“| Pfad | Zweck |
|---|---|
/opt/ramp/app/ | RAMP-Anwendungsdateien |
/var/ramp/data/ | SQLite-Datenbank |
/var/ramp/data/files/ | Speicher für hochgeladene Dateien |
/var/ramp/logs/ | Anwendungsprotokolle |
/opt/keycloak/ | Keycloak-Installation |
Das Skript erstellt außerdem einen ramp-Systembenutzer ohne Anmelde-Shell, unter dem der RAMP-Dienst ausgeführt wird.
Manuelle Installation
Abschnitt betitelt „Manuelle Installation“Falls Sie Voraussetzungen lieber manuell installieren möchten:
# Microsoft-Repository hinzufügenwget -q https://packages.microsoft.com/config/debian/13/packages-microsoft-prod.deb \ -O /tmp/packages-microsoft-prod.debsudo dpkg -i /tmp/packages-microsoft-prod.deb
# Laufzeitumgebungen installierensudo apt-get updatesudo apt-get install -y aspnetcore-runtime-10.0 openjdk-21-jre-headless nginx# Microsoft-Repository hinzufügensudo rpm -Uvh https://packages.microsoft.com/config/rhel/9/packages-microsoft-prod.rpm
# Laufzeitumgebungen installierensudo dnf install -y aspnetcore-runtime-10.0 java-21-openjdk-headless nginxPhase 2: Keycloak-Installation (optional)
Abschnitt betitelt „Phase 2: Keycloak-Installation (optional)“Das Skript install-keycloak.sh lädt Keycloak 24.0 herunter, richtet den Realm-Import ein und registriert es als systemd-Dienst.
sudo ./install-keycloak.shWas passiert
Abschnitt betitelt „Was passiert“- Keycloak 24.0 wird nach
/opt/keycloak/keycloak-24.0.0/heruntergeladen - Ein Symlink wird unter
/opt/keycloak/currenterstellt - Die Realm-Import-Datei (
realm-export.json) wird für die automatische Realm-Bereitstellung kopiert - Der Dienst
keycloak.servicewird installiert und gestartet - Warten auf die Integritätsprüfung (bis zu 120 Sekunden)
Keycloak systemd-Dienst
Abschnitt betitelt „Keycloak systemd-Dienst“[Unit]Description=Keycloak Identity ProviderAfter=network.target
[Service]Type=execUser=rootGroup=root
Environment=KEYCLOAK_ADMIN=adminEnvironment=KEYCLOAK_ADMIN_PASSWORD=Passw0rdEnvironment=KC_HEALTH_ENABLED=trueEnvironment=KC_HTTP_PORT=8180
ExecStart=/opt/keycloak/current/bin/kc.sh start-dev --import-realm --http-port=8180
Restart=on-failureRestartSec=10
[Install]WantedBy=multi-user.targetAuf Keycloak zugreifen
Abschnitt betitelt „Auf Keycloak zugreifen“- Admin-Konsole:
http://localhost:8180/admin - Anmeldedaten:
admin/Passw0rd - RAMP-Realm: vorab importiert aus
realm-export.json
Keycloak-Dienst verwalten
Abschnitt betitelt „Keycloak-Dienst verwalten“sudo systemctl status keycloaksudo systemctl stop keycloaksudo systemctl start keycloaksudo journalctl -u keycloak -fPhase 3: RAMP-Bereitstellung
Abschnitt betitelt „Phase 3: RAMP-Bereitstellung“RAMP auf Ihrem Entwicklungsrechner erstellen
Abschnitt betitelt „RAMP auf Ihrem Entwicklungsrechner erstellen“Veröffentlichen Sie die RAMP-Anwendung vor der Bereitstellung:
# Backendcd src/RAMP.APIdotnet publish -c Release -o ./publish
# Frontend (erstellt und in die API-Veröffentlichungsausgabe eingebettet)cd src/RAMP.Webnpm ci && npm run buildDateien auf den Server übertragen
Abschnitt betitelt „Dateien auf den Server übertragen“# Die veröffentlichte Ausgabe per SCP auf den Server übertragenscp -r src/RAMP.API/publish/* user@your-server:/opt/ramp/app/Anwendung bereitstellen
Abschnitt betitelt „Anwendung bereitstellen“sudo ./deploy-ramp.shWas passiert
Abschnitt betitelt „Was passiert“- Vorhandenen RAMP-Dienst stoppen (falls aktiv)
appsettings.Production.jsonundscaffold.yamlin das App-Verzeichnis kopieren- Dateibesitz auf den
ramp-Systembenutzer setzen - Systemd-Dienstdatei installieren
- RAMP starten und auf die Integritätsprüfung warten (bis zu 60 Sekunden)
RAMP systemd-Dienst
Abschnitt betitelt „RAMP systemd-Dienst“[Unit]Description=RAMP ApplicationAfter=network.targetWants=keycloak.service
[Service]Type=execUser=rampGroup=rampWorkingDirectory=/opt/ramp/app
Environment=ASPNETCORE_ENVIRONMENT=ProductionEnvironment=ASPNETCORE_URLS=http://localhost:5000Environment=DOTNET_ENVIRONMENT=Production
ExecStart=/usr/bin/dotnet /opt/ramp/app/RAMP.API.dll
Restart=on-failureRestartSec=5
LimitNOFILE=65536
[Install]WantedBy=multi-user.targetRAMP-Dienst verwalten
Abschnitt betitelt „RAMP-Dienst verwalten“sudo systemctl status rampsudo systemctl stop rampsudo systemctl start rampsudo systemctl restart rampsudo journalctl -u ramp -fPhase 4: Nginx-Konfiguration
Abschnitt betitelt „Phase 4: Nginx-Konfiguration“Nginx dient als TLS-terminierender Reverse-Proxy vor RAMP und Keycloak.
Konfiguration installieren
Abschnitt betitelt „Konfiguration installieren“# Konfigurationsdatei kopierensudo cp nginx/ramp-linux.conf /etc/nginx/sites-available/ramp-linux.conf
# Website aktivierensudo ln -sfn /etc/nginx/sites-available/ramp-linux.conf /etc/nginx/sites-enabled/ramp-linux.conf
# Standard-Website entfernensudo rm -f /etc/nginx/sites-enabled/default
# Testen und neu ladensudo nginx -t && sudo systemctl reload nginxSSL-Zertifikate
Abschnitt betitelt „SSL-Zertifikate“Platzieren Sie Ihre SSL-Zertifikate unter diesen Pfaden (oder passen Sie die Nginx-Konfiguration an):
| Datei | Pfad |
|---|---|
| Zertifikat | /etc/ssl/your-domain/cert.crt |
| Privater Schlüssel | /etc/ssl/your-domain/cert.key |
| CA-Bundle | /etc/ssl/your-domain/ca-bundle.crt |
Aktualisieren Sie die Direktiven ssl_certificate, ssl_certificate_key und ssl_trusted_certificate in der Nginx-Konfiguration entsprechend Ihren Pfaden.
Nginx-Konfigurationsübersicht
Abschnitt betitelt „Nginx-Konfigurationsübersicht“Die Nginx-Konfiguration definiert drei Serverblöcke:
| Serverblock | Hört auf | Zweck |
|---|---|---|
| HTTP-Weiterleitung | Port 80 | Leitet gesamten HTTP-Datenverkehr auf HTTPS um |
| RAMP (HTTPS) | Port 443 | Leitet an RAMP API auf localhost:5000 weiter |
| Keycloak (HTTPS) | Port 8443 | Leitet an Keycloak auf localhost:8180 weiter |
Wichtige Proxy-Standorte im RAMP-Serverblock:
| Standort | Backend | Hinweise |
|---|---|---|
/_api/ | localhost:5000/_api/ | Backend-API-Endpunkte |
/_hubs/ | localhost:5000/_hubs/ | SignalR WebSocket mit Upgrade-Headern, 7-Tage-Timeout |
/_swagger/ | localhost:5000/_swagger/ | Swagger-Oberfläche |
/_health | localhost:5000/_health | Integritätsprüfung (Zugriffsprotokoll deaktiviert) |
/ | localhost:5000/ | Frontend SPA (Catch-all mit Fallback auf index.html) |
| Statische Dateien | localhost:5000 | 1-Jahres-Cache, Cache-Control: public, immutable |
Anwendungskonfiguration
Abschnitt betitelt „Anwendungskonfiguration“appsettings.Production.json
Abschnitt betitelt „appsettings.Production.json“Die Produktionskonfigurationsdatei steuert Datenbank-, Authentifizierungs- und Diensteinstellungen:
{ "Database": { "Provider": "Sqlite", "ConnectionString": "Data Source=/var/ramp/data/ramp.db", "AutoMigrate": true }, "Jwt": { "Secret": "CHANGE_THIS_IN_PRODUCTION_MIN_32_CHARS", "Issuer": "https://your-domain.com", "Audience": "https://your-domain.com", "AccessTokenExpirationMinutes": 480, "RefreshTokenExpirationDays": 30 }, "CORS": { "AllowedOrigins": ["https://your-domain.com"] }, "Cache": { "Provider": "InMemory" }, "FileStorage": { "Provider": "Local", "LocalFileStorage": { "BasePath": "/var/ramp/data/files" } }, "SignalR": { "UseRedisBackplane": false }, "ForwardedHeaders": { "Enabled": true, "ForwardedHeaders": "All", "KnownProxies": ["127.0.0.1", "::1"] }}Die vollständige Konfigurationsreferenz finden Sie unter Anwendungseinstellungen.
Scaffold-Datei
Abschnitt betitelt „Scaffold-Datei“Die Scaffold-Datei (default.yaml) befüllt die Datenbank beim ersten Start mit Mandanten, Benutzern, IDP-Verbindungen und Rollenzuordnungen.
Wichtige Abschnitte des Scaffolds:
- Mandantendefinition mit RAMP Internal und Keycloak OIDC-Identitätsanbietern
- Admin-Benutzer mit den Rollen Administrator und TenantAdministrator
- Rollenzuordnungen von Keycloak-Realm-Rollen und -Gruppen zu RAMP-Rollen
Standardanmeldedaten
Abschnitt betitelt „Standardanmeldedaten“| Dienst | URL | Benutzername | Passwort |
|---|---|---|---|
| RAMP | https://your-domain.com | admin | Passw0rd |
| Keycloak | https://your-domain.com:8443/admin | admin | Passw0rd |
Integritätsprüfungen
Abschnitt betitelt „Integritätsprüfungen“# RAMP-Integritätcurl -s http://localhost:5000/_health
# Keycloak-Integritätcurl -s http://localhost:8180/health/ready
# Nginx-Statussudo systemctl status nginxFehlerbehebung
Abschnitt betitelt „Fehlerbehebung“RAMP startet nicht
Abschnitt betitelt „RAMP startet nicht“# Dienststatus prüfensudo systemctl status ramp
# Detaillierte Protokolle anzeigensudo journalctl -u ramp -f
# Anwendungsprotokolle prüfenls -la /var/ramp/logs/Häufige Ursachen:
- Fehlende
appsettings.Production.json - Datenbankverzeichnisberechtigungen (muss dem Benutzer
rampgehören) - .NET Runtime nicht installiert
Keycloak startet nicht
Abschnitt betitelt „Keycloak startet nicht“# Dienststatus prüfensudo systemctl status keycloak
# Protokolle anzeigensudo journalctl -u keycloak -fHäufige Ursachen:
- Java 21 nicht installiert
- Port 8180 bereits belegt
- Unzureichender Arbeitsspeicher (Keycloak benötigt ~512 MB)
Nginx gibt 502 Bad Gateway zurück
Abschnitt betitelt „Nginx gibt 502 Bad Gateway zurück“Ursache: RAMP läuft nicht oder hört nicht auf localhost:5000.
# Prüfen ob RAMP lauschtsudo ss -tlnp | grep 5000
# RAMP neu startensudo systemctl restart rampBerechtigungsfehler
Abschnitt betitelt „Berechtigungsfehler“# Besitz korrigierensudo chown -R ramp:ramp /opt/rampsudo chown -R ramp:ramp /var/rampSSL-Zertifikatsprobleme
Abschnitt betitelt „SSL-Zertifikatsprobleme“# Nginx-Konfiguration testensudo nginx -t
# Zertifikatsablauf prüfenopenssl x509 -in /etc/ssl/your-domain/cert.crt -noout -datesSicherung und Wiederherstellung
Abschnitt betitelt „Sicherung und Wiederherstellung“Sicherung
Abschnitt betitelt „Sicherung“# Datenbankcp /var/ramp/data/ramp.db /backups/ramp_$(date +%Y%m%d).db
# Hochgeladene Dateientar czf /backups/ramp_files_$(date +%Y%m%d).tar.gz /var/ramp/data/files/
# Anwendungskonfigurationcp /opt/ramp/app/appsettings.Production.json /backups/Wiederherstellung
Abschnitt betitelt „Wiederherstellung“# RAMP stoppensudo systemctl stop ramp
# Datenbank wiederherstellencp /backups/ramp_20260301.db /var/ramp/data/ramp.dbchown ramp:ramp /var/ramp/data/ramp.db
# RAMP startensudo systemctl start rampRAMP aktualisieren
Abschnitt betitelt „RAMP aktualisieren“-
Erstellen Sie ein neues Release auf Ihrem Entwicklungsrechner.
-
Übertragen Sie die veröffentlichten Dateien auf den Server:
Terminal-Fenster scp -r src/RAMP.API/publish/* user@your-server:/opt/ramp/app/ -
Führen Sie das Bereitstellungsskript erneut aus:
Terminal-Fenster sudo ./deploy-ramp.sh
Das Bereitstellungsskript stoppt den Dienst, kopiert Konfigurationsdateien und startet mit der neuen Version neu.
Produktions-Checkliste
Abschnitt betitelt „Produktions-Checkliste“- Alle Standardpasswörter ändern (RAMP-Admin, Keycloak-Admin, JWT-Secret)
- Gültige SSL-Zertifikate installieren
- CORS so konfigurieren, dass nur Ihre Produktionsdomäne erlaubt ist
- Automatische Sicherungen für Datenbank und Dateispeicher einrichten
- Protokollrotation für
/var/ramp/logs/konfigurieren - Überwachung der Integritätsendpunkte einrichten
- Für Produktionslasten zu SQL Server oder PostgreSQL wechseln
- Redis für Caching und SignalR-Backplane beim Skalieren in Betracht ziehen