Dieses Runbook richtet sich an Teams, die auf einem gemieteten Remote-Mac wiederholbare Batch-Inferenz mit Ollama betreiben und OpenClaw parallel für Agenten und Automatisierung nutzen. Sie erhalten eine klare Topologie (Ports 11434 und 18789), Installationshinweise, ein API-Routing ohne unnötige Exposition, eine Bash-Warteschlange mit hartem Parallelitätsdeckel sowie Ressourcen- und Retry-Strategien, damit Nachtjobs nicht an sporadischer Überlast scheitern. Kontext und SKUs: Startseite, Blog-Übersicht, Preise und Hilfe-Center—alles ohne Anmeldung.
Ziel und empfohlene Topologie
Batch-Läufe brechen oft, wenn Parallelität den verfügbaren Unified Memory überzieht, Modelle ständig nachladen oder Clients beim ersten Timeout abbrechen. Auf einem Remote-Mac empfehlen wir eine strikte Trennung:
- Ollama — nur Inferenz, Listener
127.0.0.1:11434. - OpenClaw Gateway — Control-Plane und Tools, typisch
127.0.0.1:18789(siehe offizielle Docker- bzw. CLI-Dokumentation). - Kante — ein TLS-Hostname im VPN oder SSH
-Lvom Laptop, statt Rohports ins Internet. - Queue-Worker — begrenzt gleichzeitige Jobs und implementiert Backoff.
Typische Fehlermuster (und warum Schichten helfen)
- VRAM-Thrash — zu viele parallele
/api/generate-Aufrufe; Symptom: Swap-Druck und Minutenlatenz. Gegenmittel:OLLAMA_NUM_PARALLELund niedrigeresMAX_JOBSin der Queue. - Unkontrollierte Exposition — Ollama oder Gateway öffentlich erreichbar; Risiko Missbrauch und Datenabfluss. Gegenmittel: Loopback, VPN, Proxy mit Auth oder ausschließlich SSH-Tunnel.
- Fehlende Entkopplung — Agent-Bursts von OpenClaw kollidieren mit Batch-Spitzen. Gegenmittel: Cron-Fenster versetzen, Limits auf allen drei Ebenen (Server, Proxy, Skript).
Entscheidungsmatrix: wo begrenzen?
| Schicht | Mechanismus | Zweck |
|---|---|---|
| Ollama-Server | OLLAMA_NUM_PARALLEL, optional OLLAMA_MAX_LOADED_MODELS |
Serverseitige Obergrenze gleichzeitiger Inferenzpfade; passt zu Metal und RAM. |
| Reverse-Proxy | limit_req (nginx) oder Caddy Rate-Limit |
Client-Bursts am Edge glätten, bevor sie Ollama erreichen. |
| Batch-Skript | MAX_JOBS, Job-Pool, curl --max-time |
Deterministische Obergrenze „in flight“; verhindert unkontrolliertes Forken. |
Ollama auf dem Remote-Mac installieren
Modell ziehen und Loopback beibehalten, sofern Sie nicht bewusst OLLAMA_HOST setzen:
curl -fsSL https://ollama.com/install.sh | sh
ollama pull llama3.2
Für reboot-feste Einstellungen: OLLAMA_NUM_PARALLEL in Profil oder launchd-Plist. Smoke-Test: curl -fsS http://127.0.0.1:11434/api/tags. OpenAI-kompatible Clients nutzen /v1/chat/completions auf demselben Port.
OpenClaw-Gateway: Kompaktpunkte für Co-Hosting
Zwei unterstützte Wege: globales CLI (Node 24 oder 22.16+) oder Docker mit ./scripts/docker/setup.sh im Klon von openclaw/openclaw. Typisch auf dem Mac: npm install -g openclaw@latest, openclaw onboard --install-daemon, openclaw gateway --port 18789 --verbose. Ollama nativ lassen für Metal; OpenClaw-Tools dürfen 127.0.0.1:11434 aufrufen. Health: curl -fsS http://127.0.0.1:18789/healthz. Vertiefung: OpenClaw Docker, Härtung & Remote-Mac.
API-Routing: ein Hostname, zwei Upstreams
Für VPN-Clients mit HTTPS auf beide Stacks: TLS einmal terminieren und per Pfad splitten (Caddy-Konzept):
inference.internal.example.com {
route /v1/* {
reverse_proxy 127.0.0.1:11434
}
route /openclaw/* {
reverse_proxy 127.0.0.1:18789
}
}
Ohne öffentlichen Hostnamen genügen ssh -L für 11434 und 18789—die Firewall bleibt zu.
Routing auf einen Blick
| Traffic | Ziel | Begründung |
|---|---|---|
Batch /api/generate oder OpenAI-Shim |
127.0.0.1:11434 |
Geringste Latenz; hinter Loopback oder authentifiziertem Proxy. |
| Gateway-UI und WS-Control | 127.0.0.1:18789 |
OpenClaw-/healthz; bei Debug per Tunnel. |
| Untrusted Internet | standardmäßig keines | VPN, SSH oder mTLS vor Veröffentlichung. |
Warteschlangen-Skript: Parallelitätsdeckel und JSON-sichere Nutzlasten
Eine Zeile pro Prompt in prompts.txt. python3 baut valides JSON; ein einfacher Bash-Job-Pool (ohne GNU-xargs -P) hält MAX_JOBS ein:
#!/usr/bin/env bash
set -euo pipefail
OLLAMA_URL="${OLLAMA_URL:-http://127.0.0.1:11434}"
MODEL="${MODEL:-llama3.2}"
MAX_JOBS="${MAX_JOBS:-2}"
PROMPTS="${1:?path to prompts.txt}"
mkdir -p out failed
run_one() {
local i="$1" line="$2"
local body try=0 delay=1
body="$(python3 -c 'import json,sys; print(json.dumps({"model":sys.argv[1],"prompt":sys.argv[2],"stream":False}))' "$MODEL" "$line")"
while (( try < 4 )); do
if curl -fsS --max-time 600 -H 'Content-Type: application/json' \
-d "$body" "$OLLAMA_URL/api/generate" -o "out/resp-$i.json"; then
return 0
fi
sleep "$delay"
delay=$(( delay * 2 ))
try=$(( try + 1 ))
done
printf '%s\n' "$line" >> "failed/prompts-$i.txt"
return 1
}
export -f run_one
export OLLAMA_URL MODEL
i=0
while IFS= read -r line || [ -n "${line-}" ]; do
i=$((i+1))
while (( $(jobs -rp | wc -l | tr -d ' ') >= MAX_JOBS )); do
sleep 0.2
done
( run_one "$i" "$line" ) || true
done < "$PROMPTS"
wait
MAX_JOBS sollte OLLAMA_NUM_PARALLEL und verfügbaren RAM nicht übersteigen; auf 16 GB-Macs starten viele Teams bei 7B–8B mit 1 und justieren unter Beobachtung des Speicherdrucks.
Ressourcenlimits: Ollama, macOS und Batch-Treiber
- Ollama —
OLLAMA_NUM_PARALLEL; bei häufigem Modellwechsel optionalOLLAMA_MAX_LOADED_MODELS. - Queue —
MAX_JOBS≤ serverseitige Parallelität abzüglich Reserve für Cron und Agenten. - macOS — optional
launchdSoftResourceLimits/HardResourceLimitsfür RAM. - OpenClaw — Automatisierungen zeitlich versetzen, damit Agent-Spitzen nicht mit Ollama-Spitzen kollidieren.
Referenzwerte zum Zitieren: Standard-Listener Ollama 11434, OpenClaw-Gateway 18789, im Skript bis zu vier Retry-Versuche mit verdoppeltem Delay, HTTP-Timeout über curl --max-time 600 Sekunden pro Anfrage.
Degradation und Retries
Der Worker wiederholt fehlgeschlagene HTTP-Aufrufe mit Backoff. Erweitern Sie die Kette: Primärmodell → kleineres Fallback → gekürzter Prompt → Dead-Letter unter failed/. Die Versuchsobergrenze verhindert, dass eine defekte Zeile den gesamten Lauf blockiert.
Runbook in fünf Schritten (reproduzierbar)
- Baseline — Ollama installieren, Modell pullen,
/api/tagsprüfen; Parallelitätsvariablen dokumentieren. - OpenClaw — Gateway starten,
/healthzprüfen, sicherstellen, dass Tool-Aufrufe Ollama nur über Loopback erreichen. - Zugriff — Entweder TLS-Proxy im internen Netz oder SSH-Tunnel vom Entwicklerrechner; keine öffentliche Freigabe von
11434. - Queue — Skript deployen,
MAX_JOBSkonservativ setzen, Smoke-Run mit kleinerprompts.txt. - Beobachtung — Speicherdruck, Fehlerrate in
failed/und Proxy-Logs auswerten; Limits iterativ anheben, nicht sprunghaft.
FAQ
Soll Ollama alle Interfaces binden? Nur bei klarer Bedrohungsmodellierung. Loopback plus SSH oder VPN ist der Default; vor authlosem Internet-Exposure warnen wir ausdrücklich.
Wo liegen die Parallelitätslimits? Bei Ollama (OLLAMA_NUM_PARALLEL), am Reverse-Proxy (Rate-Limits) und in der Queue (MAX_JOBS). Alle drei zusammen verhindern stille Überlast.
Wie hängen OpenClaw und Ollama zusammen? OpenClaw führt Gateway und Agenten; Ollama liefert die lokale LLM-HTTP-API. Prozesse und Ports bleiben getrennt.
Was bei Timeouts? curl --max-time, Backoff, kleineres Modell, Dead-Letter-Datei—keine Endlosschleifen.
Wie teste ich von außen? SSH-Portweiterleitung statt Firewall-Öffnung; beide Health-Checks per curl auf Loopback auf dem Mac.
Fazit
OpenClaw und Ollama lassen sich auf einem gemieteten Mac sauber co-hosten, wenn Inferenz auf Loopback bleibt, das Routing bewusst gewählt wird und Parallelität in mehreren Schichten begrenzt wird. Retries und Fallbacks machen Nachtbatches auditierbar. Kapazität nach Region ohne Login einsehen: Preise, Kaufen, Japan, Singapur, Hongkong, Südkorea, USA; Anleitungen im Hilfe-Center.