| ⚙️ DevOps & Infrastructure | 10 min read | v1.0.0 |
|
📋 Contents
|
OpenClaw Installation & ConfigurationOpenClaw is an open-source AI agent platform (github.com/openclaw/openclaw, 373k+ GitHub stars). It is NOT the same as Hermes WebUI (nesquena/hermes-webui) — they are completely different products. OpenClaw uses Docker, Node.js/TypeScript, and its own skill system (ClawHub). ⚠️ Critical Distinction: OpenClaw ≠ Hermes WebUIgithub.com/openclaw/openclaw) — AI agent platform with Docker gateway, browser automation, multi-provider LLM support, ClawHub skills marketplacegithub.com/nesquena/hermes-webui) — Web frontend for Hermes Agent, Python-based, uses bootstrap.pyBoth can coexist on the same server but serve different purposes. Do NOT confuse them. Quick Deploy (Docker)1. Pull the Docker image
2. Create config directory structure
3. Run initial setup (generates default config)
This creates 4. Configure providers (API keys)Edit
Provider name mapping — OpenClaw uses lowercase provider names as env var suffixes: OPENCLAW_API_KEY_CHUTES → Chutes providerOPENCLAW_API_KEY_GROQ → GroqOPENCLAW_API_KEY_OPENROUTER → OpenRouterImportant: Use a working free provider (e.g., Chutes) as the default. Avoid providers that require special env vars (like 5. Create Docker Compose
6. Start the gateway
7. Verify
8. Install skills from ClawHub
Skills install to 9. Restart after config changes
Nginx + SSL (External Access)
Do NOT add nginx Browser Plugin (CamoFox)OpenClaw auto-detects a running CamoFox browser server. If CamoFox is on
And the To point OpenClaw at a remote CamoFox fleet, add browser config to
Password AuthSet
Copying Config from Another Hermes SetupWhen migrating API keys from a Hermes Agent config: config.yaml → openclaw.json: Extract api_key fields from each provider and create OPENCLAW_API_KEY_{PROVIDER} env varsskills install.openclaw.json's systemPrompt field or use the web UI settingsImportant: Hermes Also important: PyYAML's Config Directory Layout
Pitfalls/root/.openclaw needs chmod 777 or the container can't write to it. Without write access, openclaw setup and skill installs fail silently.openclaw onboard fails in Docker — requires TTY. Use setup --non-interactive --accept-risk instead.openai/gpt-5.5 — this will fail without an OpenAI API key. Change defaultModel and defaultProvider in openclaw.json to a working free provider (e.g., chutes / zai-org/GLM-5-Turbo).docker compose restart needed for changes to openclaw.json or .env to take effect.skills install). Hermes skill files (SKILL.md) are NOT compatible with OpenClaw skills.skills install 404s for some names — not all skill names from skills list exist on ClawHub. Use skills search to find the correct installable name.apt-get install -y libgtk-3-0 libdbus-glib-1-2 libxt6 libasound2t64 libatk1.0-0 libatk-bridge2.0-0 libcups2 libxdamage1 libxrandr2 libxcomposite1 libxfixes3 libx11-xcb1 libxcb1 libxcursor1 libxi6 libpango-1.0-0 libpangocairo-1.0-0 libcairo2 libcairo-gobject2 libgdk-pixbuf-2.0-0 libfreetype6 libfontconfig1 libatk-adaptor libatspi2.0-0 xvfb. The /health endpoint works without these, but tab creation returns 500.sessionKey required for tab creation — POST /tabs returns {"error":"userId and sessionKey required"} if sessionKey is missing. Always include both: {"userId":"user1","sessionKey":"default"}.auth_basic in nginx if OpenClaw already has built-in auth (OPENCLAW_AUTH_PASSWORD). Use one or the other.proxy_set_header Upgrade and proxy_read_timeout 86400 are essential for the OpenClaw gateway's real-time features to work through nginx.openclaw.json (JSON), not YAML like Hermes Agent. Edit with jq or Python json module, not yaml.openclaw devices approve . Run this inside the container: docker exec openclaw-openclaw-gateway-1 node dist/index.js devices approve . Without this, the browser sees "Device pairing required" and cannot connect. See references/device-pairing.md for full workflow.bind must be lan for external/nginx access — if set to loopback (the default from setup), only localhost connections work. Set "bind": "lan" in openclaw.json gateway section for public access behind nginx.controlUi.allowedOrigins must include the external domain — After setup, the gateway only allows localhost origins. Add your domain to gateway.controlUi.allowedOrigins or the dashboard JS will be blocked: "allowedOrigins": ["https://oc.example.com", "http://localhost:18789"].openclaw.json "auth": {"mode": "password", "password": "munaf"} persists across container recreates. The OPENCLAW_AUTH_PASSWORD env var also works but is only in docker-compose.yml. Prefer the JSON config approach for persistence.setup command worked — docker run --rm -v ... ghcr.io/openclaw/openclaw:latest node dist/index.js setup --non-interactive --accept-risk generates the config. The onboard command requires TTY and fails in Docker even without -it.Files/root/.openclaw/openclaw.json — Main config/opt/openclaw/docker-compose.yml — Docker Compose for gateway/opt/openclaw/.env — Environment vars (API keys)/root/.openclaw/workspace/skills/ — Installed ClawHub skillsAdvanced Techniques (2025-2026)Docker healthcheck with restart policiesAdd a healthcheck to your Compose service so Docker can detect gateway hangs and auto-restart:
Without a healthcheck, Docker only restarts on process exit — not on deadlocks or silent hangs. The Compose Watch zero-downtime config reload (v2.22+)Use Docker Compose Watch to hot-reload
This is especially useful for iterative provider/model tuning — changes propagate in seconds instead of requiring Fix UID mismatch with chown instead of chmod 777The container runs as UID 1000 (node).
This grants the node user write access without making directories world-writable. jq for JSON config editingSince
Edge Cases / Pitfallssetup and skills install will fail silently — no error, just no output. Always verify ownership with ls -la /root/.openclaw/.environment: entries override env_file: entries when the same variable name appears in both. If you set OPENCLAW_AUTH_PASSWORD in both environment: and an .env file referenced by env_file:, the environment: value wins. This can be surprising when debugging auth issues — check which source actually provides the value.OpenClaw 2025 UpdatesSkill Marketplace Growth (ClawHub 200+)ClawHub has expanded from ~52 built-in skills to 200+ community and official skills. New categories include data-pipeline, devops-automate, ai-redteam, and browser-agent clusters. Search and install:
The marketplace now supports skill dependencies — installing a skill auto-installs its prerequisites. Check for skill updates with Browser Plugin Improvements (CamoFox v2+)CamoFox integration improvements in 2025: POST /tabs now supports sessionKey isolation per tab, enabling parallel browser sessions without state leakage"fingerprintRotation": true in browser config/health endpoint now returns browser engine version and active tab count ({"ok":true,"engine":"122.0","tabs":3})sessionPersistence: true is set in browser config
Docker Compose v2 Healthcheck + WatchThe
This ensures the gateway doesn't start accepting connections until Redis is ready. Referencesreferences/device-pairing.md — Full workflow for approving new browsers that connect to the OpenClaw dashboard (required on first connection)Templatestemplates/docker-compose.yml — Ready-to-use Docker Compose with correct volume mounts and env varsScriptsscripts/openclaw-healthcheck.sh — One-command deployment health check (container status, gateway health, model, skills, errors, pending device pairings)💬 Ask about Openclaw Install
|