VoraussetzungenRequirements

Folgendes muss auf dem Host-System vorhanden sein:The following must be present on the host system:

SoftwareMindestversionMinimum versionPrüfenCheck
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 Desktop (Windows/Mac) and Docker Engine (Linux) are both compatible. On Linux the official Docker repository is recommended over the distribution's package sources.

Docker auf Debian/Ubuntu installieren (falls noch nicht vorhanden)Install Docker on Debian/Ubuntu (if not already installed)

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

🚀 Quick Start

In zwei Schritten startklar:Up and running in two steps:

1
Herunterladen & StartenDownload & Start
Lädt die docker-compose.yml herunter und startet Jarvis. Das Docker-Image (~600 MB) wird beim ersten Mal automatisch gezogen.Downloads the docker-compose.yml and starts Jarvis. The Docker image (~600 MB) is pulled automatically on first run.
curl -fsSL https://jarvis-ai.info/downloads/docker-compose.yml -o docker-compose.yml docker compose up -d
Danach im Browser öffnen:Then open in your browser:
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.On first visit a SSL warning appears (self-signed certificate). Simply click "Proceed anyway" – this is normal and safe on a local network.
2
Update auf neueste VersionUpdate to latest version
Holt das neueste Image und startet den Container neu. Alle Daten (Settings, Memory, WhatsApp-Session) bleiben erhalten.Pulls the latest image and restarts the container. All data (settings, memory, WhatsApp session) is preserved.
docker compose pull && docker compose down && docker compose up -d

⚙️ KonfigurationConfiguration

Environment-VariablenEnvironment Variables

Alle Einstellungen werden über environment: in der docker-compose.yml gesteuert:All settings are controlled via environment: in the docker-compose.yml:

