mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-15 12:00:43 +00:00
139 lines
4.4 KiB
Markdown
139 lines
4.4 KiB
Markdown
---
|
|
summary: "Shared Docker VM runtime steps for long-lived OpenClaw Gateway hosts"
|
|
read_when:
|
|
- You are deploying OpenClaw on a cloud VM with Docker
|
|
- You need the shared binary bake, persistence, and update flow
|
|
title: "Docker VM Runtime"
|
|
---
|
|
|
|
# Docker VM Runtime
|
|
|
|
Shared runtime steps for VM-based Docker installs such as GCP, Hetzner, and similar VPS providers.
|
|
|
|
## Bake required binaries into the image
|
|
|
|
Installing binaries inside a running container is a trap.
|
|
Anything installed at runtime will be lost on restart.
|
|
|
|
All external binaries required by skills must be installed at image build time.
|
|
|
|
The examples below show three common binaries only:
|
|
|
|
- `gog` for Gmail access
|
|
- `goplaces` for Google Places
|
|
- `wacli` for WhatsApp
|
|
|
|
These are examples, not a complete list.
|
|
You may install as many binaries as needed using the same pattern.
|
|
|
|
If you add new skills later that depend on additional binaries, you must:
|
|
|
|
1. Update the Dockerfile
|
|
2. Rebuild the image
|
|
3. Restart the containers
|
|
|
|
**Example Dockerfile**
|
|
|
|
```dockerfile
|
|
FROM node:24-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"]
|
|
```
|
|
|
|
## Build and launch
|
|
|
|
```bash
|
|
docker compose build
|
|
docker compose up -d openclaw-gateway
|
|
```
|
|
|
|
If build fails with `Killed` or `exit code 137` during `pnpm install --frozen-lockfile`, the VM is out of memory.
|
|
Use a larger machine class before retrying.
|
|
|
|
Verify binaries:
|
|
|
|
```bash
|
|
docker compose exec openclaw-gateway which gog
|
|
docker compose exec openclaw-gateway which goplaces
|
|
docker compose exec openclaw-gateway which wacli
|
|
```
|
|
|
|
Expected output:
|
|
|
|
```
|
|
/usr/local/bin/gog
|
|
/usr/local/bin/goplaces
|
|
/usr/local/bin/wacli
|
|
```
|
|
|
|
Verify Gateway:
|
|
|
|
```bash
|
|
docker compose logs -f openclaw-gateway
|
|
```
|
|
|
|
Expected output:
|
|
|
|
```
|
|
[gateway] listening on ws://0.0.0.0:18789
|
|
```
|
|
|
|
## What persists where
|
|
|
|
OpenClaw runs in Docker, but Docker is not the source of truth.
|
|
All long-lived state must survive restarts, rebuilds, and reboots.
|
|
|
|
| Component | Location | Persistence mechanism | Notes |
|
|
| ------------------- | --------------------------------- | ---------------------- | -------------------------------- |
|
|
| Gateway config | `/home/node/.openclaw/` | Host volume mount | Includes `openclaw.json`, tokens |
|
|
| Model auth profiles | `/home/node/.openclaw/` | Host volume mount | OAuth tokens, API keys |
|
|
| Skill configs | `/home/node/.openclaw/skills/` | Host volume mount | Skill-level state |
|
|
| Agent workspace | `/home/node/.openclaw/workspace/` | Host volume mount | Code and agent artifacts |
|
|
| WhatsApp session | `/home/node/.openclaw/` | Host volume mount | Preserves QR login |
|
|
| Gmail keyring | `/home/node/.openclaw/` | Host volume + password | Requires `GOG_KEYRING_PASSWORD` |
|
|
| External binaries | `/usr/local/bin/` | Docker image | Must be baked at build time |
|
|
| Node runtime | Container filesystem | Docker image | Rebuilt every image build |
|
|
| OS packages | Container filesystem | Docker image | Do not install at runtime |
|
|
| Docker container | Ephemeral | Restartable | Safe to destroy |
|
|
|
|
## Updates
|
|
|
|
To update OpenClaw on the VM:
|
|
|
|
```bash
|
|
git pull
|
|
docker compose build
|
|
docker compose up -d
|
|
```
|