Caricamento in corso...
Caricamento in corso...
Last synced: Today, 22:00
Technical reference for the OpenClaw framework. Real-time synchronization with the official documentation engine.
Use this file to discover all available pages before exploring further.
Run a persistent OpenClaw Gateway on a GCP Compute Engine VM using Docker, with durable state, baked-in binaries, and safe restart behavior.
If you want "OpenClaw 24/7 for ~$5-12/mo", this is a reliable setup on Google Cloud. Pricing varies by machine type and region; pick the smallest VM that fits your workload and scale up if you hit OOMs.
~/.openclaw~/.openclaw/workspaceThat mounted
~/.openclawopenclaw.jsonagents/<agentId>/agent/auth-profiles.json.envThe Gateway can be accessed via:
This guide uses Debian on GCP Compute Engine. Ubuntu also works; map packages accordingly. For the generic Docker flow, see Docker.
.envdocker-compose.ymltextInstall from [https://cloud.google.com/sdk/docs/install](https://cloud.google.com/sdk/docs/install) Initialize and authenticate: ```bash} gcloud init gcloud auth login ``` **Option B: Cloud Console** All steps can be done via the web UI at [https://console.cloud.google.com](https://console.cloud.google.com)
text```bash} gcloud projects create my-openclaw-project --name="OpenClaw Gateway" gcloud config set project my-openclaw-project ``` Enable billing at [https://console.cloud.google.com/billing](https://console.cloud.google.com/billing) (required for Compute Engine). Enable the Compute Engine API: ```bash} gcloud services enable compute.googleapis.com ``` **Console:** 1. Go to IAM & Admin > Create Project 2. Name it and create 3. Enable billing for the project 4. Navigate to APIs & Services > Enable APIs > search "Compute Engine API" > Enable
text| Type | Specs | Cost | Notes | | --------- | ------------------------ | ------------------ | -------------------------------------------- | | e2-medium | 2 vCPU, 4GB RAM | \~\$25/mo | Most reliable for local Docker builds | | e2-small | 2 vCPU, 2GB RAM | \~\$12/mo | Minimum recommended for Docker build | | e2-micro | 2 vCPU (shared), 1GB RAM | Free tier eligible | Often fails with Docker build OOM (exit 137) | **CLI:** ```bash} gcloud compute instances create openclaw-gateway \ --zone=us-central1-a \ --machine-type=e2-small \ --boot-disk-size=20GB \ --image-family=debian-12 \ --image-project=debian-cloud ``` **Console:** 1. Go to Compute Engine > VM instances > Create instance 2. Name: `openclaw-gateway` 3. Region: `us-central1`, Zone: `us-central1-a` 4. Machine type: `e2-small` 5. Boot disk: Debian 12, 20GB 6. Create
text```bash} gcloud compute ssh openclaw-gateway --zone=us-central1-a ``` **Console:** Click the "SSH" button next to your VM in the Compute Engine dashboard. Note: SSH key propagation can take 1-2 minutes after VM creation. If connection is refused, wait and retry.
textLog out and back in for the group change to take effect: ```bash} exit ``` Then SSH back in: ```bash} gcloud compute ssh openclaw-gateway --zone=us-central1-a ``` Verify: ```bash} docker --version docker compose version ```
textThis guide assumes you will build a custom image to guarantee binary persistence.
text```bash} mkdir -p ~/.openclaw mkdir -p ~/.openclaw/workspace ```
text```bash} OPENCLAW_IMAGE=openclaw:latest OPENCLAW_GATEWAY_TOKEN= OPENCLAW_GATEWAY_BIND=lan OPENCLAW_GATEWAY_PORT=18789 OPENCLAW_CONFIG_DIR=/home/$USER/.openclaw OPENCLAW_WORKSPACE_DIR=/home/$USER/.openclaw/workspace GOG_KEYRING_PASSWORD= XDG_CONFIG_HOME=/home/node/.openclaw ``` Leave `OPENCLAW_GATEWAY_TOKEN` blank unless you explicitly want to manage it through `.env`; OpenClaw writes a random gateway token to config on first start. Generate a keyring password and paste it into `GOG_KEYRING_PASSWORD`: ```bash} openssl rand -hex 32 ``` **Do not commit this file.** This `.env` file is for container/runtime env such as `OPENCLAW_GATEWAY_TOKEN`. Stored provider OAuth/API-key auth lives in the mounted `~/.openclaw/agents/<agentId>/agent/auth-profiles.json`.
text```yaml} 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 VM; 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" 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.
text* [Bake required binaries into the image](/install/docker-vm-runtime#bake-required-binaries-into-the-image) * [Build and launch](/install/docker-vm-runtime#build-and-launch) * [What persists where](/install/docker-vm-runtime#what-persists-where) * [Updates](/install/docker-vm-runtime#updates)
textWhen binding to LAN (`OPENCLAW_GATEWAY_BIND=lan`), configure a trusted browser origin before continuing: ```bash} docker compose run --rm openclaw-cli config set gateway.controlUi.allowedOrigins '["http://127.0.0.1:18789"]' --strict-json ``` If you changed the gateway port, replace `18789` with your configured port.
text```bash} gcloud compute ssh openclaw-gateway --zone=us-central1-a -- -L 18789:127.0.0.1:18789 ``` Open in your browser: `http://127.0.0.1:18789/` Reprint a clean dashboard link: ```bash} docker compose run --rm openclaw-cli dashboard --no-open ``` If the UI prompts for shared-secret auth, paste the configured token or password into Control UI settings. This Docker flow writes a token by default; if you switch the container config to password auth, use that password instead. If Control UI shows `unauthorized` or `disconnected (1008): pairing required`, approve the browser device: ```bash} docker compose run --rm openclaw-cli devices list docker compose run --rm openclaw-cli devices approve <requestId> ``` Need the shared persistence and update reference again? See [Docker VM Runtime](/install/docker-vm-runtime#what-persists-where) and [Docker VM Runtime updates](/install/docker-vm-runtime#updates).
SSH connection refused
SSH key propagation can take 1-2 minutes after VM creation. Wait and retry.
OS Login issues
Check your OS Login profile:
bashgcloud compute os-login describe-profile
Ensure your account has the required IAM permissions (Compute OS Login or Compute OS Admin Login).
Out of memory (OOM)
If Docker build fails with
Killedexit code 137bash# Stop the VM first gcloud compute instances stop openclaw-gateway --zone=us-central1-a # Change machine type gcloud compute instances set-machine-type openclaw-gateway \ --zone=us-central1-a \ --machine-type=e2-small # Start the VM gcloud compute instances start openclaw-gateway --zone=us-central1-a
For personal use, your default user account works fine.
For automation or CI/CD pipelines, create a dedicated service account with minimal permissions:
Create a service account:
bashgcloud iam service-accounts create openclaw-deploy \ --display-name="OpenClaw Deployment"
Grant Compute Instance Admin role (or narrower custom role):
bashgcloud projects add-iam-policy-binding my-openclaw-project \ --member="serviceAccount:openclaw-deploy@my-openclaw-project.iam.gserviceaccount.com" \ --role="roles/compute.instanceAdmin.v1"
Avoid using the Owner role for automation. Use the principle of least privilege.
See https://cloud.google.com/iam/docs/understanding-roles for IAM role details.
© 2024 TaskFlow Mirror
Powered by TaskFlow Sync Engine