OpenClaw sa Hetzner (Docker, Gabay sa Production VPS)¶
Layunin¶
Magpatakbo ng persistent na OpenClaw Gateway sa isang Hetzner VPS gamit ang Docker, na may durable na state, baked-in na mga binary, at ligtas na behavior sa restart.
Kung gusto mo ng “OpenClaw 24/7 sa halagang ~$5”, ito ang pinakasimple at maaasahang setup. 23. Nagbabago ang pagpepresyo ng Hetzner; piliin ang pinakamaliit na Debian/Ubuntu VPS at mag-scale up kung makaranas ka ng OOMs.
Ano ang ginagawa natin (sa simpleng paliwanag)?¶
- Umupa ng maliit na Linux server (Hetzner VPS)
- Mag-install ng Docker (isolated na app runtime)
- Simulan ang OpenClaw Gateway sa Docker
- I-persist ang
~/.openclaw+~/.openclaw/workspacesa host (nabubuhay kahit mag-restart/mag-rebuild) - I-access ang Control UI mula sa iyong laptop sa pamamagitan ng SSH tunnel
Maaaring ma-access ang Gateway sa pamamagitan ng:
- SSH port forwarding mula sa iyong laptop
- Direktang pag-expose ng port kung ikaw mismo ang nagma-manage ng firewall at mga token
Ipinapalagay ng gabay na ito ang Ubuntu o Debian sa Hetzner.
Kung nasa ibang Linux VPS ka, iangkop ang mga package nang naaayon.
Para sa pangkalahatang daloy ng Docker, tingnan ang Docker.
Mabilis na ruta (para sa bihasang operator)¶
- Mag-provision ng Hetzner VPS
- Mag-install ng Docker
- I-clone ang OpenClaw repository
- Gumawa ng persistent na mga directory sa host
- I-configure ang
.envatdocker-compose.yml - I-bake ang mga kinakailangang binary sa image
docker compose up -d- I-verify ang persistence at access sa Gateway
Mga kailangan mo¶
- Hetzner VPS na may root access
- SSH access mula sa iyong laptop
- Pangunahing kumpiyansa sa SSH + copy/paste
- ~20 minuto
- Docker at Docker Compose
- Mga kredensyal sa auth ng model
- Opsyonal na mga kredensyal ng provider
- WhatsApp QR
- Telegram bot token
- Gmail OAuth
1. Mag-provision ng VPS¶
Gumawa ng Ubuntu o Debian VPS sa Hetzner.
Kumonek bilang root:
ssh root@YOUR_VPS_IP
- Ipinapalagay ng gabay na ito na stateful ang VPS.
- Huwag itong ituring bilang disposable infrastructure.
2. I-install ang Docker (sa VPS)¶
apt-get update
apt-get install -y git curl ca-certificates
curl -fsSL https://get.docker.com | sh
I-verify:
docker --version
docker compose version
3. I-clone ang OpenClaw repository¶
git clone https://github.com/openclaw/openclaw.git
cd openclaw
Ipinapalagay ng gabay na ito na magbu-build ka ng custom na image para masigurong persistent ang mga binary.
4. Gumawa ng persistent na mga directory sa host¶
Ang mga Docker container ay panandalian. 30. Lahat ng pangmatagalang estado ay dapat manatili sa host.
mkdir -p /root/.openclaw/workspace
# Set ownership to the container user (uid 1000):
chown -R 1000:1000 /root/.openclaw
5. I-configure ang mga environment variable¶
Gumawa ng .env sa root ng repository.
OPENCLAW_IMAGE=openclaw:latest
OPENCLAW_GATEWAY_TOKEN=change-me-now
OPENCLAW_GATEWAY_BIND=lan
OPENCLAW_GATEWAY_PORT=18789
OPENCLAW_CONFIG_DIR=/root/.openclaw
OPENCLAW_WORKSPACE_DIR=/root/.openclaw/workspace
GOG_KEYRING_PASSWORD=change-me-now
XDG_CONFIG_HOME=/home/node/.openclaw
Bumuo ng malalakas na secret:
openssl rand -hex 32
Huwag i-commit ang file na ito.
6. Docker Compose configuration¶
Gumawa o i-update ang docker-compose.yml.
services:
openclaw-gateway:
image: ${OPENCLAW_IMAGE}
build: .
restart: unless-stopped
env_file:
- .env
environment:
- HOME=/home/node
- NODE_ENV=production
- TERM=xterm-256color
- OPENCLAW_GATEWAY_BIND=${OPENCLAW_GATEWAY_BIND}
- OPENCLAW_GATEWAY_PORT=${OPENCLAW_GATEWAY_PORT}
- OPENCLAW_GATEWAY_TOKEN=${OPENCLAW_GATEWAY_TOKEN}
- GOG_KEYRING_PASSWORD=${GOG_KEYRING_PASSWORD}
- XDG_CONFIG_HOME=${XDG_CONFIG_HOME}
- PATH=/home/linuxbrew/.linuxbrew/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
volumes:
- ${OPENCLAW_CONFIG_DIR}:/home/node/.openclaw
- ${OPENCLAW_WORKSPACE_DIR}:/home/node/.openclaw/workspace
ports:
# Recommended: keep the Gateway loopback-only on the VPS; access via SSH tunnel.
# To expose it publicly, remove the `127.0.0.1:` prefix and firewall accordingly.
- "127.0.0.1:${OPENCLAW_GATEWAY_PORT}:18789"
# Optional: only if you run iOS/Android nodes against this VPS and need Canvas host.
# If you expose this publicly, read /gateway/security and firewall accordingly.
# - "18793:18793"
command:
[
"node",
"dist/index.js",
"gateway",
"--bind",
"${OPENCLAW_GATEWAY_BIND}",
"--port",
"${OPENCLAW_GATEWAY_PORT}",
"--allow-unconfigured",
]
--allow-unconfigured is only for bootstrap convenience, it is not a replacement for a proper gateway configuration. Still set auth (gateway.auth.token or password) and use safe bind settings for your deployment.
7. I-bake ang mga kinakailangang binary sa image (kritikal)¶
Ang pag-install ng mga binary sa loob ng tumatakbong container ay isang bitag. Anumang na-install sa oras ng pagtakbo ay mawawala kapag nag-restart.
Lahat ng external na binary na kailangan ng Skills ay dapat i-install sa image build time.
Ipinapakita ng mga halimbawa sa ibaba ang tatlong karaniwang binary lamang:
gogpara sa Gmail accessgoplacespara sa Google Placeswaclipara sa WhatsApp
Mga halimbawa lamang ito, hindi kumpletong listahan. Maaari kang mag-install ng kasing daming binary na kailangan gamit ang parehong pattern.
Kung magdadagdag ka ng mga bagong Skills sa hinaharap na umaasa sa karagdagang mga binary, kailangan mong:
- I-update ang Dockerfile
- I-rebuild ang image
- I-restart ang mga container
Halimbawa ng Dockerfile
FROM node:22-bookworm
RUN apt-get update && apt-get install -y socat && rm -rf /var/lib/apt/lists/*
# Example binary 1: Gmail CLI
RUN curl -L https://github.com/steipete/gog/releases/latest/download/gog_Linux_x86_64.tar.gz \
| tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/gog
# Example binary 2: Google Places CLI
RUN curl -L https://github.com/steipete/goplaces/releases/latest/download/goplaces_Linux_x86_64.tar.gz \
| tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/goplaces
# Example binary 3: WhatsApp CLI
RUN curl -L https://github.com/steipete/wacli/releases/latest/download/wacli_Linux_x86_64.tar.gz \
| tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/wacli
# Add more binaries below using the same pattern
WORKDIR /app
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./
COPY ui/package.json ./ui/package.json
COPY scripts ./scripts
RUN corepack enable
RUN pnpm install --frozen-lockfile
COPY . .
RUN pnpm build
RUN pnpm ui:install
RUN pnpm ui:build
ENV NODE_ENV=production
CMD ["node","dist/index.js"]
8. I-build at ilunsad¶
docker compose build
docker compose up -d openclaw-gateway
I-verify ang mga binary:
docker compose exec openclaw-gateway which gog
docker compose exec openclaw-gateway which goplaces
docker compose exec openclaw-gateway which wacli
Inaasahang output:
/usr/local/bin/gog
/usr/local/bin/goplaces
/usr/local/bin/wacli
9. I-verify ang Gateway¶
docker compose logs -f openclaw-gateway
Tagumpay:
[gateway] listening on ws://0.0.0.0:18789
Mula sa iyong laptop:
ssh -N -L 18789:127.0.0.1:18789 root@YOUR_VPS_IP
Buksan:
http://127.0.0.1:18789/
I-paste ang iyong gateway token.
Ano ang persistent at saan (pinagmumulan ng katotohanan)¶
Tumatakbo ang OpenClaw sa Docker, ngunit ang Docker ay hindi ang source of truth. 36. Lahat ng pangmatagalang estado ay dapat makaligtas sa mga restart, rebuild, at reboot.
| Component | Lokasyon | Mekanismo ng persistence | Mga tala |
|---|---|---|---|
| Gateway config | /home/node/.openclaw/ |
Pag-mount ng volume ng host | Kasama ang openclaw.json, mga token |
| Model auth profiles | /home/node/.openclaw/ |
Pag-mount ng volume ng host | OAuth tokens, API keys |
| Skill configs | /home/node/.openclaw/skills/ |
Pag-mount ng volume ng host | State sa antas ng Skill |
| Agent workspace | /home/node/.openclaw/workspace/ |
Pag-mount ng volume ng host | Code at mga artifact ng agent |
| WhatsApp session | /home/node/.openclaw/ |
Host volume mount | Pinapanatili ang QR login |
| Gmail keyring | /home/node/.openclaw/ |
Host volume + password | Nangangailangan ng GOG_KEYRING_PASSWORD |
| External binaries | /usr/local/bin/ |
Imahe ng Docker | Dapat i-bake sa build time |
| Node runtime | Sistemang file ng container | Imahe ng Docker | Nire-rebuild sa bawat image build |
| OS packages | Container filesystem | Docker image | Huwag mag-install sa runtime |
| Docker container | Ephemeral | Restartable | Ligtas na sirain |