GCP
RemoteClaw on GCP Compute Engine (Docker, Production VPS Guide)
Goal
Run a persistent RemoteClaw Gateway on a GCP Compute Engine VM using Docker, with durable state, baked-in binaries, and safe restart behavior.
If you want “RemoteClaw 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)?
- Create a GCP project and enable billing
- Create a Compute Engine VM
- Install Docker (isolated app runtime)
- Start the RemoteClaw Gateway in Docker
- Persist
~/.remoteclaw+~/.remoteclaw/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)
- Create GCP project + enable Compute Engine API
- Create Compute Engine VM (e2-small, Debian 12, 20GB)
- SSH into the VM
- Install Docker
- Clone RemoteClaw repository
- Create persistent host directories
- Configure
.envanddocker-compose.yml - Bake required binaries, build, and launch
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 from [https://cloud.google.com/sdk/docs/install](https://cloud.google.com/sdk/docs/install)
Initialize and authenticate:
```bashgcloud initgcloud 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)```bashgcloud projects create my-remoteclaw-project --name="RemoteClaw Gateway"gcloud config set project my-remoteclaw-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:
```bashgcloud services enable compute.googleapis.com```
**Console:**
1. Go to IAM & Admin > Create Project2. Name it and create3. Enable billing for the project4. Navigate to APIs & Services > Enable APIs > search "Compute Engine API" > Enable| 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:**
```bashgcloud compute instances create remoteclaw-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 instance2. Name: `remoteclaw-gateway`3. Region: `us-central1`, Zone: `us-central1-a`4. Machine type: `e2-small`5. Boot disk: Debian 12, 20GB6. Create```bashgcloud compute ssh remoteclaw-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.Log out and back in for the group change to take effect:
```bashexit```
Then SSH back in:
```bashgcloud compute ssh remoteclaw-gateway --zone=us-central1-a```
Verify:
```bashdocker --versiondocker compose version```This guide assumes you will build a custom image to guarantee binary persistence.```bashmkdir -p ~/.remoteclawmkdir -p ~/.remoteclaw/workspace``````bashREMOTECLAW_IMAGE=remoteclaw:latestREMOTECLAW_GATEWAY_TOKEN=change-me-nowREMOTECLAW_GATEWAY_BIND=lanREMOTECLAW_GATEWAY_PORT=18789
REMOTECLAW_CONFIG_DIR=/home/$USER/.remoteclawREMOTECLAW_WORKSPACE_DIR=/home/$USER/.remoteclaw/workspace
GOG_KEYRING_PASSWORD=change-me-nowXDG_CONFIG_HOME=/home/node/.remoteclaw```
Generate strong secrets:
```bashopenssl rand -hex 32```
**Do not commit this file.**```yamlservices: remoteclaw-gateway: image: ${REMOTECLAW_IMAGE} build: . restart: unless-stopped env_file: - .env environment: - HOME=/home/node - NODE_ENV=production - TERM=xterm-256color - REMOTECLAW_GATEWAY_BIND=${REMOTECLAW_GATEWAY_BIND} - REMOTECLAW_GATEWAY_PORT=${REMOTECLAW_GATEWAY_PORT} - REMOTECLAW_GATEWAY_TOKEN=${REMOTECLAW_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: - ${REMOTECLAW_CONFIG_DIR}:/home/node/.remoteclaw - ${REMOTECLAW_WORKSPACE_DIR}:/home/node/.remoteclaw/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:${REMOTECLAW_GATEWAY_PORT}:18789" command: [ "node", "dist/index.js", "gateway", "--bind", "${REMOTECLAW_GATEWAY_BIND}", "--port", "${REMOTECLAW_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.- [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)When binding to LAN (`REMOTECLAW_GATEWAY_BIND=lan`), configure a trusted browser origin before continuing:
```bashdocker compose run --rm remoteclaw-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.```bashgcloud compute ssh remoteclaw-gateway --zone=us-central1-a -- -L 18789:127.0.0.1:18789```
Open in your browser:
`http://127.0.0.1:18789/`
Fetch a fresh tokenized dashboard link:
```bashdocker compose run --rm remoteclaw-cli dashboard --no-open```
Paste the token from that URL.
If Control UI shows `unauthorized` or `disconnected (1008): pairing required`, approve the browser device:
```bashdocker compose run --rm remoteclaw-cli devices listdocker compose run --rm remoteclaw-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).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 remoteclaw-gateway --zone=us-central1-a
# Change machine typegcloud compute instances set-machine-type remoteclaw-gateway \ --zone=us-central1-a \ --machine-type=e2-small
# Start the VMgcloud compute instances start remoteclaw-gateway --zone=us-central1-aService 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 remoteclaw-deploy \--display-name="RemoteClaw Deployment" -
Grant Compute Instance Admin role (or narrower custom role):
Terminal window gcloud projects add-iam-policy-binding my-remoteclaw-project \--member="serviceAccount:remoteclaw-deploy@my-remoteclaw-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.
Next steps
- Set up messaging channels: Channels
- Pair local devices as nodes: Nodes
- Configure the Gateway: Gateway configuration