1 Voraussetzungen
Hardware-Anforderungen
| Komponente | Minimum (Dev / Eval) | Empfohlen (Produktion) |
|---|---|---|
| CPU | 4 Kerne | 8+ Kerne |
| RAM | 16 GB | 32 GB |
| Speicher | 50 GB SSD | 100 GB SSD |
| GPU (für lokales LLM) | NVIDIA GPU, 16 GB VRAM | NVIDIA GPU, 24+ GB VRAM |
Die GPU wird für das lokale LLM benötigt (Ollama mit qwen3:14b). Alternativ kann eine entfernte Ollama-Instanz oder ein Cloud-LLM-Anbieter verwendet werden.
Produktions-Skalierung
LLM-Inferenz ist der primäre Engpass. Eine einzelne Anfrage dauert ~20 Sekunden (4 Agent-Schritte, 1 Tool-Aufruf). Ollama serialisiert GPU-Anfragen — bei gleichzeitigen Nutzern steigt die Latenz linear.
| Teamgröße | LLM-Backend | GPU | Hinweise |
|---|---|---|---|
| 1–3 Nutzer | Ollama | 16 GB VRAM (z. B. RTX 5070 Ti) | Ausreichend für Evaluierung und kleine Teams. Sequenzielle Verarbeitung. |
| 5–20 Nutzer | vLLM | 24+ GB VRAM (z. B. RTX 5090) | Batched Inference ermöglicht gleichzeitige Anfragen. Deutlich höherer Durchsatz als Ollama. |
| 20+ Nutzer | vLLM oder Cloud-LLM | 48+ GB VRAM oder Multi-GPU | Für große Teams Cloud-LLM-Anbieter (OpenAI, Anthropic) in Betracht ziehen, um GPU-Infrastruktur-Komplexität zu vermeiden. |
Warum vLLM für Produktion? Ollama verarbeitet Anfragen sequenziell — bei 5 gleichzeitigen Nutzern überschreiten Antwortzeiten 2 Minuten und Anfragen beginnen mit Timeouts. vLLM nutzt Continuous Batching und PagedAttention, um mehrere Anfragen gleichzeitig zu bedienen, benötigt aber mindestens 24 GB VRAM für den KV-Cache-Spielraum von qwen3:14b.
Um vLLM zu aktivieren, setzen Sie diese Umgebungsvariablen:
REVA_VLLM_URL=http://gpu-server:8100/v1
REVA_VLLM_API_KEY=beliebiger-string
Das Ollama-Router-Modell (llama3.2:3b) muss auf einer separaten Ollama-Instanz verbleiben, um GPU-Konflikte zu vermeiden. Details siehe src/reva/vllm_client.py.
Empfohlene Modelle
Reva benötigt Modelle mit starken Tool-Calling-Fähigkeiten (Function Calling) und Mehrsprachigkeit. Nicht alle Modelle liefern gleich gute Ergebnisse — folgende Empfehlungen basieren auf umfangreichen Tests mit Revas Agent-Loop:
| Modell | Größe | Bewertung | Hinweise |
|---|---|---|---|
qwen3:14b | 14B | Beste Wahl | Hervorragendes Tool-Calling, zuverlässiges Ausgabeformat, starke Mehrsprachigkeit (DE/EN/FR/ES/NL). Standard-Agent-Modell. |
qwen3:32b | 32B | Ausgezeichnet | Noch bessere Qualität, erfordert aber 24+ GB VRAM und ist langsamer. Gut für vLLM-Deployments. |
gemma3:27b | 27B | Gut | Gutes Tool-Calling, aber gelegentliche Formatierungsinkonsistenzen bei strukturierter Ausgabe. |
llama3.3:70b | 70B | Gut | Starke Gesamtleistung, erfordert erhebliche GPU-Ressourcen. Besser für Cloud-/Multi-GPU-Setups. |
mistral-small3.2 | 24B | Mittel | Nutzbar, aber weniger zuverlässiges Tool-Calling im Vergleich zu Qwen3. |
qwen2.5-coder:32b | 32B | Mittel | Gute Qualität, aber zu langsam für interaktive Nutzung auf einer einzelnen GPU. |
Cloud-LLM-Modelle: Bei Verwendung von OpenAI oder Anthropic liefern Modelle wie gpt-4o oder claude-sonnet-4-5-20250514 hervorragende Ergebnisse. Cloud-Modelle eliminieren GPU-Anforderungen vollständig und skalieren für jede Teamgröße.
Das Router-Modell (llama3.2:3b) klassifiziert eingehende Nachrichten und benötigt keine Tool-Calling-Fähigkeiten. Es läuft auf Ollama, unabhängig vom Agent-Modell-Backend.
Software-Anforderungen
| Entwicklung | Test / Abnahme / Produktion | |
|---|---|---|
| Laufzeit | Docker Engine 24+ & Docker Compose v2 | k3s (Lightweight Kubernetes) |
| Build | Docker (baut lokal) | Docker (für Image-Build) + kubectl |
| LLM | Ollama (lokal oder remote) — oder ein Cloud-LLM-API-Key | |
| Registry | Zugang zu ghcr.io/x-idra-systems-gmbh/reva (Zugangsdaten von X-idra) | |
Netzwerk-Anforderungen
- HTTPS-Endpunkt, öffentlich erreichbar vom Azure Bot Framework
- Ausgehender Zugriff auf
login.microsoftonline.comundsmba.trafficmanager.net - Zugriff auf Ihre Digital.ai Release-Instanz
- Zugriff auf Jira Cloud — falls gewünscht
2 Azure-Bot-Registrierung
Reva kommuniziert mit Microsoft Teams über das Azure Bot Framework.
2.1 App-Registrierung erstellen
- Azure Portal → Microsoft Entra ID → App-Registrierungen → Neue Registrierung
- Name:
Reva, Kontotyp: Einzelmandant - Zertifikate & Geheimnisse → Neuer geheimer Clientschlüssel
- Geheimniswert sofort kopieren — er wird nur einmal angezeigt
Notieren Sie: Anwendungs-ID, Verzeichnis-ID (Mandanten-ID) und das Clientgeheimnis.
2.2 Azure-Bot-Ressource erstellen
- Azure Bot → Erstellen, Tarif: F0, App-Typ: Einzelmandant
- Vorhandene App-Registrierung verwenden → App-ID eingeben
- Datenresidenz: Lokal (westeurope)
2.3 Messaging-Endpunkt
https://ihre-domain.example.com/api/messages
2.4 Teams-Kanal aktivieren
Kanäle → Microsoft Teams (Commercial) → Übernehmen
3 Download & Authentifizierung
3.1 Deployment-Paket entpacken
Laden Sie das von X-idra bereitgestellte Deployment-Paket herunter und entpacken Sie es:
tar xzf reva-1.0.4.tar.gz
cd reva-1.0.4
3.2 Container-Registry authentifizieren
Melden Sie sich mit den von X-idra bereitgestellten Zugangsdaten an der GitHub Container Registry an:
echo "$GHCR_TOKEN" | docker login ghcr.io -u "$GHCR_USER" --password-stdin
3.3 Reva-Image herunterladen
docker compose pull
Pinnen Sie die Version in Ihrer .env-Datei: REVA_VERSION=1.0.4. Die docker-compose.yml verwendet diese Variable für den Image-Tag.
4 Secrets generieren
Alle sensiblen Zugangsdaten werden als Dateien in secrets/ gespeichert. Sowohl Docker Compose als auch Kubernetes verwenden dieselben Dateien.
./bin/generate-secrets.sh
Das Skript generiert automatisch ein PostgreSQL-Passwort, ein Admin-Passwort, SSL-Zertifikate (selbstsignierte CA + Server-Zertifikat), einen Webhook-Secret und eine Datenbank-URL. Anschließend werden interaktive Eingaben für externe Zugangsdaten abgefragt:
| Secret-Datei | Beschreibung | Quelle |
|---|---|---|
reva_microsoft_app_password | Azure-App-Clientgeheimnis | Schritt 2.1 |
reva_release_password | Digital.ai Release Passwort | Release-Admin (Basic Auth) |
reva_release_token | Digital.ai Release API-Token | Release-Admin (Token Auth) |
reva_ldap_bind_password | LDAP-Bind-Passwort | LDAP-Administrator |
reva_jira_token | Jira Cloud API-Token | Atlassian API-Tokens |
5 Umgebung konfigurieren
cp .env.example .env
Erforderliche Einstellungen
| Variable | Beschreibung | Beispiel |
|---|---|---|
OLLAMA_URL | Ollama-API-Endpunkt | http://localhost:11434 |
REVA_MICROSOFT_APP_ID | Azure-App-ID | d57d6dd5-4399-... |
REVA_MICROSOFT_APP_TENANT_ID | Azure-Mandanten-ID | 847e08d2-a338-... |
REVA_RELEASE_BASE_URL | Digital.ai Release API-URL | http://release:5516 |
REVA_RELEASE_AUTH_TYPE | basic oder token | token |
LLM-Modell-Setup
ollama pull llama3.2:3b # Router (schnell, klein)
ollama pull qwen3:14b # Agent (Tool-Calling, mehrsprachig)
ollama pull nomic-embed-text # Embeddings (für sitzungsübergreifendes Gedächtnis)
Setzen Sie AGENT_MODEL nicht in der .env. Das Agent-Modell wird in config/agent_roles.yaml konfiguriert.
Cloud-LLM-Anbieter (Alternative)
REVA_OPENAI_API_KEY=sk-... # OpenAI
REVA_ANTHROPIC_API_KEY=sk-ant-... # Anthropic Claude
6 Bereitstellung
Wählen Sie Ihre Zielumgebung:
Docker Compose (Entwicklung & Evaluierung)
Der schnellste Weg, Reva zum Laufen zu bringen. MCP-Server werden als Docker-Container über den Docker-Socket gestartet.
docker compose up -d
Pinnen Sie die Version in Ihrer .env-Datei: REVA_VERSION=1.0.4
docker compose ps # Alle Services sollten "Up (healthy)" zeigen
Docker Compose bindet den Docker-Socket (/var/run/docker.sock) ein, um MCP-Server-Container zu starten. Dieser Ansatz ist einfach, aber für Produktions-Kubernetes nicht geeignet.
Reverse Proxy (TLS)
backend reva
server reva 127.0.0.1:3978 check
Datenbank-Backup
./bin/backup-db.sh # Manuell
0 2 * * * /pfad/zu/reva/bin/backup-db.sh # Crontab
Kubernetes (Test / Abnahme / Produktion)
Produktionsreife Bereitstellung auf k3s. MCP-Server laufen als Sidecar-Container im selben Pod mit SSE-Transport — kein Docker-Socket erforderlich.
6.1 k3s installieren
# k3s installieren (Single-Node, inkl. Traefik Ingress)
curl -sfL https://get.k3s.io | sh -
# Kubeconfig einrichten
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
kubectl get nodes
k3s benötigt nur ~512 MB RAM Overhead und bringt Traefik als Standard-Ingress-Controller mit.
6.2 Mit Deploy-Skript bereitstellen
# Vollständiges Deployment
./bin/k8s-deploy.sh
# Oder schrittweise:
./bin/k8s-deploy.sh --build-only # Image bauen und importieren
./bin/k8s-deploy.sh --secrets # Kubernetes-Secrets erstellen
./bin/k8s-deploy.sh --apply-only # Nur Manifeste anwenden
Architektur
Sicherheitshärtung: Sowohl Docker-Compose- als auch Kubernetes-Deployments beinhalten PostgreSQL-Benutzereinschränkung (App-Benutzer ohne Superuser-Rechte), PostgreSQL-SSL-Verschlüsselung und Secrets-Management über Docker-Secrets / K8s-Secrets. Siehe docs/security-hardening.md für die vollständige Härtungsanleitung.
Hauptunterschied zu Docker Compose: MCP-Server laufen als Sidecar-Container im selben Pod und kommunizieren über SSE auf localhost statt Docker-stdio.
6.3 Deployment prüfen
kubectl get pods -n reva
# Erwartet: 3/3 READY für reva, 1/1 für postgres und redis
6.4 Betrieb
# Logs anzeigen
kubectl logs -n reva -l app=reva -c reva -f # App
kubectl logs -n reva -l app=reva -c release-mcp -f # Release MCP
kubectl logs -n reva -l app=reva -c jira-mcp -f # Jira MCP
# Neustart
kubectl rollout restart deployment/reva -n reva
# Manuelles Datenbank-Backup
kubectl create job --from=cronjob/db-backup db-backup-manual -n reva
# Rollback auf vorherige Version
kubectl rollout undo deployment/reva -n reva
6.5 Ingress & TLS
TLS ist standardmäßig über den Traefik-websecure-Entrypoint aktiviert. Das Ingress-Manifest leitet HTTP automatisch auf HTTPS um.
# Selbstsigniertes TLS-Zertifikat generieren
./bin/generate-k8s-tls.sh
# Oder cert-manager für Produktion
# cert-manager.io/cluster-issuer: letsencrypt-prod
7 Teams-App Sideloading
7.1 App-Paket vorbereiten
Führen Sie das Manifest-Konfigurationsskript aus. Es fragt nach Ihrer Azure App ID und Bot-Endpunkt-Domain und erstellt das Teams-App-Paket:
./bin/configure-manifest.sh
Sie müssen nur zwei Werte angeben:
- Azure App ID — aus Schritt 2.1 (wird für
idundbotIdverwendet) - Bot-Endpunkt-Domain — z. B.
revaapi.example.com
Der Entwickler-Abschnitt (Firmenname, URLs) bleibt X-idra Systems GmbH.
Manuelle Alternative: appPackage/manifest.json direkt bearbeiten — {{AZURE_APP_ID}} und {{BOT_DOMAIN}} ersetzen, dann: cd appPackage && zip ../reva-teams-app.zip manifest.json color.png outline.png
7.2 Benutzerdefinierte Apps aktivieren
Teams Admin Center → Einrichtungsrichtlinien → Benutzerdefinierte Apps hochladen aktivieren.
7.3 App sideloaden
- Teams → Apps → Apps verwalten → App hochladen
- Benutzerdefinierte App hochladen →
reva-teams-app.zip - Hinzufügen
8 Installation prüfen
Health Check
curl http://localhost:3978/api/health
kubectl exec -n reva deploy/reva -c reva -- \
python -c "import urllib.request; print(urllib.request.urlopen('http://localhost:8000/api/health').read().decode())"
Erwartete Antwort:
{
"status": "ok",
"adapter_initialized": true,
"db": true,
"mcp": {
"release": { "connected": true, "tools": 38 },
"jira": { "connected": true, "tools": 29 }
}
}
Funktionstest
- „Hallo“ — Reva sollte Sie begrüßen
- „Zeige alle aktiven Releases“ — Ergebnisse aus Release
- „Mein Dashboard“ — persönliche Release-Übersicht
9 Optionale Integrationen
Jira Cloud
REVA_JIRA_URL=https://ihrorg.atlassian.net
REVA_JIRA_USERNAME=ihre-email@firma.com
LDAP-Gruppenauflösung
REVA_LDAP_URL=ldap://ldap.firma.de:389
REVA_LDAP_BIND_DN=cn=reva,ou=services,dc=firma,dc=de
REVA_LDAP_GROUP_BASE=ou=groups,dc=firma,dc=de
Release-Webhook-Benachrichtigungen
Kopieren Sie plugins/xlr-reva-notify-plugin-1.0.4.jar in das Plugin-Verzeichnis Ihres Digital.ai Release Servers und starten Sie Release neu. Webhook-Ziel konfigurieren:
https://ihre-domain.example.com/api/notify
Autonome Überwachung
REVA_MONITOR_ENABLED=true
REVA_MONITOR_INTERVAL=300
REVA_MONITOR_OVERDUE_THRESHOLD_HOURS=24
REVA_MONITOR_STALE_APPROVAL_HOURS=48
Benutzer-Autorisierung
REVA_AUTH_ENABLED=true
REVA_AUTH_USER_MAP=Name1=releaseUser1,Name2=releaseUser2
Sitzungsübergreifendes Gedächtnis
Reva kann Benutzerpräferenzen und Kontext über Gespräche hinweg speichern. Erinnerungen werden pro Benutzer mit semantischer Deduplizierung und automatischer Bereinigung gespeichert.
MEMORY_ENABLED=true
MEMORY_EXTRACTION_ENABLED=true
Benötigt das Embedding-Modell nomic-embed-text und pgvector (im Standard-PostgreSQL-Image enthalten).
DSGVO: Benutzer können zeige Erinnerungen eingeben, um gespeicherte Erinnerungen anzuzeigen, und vergiss Erinnerungen, um alle zu löschen. Erinnerungen werden mit Audit-Trail soft-deleted.
10 Fehlerbehebung
Image kann nicht geladen werden
Falls docker compose pull mit einem Authentifizierungsfehler fehlschlägt:
- Anmeldung prüfen:
docker login ghcr.io - Sicherstellen, dass Ihr
GHCR_TOKENnicht abgelaufen ist REVA_VERSIONin.envauf eine veröffentlichte Version prüfen
Health Check gibt 503 zurück
docker compose logs reva | grep -i "mcp\|error"
kubectl logs -n reva -l app=reva -c reva | grep -i "mcp\|error"
kubectl logs -n reva -l app=reva -c release-mcp
kubectl logs -n reva -l app=reva -c jira-mcp
Teams-Nachrichten kommen nicht an
- Messaging-Endpunkt in Azure prüfen
- HTTPS-Terminierung und Weiterleitung prüfen
REVA_MICROSOFT_APP_IDundREVA_MICROSOFT_APP_TENANT_IDgesetzt?- Logs auf JWT-Validierungsfehler prüfen
MCP-Container starten nicht (Docker Compose)
docker ps
docker pull xebialabsearlyaccess/dai-release-mcp:25.3.1-beta.212
docker pull ghcr.io/sooperset/mcp-atlassian:0.21.0
MCP-Sidecars nicht bereit (Kubernetes)
kubectl describe pod -n reva -l app=reva
kubectl get configmap -n reva
LLM-Antworten sind langsam
- Ollama auf GPU-Maschine?
OLLAMA_NUM_PARALLELnicht > 1 bei < 24 GB VRAM- Agent-Modell in
config/agent_roles.yaml, nicht in.env
Hilfe
Nächste Schritte
Installation abgeschlossen? So geht es weiter:
- Erste Schritte — Die ersten 10 Minuten mit Reva: Beispielabfragen, Tipps und Fehlerbehebung
- Kompatibilitätsmatrix — Unterstützte Versionen von Release, Jira, Kubernetes, Docker, Ollama und GPUs
- Monitoring einrichten — Prometheus + Grafana-Dashboard für Produktionsüberwachung
- Kapazitätsplanung — GPU-Dimensionierung, Benutzer pro Instanz und Skalierungsempfehlungen
- Upgrade-Anleitung — Schritt-für-Schritt-Upgrades und Rollback-Verfahren
- Support & SLA — Support-Stufen, Reaktionszeiten und Eskalationsprozess