Vollständige Anleitung zum Einrichten von Jarvis in einer bestehenden Docker-Umgebung – von der ersten Installation bis zur WhatsApp-Integration. Complete guide to setting up Jarvis in an existing Docker environment – from first installation to WhatsApp integration.
Folgendes muss auf dem Host-System vorhanden sein:The following must be present on the host system:
| Software | MindestversionMinimum version | PrüfenCheck |
|---|---|---|
| Docker Engine | 20.10+ | docker --version |
| Docker Compose | v2.0+ (Plugin) | docker compose version |
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
In zwei Schritten startklar:Up and running in two steps:
curl -fsSL https://jarvis-ai.info/downloads/docker-compose.yml -o docker-compose.yml
docker compose up -d
https://<server-ip> # Web-UI (HTTPS)
https://<server-ip>:6080 # VNC Desktop (HTTPS)
Login: jarvis / jarvis
docker compose pull && docker compose down && docker compose up -d
Alle Einstellungen werden über environment: in der docker-compose.yml gesteuert:All settings are controlled via environment: in the docker-compose.yml:
| Variable | StandardDefault | BeschreibungDescription |
|---|---|---|
| JARVIS_DOCKER | 1 | Aktiviert Docker-Modus (ENV-Auth statt Linux-PAM). Nicht ändern.Enables Docker mode (ENV auth instead of Linux-PAM). Do not change. |
| JARVIS_PASSWORD | jarvis | Passwort für den Web-Login (Benutzername ist immer jarvis)Password for web login (username is always jarvis) |
| GEMINI_API_KEY | – | Google Gemini API-Key (alternativ im Web-UI eintragen)Google Gemini API key (or enter via Web-UI) |
| ANTHROPIC_API_KEY | – | Anthropic Claude API-KeyAnthropic Claude API key |
| OPENROUTER_API_KEY | – | OpenRouter API-Key (Zugang zu vielen Modellen)OpenRouter API key (access to many models) |
| OPENAI_API_KEY | – | OpenAI-kompatibler Key (auch für lokale Modelle via Ollama)OpenAI-compatible key (also for local models via Ollama) |
Jarvis speichert folgende Daten dauerhaft:Jarvis stores the following data persistently:
| Volume | Pfad im ContainerPath in container | InhaltContents |
|---|---|---|
| jarvis-data | /app/data | Memory, Wissensdatenbank, Logs – bitte regelmäßig sichernMemory, knowledge base, logs – please back up regularly |
| jarvis-certs | /app/certs | SSL-Zertifikate (werden beim ersten Start automatisch erstellt)SSL certificates (created automatically on first start) |
| wa-session | /app/services/whatsapp-bridge/auth | WhatsApp-Session (Baileys Auth-Daten, bleibt bei Updates erhalten)WhatsApp session (Baileys auth data, preserved across updates) |
| Host-PortHost Port | Container-PortContainer Port | Service |
|---|---|---|
| 443 | 443 | Jarvis Web-UI (HTTPS/FastAPI) |
| 80 | 80 | HTTP → HTTPS Redirect |
| 6080 | 6080 | noVNC 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
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;
}
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
# 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}"
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:
| AnbieterProvider | Modell (Empfehlung)Model (recommended) | KostenCost |
|---|---|---|
| Google Gemini | gemini-2.0-flash | Kostenlos (mit Limits)Free (with limits) |
| OpenRouter | google/gemini-flash-1.5 | Pay-per-use, sehr günstigPay-per-use, very affordable |
| Anthropic | claude-sonnet-4-6 | Pay-per-use |
| OpenAI | gpt-4o-mini | Pay-per-use |
| Ollama (lokal)Ollama (local) | llama3.2, mistral, ... | KostenlosFree |
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
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.
# 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
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
| BefehlCommand | BeschreibungDescription |
|---|---|
| docker compose up -d | Starten (im Hintergrund)Start (in background) |
| docker compose down | Stoppen (Volumes bleiben erhalten)Stop (volumes preserved) |
| docker compose restart jarvis | Nur Jarvis neu startenRestart Jarvis only |
| docker compose logs -f jarvis | Live-Logs von JarvisLive logs from Jarvis |
| docker compose logs jarvis | grep WA-Bridge | WhatsApp-Bridge-LogsWhatsApp bridge logs |
| docker compose ps | Status aller ContainerStatus of all containers |
| docker compose pull && docker compose up -d | Update auf neueste VersionUpdate to latest version |
| docker exec -it jarvis bash | Shell im Container öffnenOpen shell inside container |
| docker stats jarvis | CPU/RAM-Verbrauch liveLive CPU/RAM usage |
# 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 /
# Find the cause of the error in the logs
docker compose logs jarvis | tail -50
# 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
# Check Xvfb/x11vnc status inside the container
docker exec jarvis ps aux | grep -E "Xvfb|x11vnc|xfce"
# Restart the container
docker compose restart jarvis
| KomponenteComponent | RAM-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 |
# 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