Voraussetzungen

Folgendes muss auf dem Host-System vorhanden sein:

SoftwareMindestversionPrüfen
Docker Engine20.10+docker --version
Docker Composev2.0+ (Plugin)docker compose version
💡
Docker Desktop (Windows/Mac) und Docker Engine (Linux) sind beide kompatibel. Auf Linux empfiehlt sich das offizielle Docker-Repository statt der Paketquellen der Distribution.

Docker auf Debian/Ubuntu installieren (falls noch nicht vorhanden)

curl -fsSL https://get.docker.com | sh systemctl enable --now docker

🚀 Quick Start

In zwei Schritten startklar:

1
Herunterladen & Starten
Lädt die docker-compose.yml herunter und startet Jarvis. Das Docker-Image (~600 MB) wird beim ersten Mal automatisch gezogen.
curl -fsSL https://jarvis-ai.info/downloads/docker-compose.yml -o docker-compose.yml docker compose up -d
Danach im Browser öffnen:
https://<server-ip> # Web-UI (HTTPS) https://<server-ip>:6080 # VNC Desktop (HTTPS) Login: jarvis / jarvis
🔐
Beim ersten Aufruf erscheint eine SSL-Warnung (selbstsigniertes Zertifikat). Einfach „Trotzdem fortfahren" klicken – das ist normal und sicher im lokalen Netz.
2
Update auf neueste Version
Holt das neueste Image und startet den Container neu. Alle Daten (Settings, Memory, WhatsApp-Session) bleiben erhalten.
docker compose pull && docker compose down && docker compose up -d

⚙️ Konfiguration

Environment-Variablen

Alle Einstellungen werden über environment: in der docker-compose.yml gesteuert:

VariableStandardBeschreibung
JARVIS_DOCKER1Aktiviert Docker-Modus (ENV-Auth statt Linux-PAM). Nicht ändern.
JARVIS_PASSWORDjarvisPasswort für den Web-Login (Benutzername ist immer jarvis)
GEMINI_API_KEYGoogle Gemini API-Key (alternativ im Web-UI eintragen)
ANTHROPIC_API_KEYAnthropic Claude API-Key
OPENROUTER_API_KEYOpenRouter API-Key (Zugang zu vielen Modellen)
OPENAI_API_KEYOpenAI-kompatibler Key (auch für lokale Modelle via Ollama)
ℹ️
API-Keys können auch nach dem Start im Web-UI eingetragen werden: Einstellungen (⚙) → LLM-Profile → Profil hinzufügen. Kein Neustart nötig.

Volumes (persistente Daten)

Jarvis speichert folgende Daten dauerhaft:

VolumePfad im ContainerInhalt
jarvis-data/app/dataMemory, Wissensdatenbank, Logs – bitte regelmäßig sichern
jarvis-certs/app/certsSSL-Zertifikate (werden beim ersten Start automatisch erstellt)
wa-session/app/services/whatsapp-bridge/authWhatsApp-Session (Baileys Auth-Daten, bleibt bei Updates erhalten)
⚠️
Beim docker compose down -v werden Volumes gelöscht. Ohne -v bleiben sie erhalten. Für Backups: docker run --rm -v jarvis-data:/data -v $(pwd):/backup alpine tar czf /backup/jarvis-backup.tar.gz /data

Port-Mapping

Host-PortContainer-PortService
443443Jarvis Web-UI (HTTPS/FastAPI)
8080HTTP → HTTPS Redirect
60806080noVNC Desktop (HTTPS/WebSocket)

Anderen Port verwenden (z.B. wenn 443 belegt ist):

ports: - "9443:443" # Jarvis dann auf Port 9443 erreichbar - "9080:6080" # VNC dann auf Port 9080

Hinter einem Reverse Proxy (nginx / Traefik)

Falls Jarvis hinter einem Reverse Proxy laufen soll, der SSL terminiert:

# In docker-compose.yml: SSL im Container deaktivieren environment: JARVIS_DOCKER: "1" JARVIS_NO_SSL: "1" # kommt in einem zukünftigen Release # nginx Beispiel-Config: location / { proxy_pass https://127.0.0.1:443; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; }

🔑 Passwort ändern

Das Passwort wird über die ENV-Variable JARVIS_PASSWORD gesetzt. Änderung:

# 1. docker-compose.yml bearbeiten environment: JARVIS_DOCKER: "1" JARVIS_PASSWORD: "mein-neues-passwort" # 2. Container neu starten docker compose up -d --force-recreate
⚠️
Das Passwort steht als Klartext in der docker-compose.yml. Für Produktionsumgebungen empfiehlt sich eine .env-Datei:

Sicherer: .env-Datei verwenden

# .env Datei erstellen (wird von docker compose automatisch geladen) echo "JARVIS_PASSWORD=mein-sicheres-passwort" > .env echo "GEMINI_API_KEY=AIza..." >> .env # In docker-compose.yml dann: environment: JARVIS_DOCKER: "1" JARVIS_PASSWORD: "${JARVIS_PASSWORD}" GEMINI_API_KEY: "${GEMINI_API_KEY}"

🤖 LLM API-Key einrichten

Jarvis unterstützt mehrere KI-Anbieter. Der einfachste Weg ist das Web-UI:

