GCP
OpenClaw on GCP Compute Engine (Docker, Production VPS Guide)
Section titled “OpenClaw on GCP Compute Engine (Docker, Production VPS Guide)”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.
What are we doing (simple terms)?
Section titled “What are we doing (simple terms)?”- Create a GCP project and enable billing
- Create a Compute Engine VM
- Install Docker (isolated app runtime)
- Start the OpenClaw Gateway in Docker
- Persist
~/.openclaw+~/.openclaw/workspaceon the host (survives restarts/rebuilds) - Access the Control UI from your laptop via an SSH tunnel
The Gateway can be accessed via:
- SSH port forwarding from your laptop
- Direct port exposure if you manage firewalling and tokens yourself
This guide uses Debian on GCP Compute Engine. Ubuntu also works; map packages accordingly. For the generic Docker flow, see Docker.
Quick path (experienced operators)
Section titled “Quick path (experienced operators)”- Create GCP project + enable Compute Engine API
- Create Compute Engine VM (e2-small, Debian 12, 20GB)
- SSH into the VM
- Install Docker
- Clone OpenClaw repository
- Create persistent host directories
- Configure
.envanddocker-compose.yml - Bake required binaries, build, and launch
What you need
Section titled “What you need”- GCP account (free tier eligible for e2-micro)
- gcloud CLI installed (or use Cloud Console)
- SSH access from your laptop
- Basic comfort with SSH + copy/paste
- ~20-30 minutes
- Docker and Docker Compose
- Model auth credentials
- Optional provider credentials
- WhatsApp QR
- Telegram bot token
- Gmail OAuth
Install gcloud CLI (or use Console)
Option A: gcloud CLI (recommended for automation)
Install from https://cloud.google.com/sdk/docs/install
Initialize and authenticate:
Terminal window gcloud initgcloud auth loginOption B: Cloud Console
All steps can be done via the web UI at https://console.cloud.google.com
Create a GCP project
CLI:
Terminal window gcloud projects create my-openclaw-project --name="OpenClaw Gateway"gcloud config set project my-openclaw-projectEnable billing at https://console.cloud.google.com/billing (required for Compute Engine).
Enable the Compute Engine API:
Terminal window gcloud services enable compute.googleapis.comConsole:
- Go to IAM & Admin > Create Project
- Name it and create
- Enable billing for the project
- Navigate to APIs & Services > Enable APIs > search “Compute Engine API” > Enable
Create the VM
Machine types:
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:
Terminal window 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-cloudConsole:
- Go to Compute Engine > VM instances > Create instance
- Name:
openclaw-gateway - Region:
us-central1, Zone:us-central1-a - Machine type:
e2-small - Boot disk: Debian 12, 20GB
- Create
SSH into the VM
CLI:
Terminal window gcloud compute ssh openclaw-gateway --zone=us-central1-aConsole:
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.
Install Docker (on the VM)
Terminal window sudo apt-get updatesudo apt-get install -y git curl ca-certificatescurl -fsSL https://get.docker.com | sudo shsudo usermod -aG docker $USERLog out and back in for the group change to take effect:
Terminal window exitThen SSH back in:
Terminal window gcloud compute ssh openclaw-gateway --zone=us-central1-aVerify:
Terminal window docker --versiondocker compose versionClone the OpenClaw repository
Terminal window git clone https://github.com/openclaw/openclaw.gitcd openclawThis guide assumes you will build a custom image to guarantee binary persistence.
Create persistent host directories
Docker containers are ephemeral. All long-lived state must live on the host.
Terminal window mkdir -p ~/.openclawmkdir -p ~/.openclaw/workspaceConfigure environment variables
Create
.envin the repository root.Terminal window OPENCLAW_IMAGE=openclaw:latestOPENCLAW_GATEWAY_TOKEN=change-me-nowOPENCLAW_GATEWAY_BIND=lanOPENCLAW_GATEWAY_PORT=18789OPENCLAW_CONFIG_DIR=/home/$USER/.openclawOPENCLAW_WORKSPACE_DIR=/home/$USER/.openclaw/workspaceGOG_KEYRING_PASSWORD=change-me-nowXDG_CONFIG_HOME=/home/node/.openclawGenerate strong secrets:
Terminal window openssl rand -hex 32Do not commit this file.
Docker Compose configuration
Create or update
docker-compose.yml.services:openclaw-gateway:image: ${OPENCLAW_IMAGE}build: .restart: unless-stoppedenv_file:- .envenvironment:- 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:/binvolumes:- ${OPENCLAW_CONFIG_DIR}:/home/node/.openclaw- ${OPENCLAW_WORKSPACE_DIR}:/home/node/.openclaw/workspaceports:# 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-unconfiguredis only for bootstrap convenience, it is not a replacement for a proper gateway configuration. Still set auth (gateway.auth.tokenor password) and use safe bind settings for your deployment.Shared Docker VM runtime steps
Use the shared runtime guide for the common Docker host flow:
GCP-specific launch notes
On GCP, if build fails with
Killedorexit code 137duringpnpm install --frozen-lockfile, the VM is out of memory. Usee2-smallminimum, ore2-mediumfor more reliable first builds.When binding to LAN (
OPENCLAW_GATEWAY_BIND=lan), configure a trusted browser origin before continuing:Terminal window docker compose run --rm openclaw-cli config set gateway.controlUi.allowedOrigins '["http://127.0.0.1:18789"]' --strict-jsonIf you changed the gateway port, replace
18789with your configured port.Access from your laptop
Create an SSH tunnel to forward the Gateway port:
Terminal window gcloud compute ssh openclaw-gateway --zone=us-central1-a -- -L 18789:127.0.0.1:18789Open in your browser:
http://127.0.0.1:18789/Fetch a fresh tokenized dashboard link:
Terminal window docker compose run --rm openclaw-cli dashboard --no-openPaste the token from that URL.
If Control UI shows
unauthorizedordisconnected (1008): pairing required, approve the browser device:Terminal window docker compose run --rm openclaw-cli devices listdocker compose run --rm openclaw-cli devices approveNeed the shared persistence and update reference again?See [Docker VM Runtime](/en/install/docker-vm-runtime#what-persists-where) and [Docker VM Runtime updates](/en/install/docker-vm-runtime#updates).
Troubleshooting
Section titled “Troubleshooting”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:
gcloud compute os-login describe-profileEnsure your account has the required IAM permissions (Compute OS Login or Compute OS Admin Login).
Out of memory (OOM)
If Docker build fails with Killed and exit code 137, the VM was OOM-killed. Upgrade to e2-small (minimum) or e2-medium (recommended for reliable local builds):
# Stop the VM firstgcloud compute instances stop openclaw-gateway --zone=us-central1-a
# Change machine typegcloud compute instances set-machine-type openclaw-gateway \ --zone=us-central1-a \ --machine-type=e2-small
# Start the VMgcloud compute instances start openclaw-gateway --zone=us-central1-aService accounts (security best practice)
Section titled “Service accounts (security best practice)”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:
Terminal window gcloud iam service-accounts create openclaw-deploy \--display-name="OpenClaw Deployment" -
Grant Compute Instance Admin role (or narrower custom role):
Terminal window gcloud projects add-iam-policy-binding my-openclaw-project \--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.
Next steps
Section titled “Next steps”- Set up messaging channels: Channels
- Pair local devices as nodes: Nodes
- Configure the Gateway: Gateway configuration