VariableStandardDefaultBeschreibungDescription
JARVIS_DOCKER1Aktiviert Docker-Modus (ENV-Auth statt Linux-PAM). Nicht ändern.Enables Docker mode (ENV auth instead of Linux-PAM). Do not change.
JARVIS_PASSWORDjarvisPasswort für den Web-Login (Benutzername ist immer jarvis)Password for web login (username is always jarvis)
GEMINI_API_KEYGoogle Gemini API-Key (alternativ im Web-UI eintragen)Google Gemini API key (or enter via Web-UI)
ANTHROPIC_API_KEYAnthropic Claude API-KeyAnthropic Claude API key
OPENROUTER_API_KEYOpenRouter API-Key (Zugang zu vielen Modellen)OpenRouter API key (access to many models)
OPENAI_API_KEYOpenAI-kompatibler Key (auch für lokale Modelle via Ollama)OpenAI-compatible key (also for local models 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.API keys can also be entered after startup in the Web-UI: Settings (⚙) → LLM Profiles → Add profile. No restart required.

Volumes (persistente Daten)Volumes (persistent data)

Jarvis speichert folgende Daten dauerhaft:Jarvis stores the following data persistently:

VolumePfad im ContainerPath in containerInhaltContents
jarvis-data/app/dataMemory, Wissensdatenbank, Logs – bitte regelmäßig sichernMemory, knowledge base, logs – please back up regularly
jarvis-certs/app/certsSSL-Zertifikate (werden beim ersten Start automatisch erstellt)SSL certificates (created automatically on first start)
wa-session/app/services/whatsapp-bridge/authWhatsApp-Session (Baileys Auth-Daten, bleibt bei Updates erhalten)WhatsApp session (Baileys auth data, preserved across updates)
⚠️
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 /dataRunning docker compose down -v will delete volumes. Without -v they are preserved. For backups: docker run --rm -v jarvis-data:/data -v $(pwd):/backup alpine tar czf /backup/jarvis-backup.tar.gz /data

Port-MappingPort Mapping

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

Anderen Port verwenden (z.B. wenn 443 belegt ist):Use a different port (e.g. if 443 is already in use):

ports: - "9443:443" # Jarvis accessible on port 9443 - "9080:6080" # VNC accessible on port 9080

Hinter einem Reverse Proxy (nginx / Traefik)Behind a reverse proxy (nginx / Traefik)

Falls Jarvis hinter einem Reverse Proxy laufen soll, der SSL terminiert:If Jarvis should run behind a reverse proxy that terminates SSL:

# In docker-compose.yml: disable SSL inside the container environment: JARVIS_DOCKER: "1" JARVIS_NO_SSL: "1" # coming in a future release # nginx example 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 ändernChange Password

Das Passwort wird über die ENV-Variable JARVIS_PASSWORD gesetzt. Änderung:The password is set via the ENV variable JARVIS_PASSWORD. To change it:

# 1. Edit docker-compose.yml environment: JARVIS_DOCKER: "1" JARVIS_PASSWORD: "my-new-password" # 2. Restart the container docker compose up -d --force-recreate
⚠️
Das Passwort steht als Klartext in der docker-compose.yml. Für Produktionsumgebungen empfiehlt sich eine .env-Datei:The password is stored as plain text in docker-compose.yml. For production environments a .env file is recommended:

Sicherer: .env-Datei verwendenMore secure: use a .env file

# Create .env file (loaded automatically by docker compose) echo "JARVIS_PASSWORD=my-secure-password" > .env echo "GEMINI_API_KEY=AIza..." >> .env # Then in docker-compose.yml: environment: JARVIS_DOCKER: "1" JARVIS_PASSWORD: "${JARVIS_PASSWORD}" GEMINI_API_KEY: "${GEMINI_API_KEY}"

🤖 LLM API-Key einrichtenSet up LLM API Key

Jarvis unterstützt mehrere KI-Anbieter. Der einfachste Weg ist das Web-UI:Jarvis supports multiple AI providers. The easiest way is through the Web-UI:

1
Web-UI öffnen und einloggenOpen Web-UI and log in
https://<server-ip> → Login: jarvis / jarvis
2
Einstellungen → LLM-ProfileSettings → LLM Profiles
Zahnrad-Icon (⚙) oben rechts → Tab "LLM-Profile" → Profil hinzufügenGear icon (⚙) top right → Tab "LLM Profiles" → Add profile
3
Anbieter & Key auswählenSelect provider & key
Unterstützte Anbieter und empfohlene Einstiegsmodelle:Supported providers and recommended starter models:
AnbieterProviderModell (Empfehlung)Model (recommended)KostenCost
Google Geminigemini-2.0-flashKostenlos (mit Limits)Free (with limits)
OpenRoutergoogle/gemini-flash-1.5Pay-per-use, sehr günstigPay-per-use, very affordable
Anthropicclaude-sonnet-4-6Pay-per-use
OpenAIgpt-4o-miniPay-per-use
Ollama (lokal)Ollama (local)llama3.2, mistral, ...KostenlosFree

Ollama (lokale KI, kein API-Key nötig)Ollama (local AI, no API key needed)

Wenn Ollama auf dem gleichen Host läuft:If Ollama runs on the same host:

# In Jarvis Web-UI → LLM Profiles: Provider: OpenAI-compatible API-URL: http://host.docker.internal:11434/v1 # Docker → Host API-Key: ollama # any string Model: 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.On Linux host.docker.internal is only available from Docker 20.10. Alternative: use network_mode: host in docker-compose.yml and then http://localhost:11434/v1.

💬 WhatsApp-IntegrationWhatsApp Integration

Die WhatsApp-Bridge (Node.js + Baileys) ist im Jarvis-Container integriert und startet automatisch mit. Es ist kein separater Container nötig.The WhatsApp bridge (Node.js + Baileys) is integrated in the Jarvis container and starts automatically. No separate container is needed.

WhatsApp ist sofort einsatzbereit – einfach den WhatsApp-Skill in den Einstellungen aktivieren und den QR-Code scannen.WhatsApp is ready to use immediately – just enable the WhatsApp skill in settings and scan the QR code.

WhatsApp verbinden (QR-Code scannen)Connect WhatsApp (scan QR code)

1
WhatsApp-Skill aktivierenEnable WhatsApp skill
Im Web-UI: Einstellungen (⚙) → Skills → WhatsApp → HinzufügenIn the Web-UI: Settings (⚙) → Skills → WhatsApp → Add
2
QR-Code scannenScan QR code
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.The QR code appears in the WhatsApp tab. In the WhatsApp app on your phone: Settings → Linked Devices → Link a Device → scan QR code.
3
Fertig!Done!
Die Session bleibt im Volume wa-session dauerhaft erhalten – auch bei Container-Neustarts und Updates.The session is permanently stored in the wa-session volume – even across container restarts and updates.

Bridge-Status prüfenCheck bridge status

# Show bridge logs inside the container docker compose logs jarvis | grep "WA-Bridge" # Query status via API docker exec jarvis curl -s http://127.0.0.1:3001/status

🔄 Updates

Auf die neueste Version aktualisieren:Update to the latest version:

# Pull new image and restart container docker compose pull docker compose up -d # Remove old image (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.All volumes (jarvis-data, jarvis-certs, wa-session) are preserved across updates – settings, memory, knowledge base and WhatsApp session are not lost.

🛠️ Nützliche BefehleUseful Commands

BefehlCommandBeschreibungDescription
docker compose up -dStarten (im Hintergrund)Start (in background)
docker compose downStoppen (Volumes bleiben erhalten)Stop (volumes preserved)
docker compose restart jarvisNur Jarvis neu startenRestart Jarvis only
docker compose logs -f jarvisLive-Logs von JarvisLive logs from Jarvis
docker compose logs jarvis | grep WA-BridgeWhatsApp-Bridge-LogsWhatsApp bridge logs
docker compose psStatus aller ContainerStatus of all containers
docker compose pull && docker compose up -dUpdate auf neueste VersionUpdate to latest version
docker exec -it jarvis bashShell im Container öffnenOpen shell inside container
docker stats jarvisCPU/RAM-Verbrauch liveLive CPU/RAM usage

Backup der DatenData backup

# Backup data volume docker run --rm \ -v jarvis-data:/data \ -v $(pwd):/backup \ alpine tar czf /backup/jarvis-backup-$(date +%Y%m%d).tar.gz /data # Restore 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 sofortContainer won't start / crashes immediately

# Find the cause of the error in the logs docker compose logs jarvis | tail -50

Web-UI nicht erreichbarWeb-UI not reachable

# Check if the container is running docker compose ps # Check if ports are bound ss -tlnp | grep -E "443|6080" # Open firewall ports (ufw) ufw allow 443/tcp ufw allow 80/tcp ufw allow 6080/tcp

SSL-Zertifikat wird nicht akzeptiertSSL certificate not accepted

ℹ️
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.Jarvis uses a self-signed certificate. A browser warning on first visit is normal. In Chrome: click "Advanced" → "Proceed to ...". For real certificates (Let's Encrypt) use a reverse proxy.

VNC (noVNC) zeigt schwarzen BildschirmVNC (noVNC) shows black screen

# Check Xvfb/x11vnc status inside the container docker exec jarvis ps aux | grep -E "Xvfb|x11vnc|xfce" # Restart the container docker compose restart jarvis

Zu wenig RAM / Container wird gekillt (OOM)Not enough RAM / container is killed (OOM)

KomponenteComponentRAM-BedarfRAM required
Jarvis (Minimum)Jarvis (minimum)~512 MB
Jarvis (empfohlen)Jarvis (recommended)~1 GB
+ WhatsApp Bridge (integriert)+ WhatsApp Bridge (integrated)+ ~100 MB
+ Browser-Automation+ Browser automation+ ~1 GB

Portkonflikt – Port 443 bereits belegtPort conflict – port 443 already in use

# Which process is using port 443? ss -tlnp | grep 443 # Set a different host port in docker-compose.yml: ports: - "8443:443" # Jarvis then accessible on port 8443