1
Web-UI öffnen und einloggen
https://<server-ip> → Login: jarvis / jarvis
2
Einstellungen → LLM-Profile
Zahnrad-Icon (⚙) oben rechts → Tab "LLM-Profile" → Profil hinzufügen
3
Anbieter & Key auswählen
Unterstützte Anbieter und empfohlene Einstiegsmodelle:
AnbieterModell (Empfehlung)Kosten
Google Geminigemini-2.0-flashKostenlos (mit Limits)
OpenRoutergoogle/gemini-flash-1.5Pay-per-use, sehr günstig
Anthropicclaude-sonnet-4-6Pay-per-use
OpenAIgpt-4o-miniPay-per-use
Ollama (lokal)llama3.2, mistral, ...Kostenlos

Ollama (lokale KI, kein API-Key nötig)

Wenn Ollama auf dem gleichen Host läuft:

# In Jarvis Web-UI → LLM-Profile: Anbieter: OpenAI-kompatibel API-URL: http://host.docker.internal:11434/v1 # Docker → Host API-Key: ollama # beliebiger String Modell: llama3.2
💡
Auf Linux ist host.docker.internal erst ab Docker 20.10 verfügbar. Alternative: network_mode: host in der docker-compose.yml, dann http://localhost:11434/v1 verwenden.

💬 WhatsApp-Integration

Die WhatsApp-Bridge (Node.js + Baileys) ist im Jarvis-Container integriert und startet automatisch mit. Es ist kein separater Container nötig.

WhatsApp ist sofort einsatzbereit – einfach den WhatsApp-Skill in den Einstellungen aktivieren und den QR-Code scannen.

WhatsApp verbinden (QR-Code scannen)

1
WhatsApp-Skill aktivieren
Im Web-UI: Einstellungen (⚙) → Skills → WhatsApp → Hinzufügen
2
QR-Code scannen
Im WhatsApp-Tab erscheint der QR-Code. In der WhatsApp-App auf dem Smartphone: Einstellungen → Verknüpfte Geräte → Gerät hinzufügen → QR-Code scannen.
3
Fertig!
Die Session bleibt im Volume wa-session dauerhaft erhalten – auch bei Container-Neustarts und Updates.

Bridge-Status prüfen

# Bridge-Logs im Container anzeigen docker compose logs jarvis | grep "WA-Bridge" # Status per API abfragen docker exec jarvis curl -s http://127.0.0.1:3001/status

🔄 Updates

Auf die neueste Version aktualisieren:

# Neues Image herunterladen und Container neu starten docker compose pull docker compose up -d # Altes Image aufräumen (optional) docker image prune -f
Alle Volumes (jarvis-data, jarvis-certs, wa-session) bleiben bei Updates erhalten – Einstellungen, Memory, Wissensdatenbank und WhatsApp-Session gehen nicht verloren.

🛠️ Nützliche Befehle

BefehlBeschreibung
docker compose up -dStarten (im Hintergrund)
docker compose downStoppen (Volumes bleiben erhalten)
docker compose restart jarvisNur Jarvis neu starten
docker compose logs -f jarvisLive-Logs von Jarvis
docker compose logs jarvis | grep WA-BridgeWhatsApp-Bridge-Logs
docker compose psStatus aller Container
docker compose pull && docker compose up -dUpdate auf neueste Version
docker exec -it jarvis bashShell im Container öffnen
docker stats jarvisCPU/RAM-Verbrauch live

Backup der Daten

# Daten-Volume sichern docker run --rm \ -v jarvis-data:/data \ -v $(pwd):/backup \ alpine tar czf /backup/jarvis-backup-$(date +%Y%m%d).tar.gz /data # Wiederherstellen docker run --rm \ -v jarvis-data:/data \ -v $(pwd):/backup \ alpine tar xzf /backup/jarvis-backup-20260101.tar.gz -C /

🔍 Troubleshooting

Container startet nicht / crasht sofort

# Fehlerursache in den Logs suchen docker compose logs jarvis | tail -50

Web-UI nicht erreichbar

# Prüfen ob der Container läuft docker compose ps # Prüfen ob Ports gebunden sind ss -tlnp | grep -E "443|6080" # Firewall-Ports freigeben (ufw) ufw allow 443/tcp ufw allow 80/tcp ufw allow 6080/tcp

SSL-Zertifikat wird nicht akzeptiert

ℹ️
Jarvis verwendet ein selbstsigniertes Zertifikat. Browser-Warnung beim ersten Aufruf ist normal. In Chrome: „Erweitert" → „Weiter zu ..." klicken. Für echte Zertifikate (Let's Encrypt) einen Reverse Proxy vorschalten.

VNC (noVNC) zeigt schwarzen Bildschirm

# Xvfb/x11vnc-Status im Container prüfen docker exec jarvis ps aux | grep -E "Xvfb|x11vnc|xfce" # Container neu starten docker compose restart jarvis

Zu wenig RAM / Container wird gekillt (OOM)

KomponenteRAM-Bedarf
Jarvis (Minimum)~512 MB
Jarvis (empfohlen)~1 GB
+ WhatsApp Bridge (integriert)+ ~100 MB
+ Browser-Automation+ ~1 GB

Portkonflikt – Port 443 bereits belegt

# Welcher Prozess nutzt Port 443? ss -tlnp | grep 443 # Anderen Host-Port in docker-compose.yml eintragen: ports: - "8443:443" # Jarvis dann auf Port 8443