Vollständige Anleitung zum Einrichten von Jarvis in einer bestehenden Docker-Umgebung – von der ersten Installation bis zur WhatsApp-Integration.
Folgendes muss auf dem Host-System vorhanden sein:
| Software | Mindestversion | Prüfen |
|---|---|---|
| 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:
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:
| Variable | Standard | Beschreibung |
|---|---|---|
| JARVIS_DOCKER | 1 | Aktiviert Docker-Modus (ENV-Auth statt Linux-PAM). Nicht ändern. |
| JARVIS_PASSWORD | jarvis | Passwort für den Web-Login (Benutzername ist immer jarvis) |
| GEMINI_API_KEY | – | Google Gemini API-Key (alternativ im Web-UI eintragen) |
| ANTHROPIC_API_KEY | – | Anthropic Claude API-Key |
| OPENROUTER_API_KEY | – | OpenRouter API-Key (Zugang zu vielen Modellen) |
| OPENAI_API_KEY | – | OpenAI-kompatibler Key (auch für lokale Modelle via Ollama) |
Jarvis speichert folgende Daten dauerhaft:
| Volume | Pfad im Container | Inhalt |
|---|---|---|
| jarvis-data | /app/data | Memory, Wissensdatenbank, Logs – bitte regelmäßig sichern |
| jarvis-certs | /app/certs | SSL-Zertifikate (werden beim ersten Start automatisch erstellt) |
| wa-session | /app/services/whatsapp-bridge/auth | WhatsApp-Session (Baileys Auth-Daten, bleibt bei Updates erhalten) |
| Host-Port | Container-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):
ports:
- "9443:443" # Jarvis dann auf Port 9443 erreichbar
- "9080:6080" # VNC dann auf Port 9080
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;
}
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
# .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}"
Jarvis unterstützt mehrere KI-Anbieter. Der einfachste Weg ist das Web-UI:
| Anbieter | Modell (Empfehlung) | Kosten |
|---|---|---|
| Google Gemini | gemini-2.0-flash | Kostenlos (mit Limits) |
| OpenRouter | google/gemini-flash-1.5 | Pay-per-use, sehr günstig |
| Anthropic | claude-sonnet-4-6 | Pay-per-use |
| OpenAI | gpt-4o-mini | Pay-per-use |
| Ollama (lokal) | llama3.2, mistral, ... | Kostenlos |
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
Die WhatsApp-Bridge (Node.js + Baileys) ist im Jarvis-Container integriert und startet automatisch mit. Es ist kein separater Container nötig.
# 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
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
| Befehl | Beschreibung |
|---|---|
| docker compose up -d | Starten (im Hintergrund) |
| docker compose down | Stoppen (Volumes bleiben erhalten) |
| docker compose restart jarvis | Nur Jarvis neu starten |
| docker compose logs -f jarvis | Live-Logs von Jarvis |
| docker compose logs jarvis | grep WA-Bridge | WhatsApp-Bridge-Logs |
| docker compose ps | Status aller Container |
| docker compose pull && docker compose up -d | Update auf neueste Version |
| docker exec -it jarvis bash | Shell im Container öffnen |
| docker stats jarvis | CPU/RAM-Verbrauch live |
# 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 /
# Fehlerursache in den Logs suchen
docker compose logs jarvis | tail -50
# 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
# Xvfb/x11vnc-Status im Container prüfen
docker exec jarvis ps aux | grep -E "Xvfb|x11vnc|xfce"
# Container neu starten
docker compose restart jarvis
| Komponente | RAM-Bedarf |
|---|---|
| Jarvis (Minimum) | ~512 MB |
| Jarvis (empfohlen) | ~1 GB |
| + WhatsApp Bridge (integriert) | + ~100 MB |
| + Browser-Automation | + ~1 GB |
# 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