Vai al contenuto principale

OpenClaw su GCP Compute Engine (Docker, guida VPS production)

Obiettivo

Eseguire un Gateway OpenClaw persistente su una VM GCP Compute Engine usando Docker, con stato persistente, binari incorporati e comportamento di riavvio sicuro. Se vuoi “OpenClaw 24/7 per ~$5-12/mese”, questa è una configurazione affidabile su Google Cloud. Il prezzo varia in base al tipo di macchina e alla regione; scegli la VM più piccola adatta al tuo carico di lavoro e aumenta le risorse se incontri OOM.

Cosa stiamo facendo (in termini semplici)?

  • Creare un progetto GCP e abilitare la fatturazione
  • Creare una VM Compute Engine
  • Installare Docker (runtime applicativo isolato)
  • Avviare OpenClaw Gateway in Docker
  • Rendere persistenti ~/.openclaw + ~/.openclaw/workspace sull’host (sopravvive a riavvii/ricostruzioni)
  • Accedere alla Control UI dal laptop tramite un tunnel SSH
Quello stato montato in ~/.openclaw include openclaw.json, per agente agents/<agentId>/agent/auth-profiles.json e .env. È possibile accedere al Gateway tramite:
  • inoltro porta SSH dal laptop
  • esposizione diretta della porta se gestisci personalmente firewall e token
Questa guida usa Debian su GCP Compute Engine. Anche Ubuntu funziona; adatta i pacchetti di conseguenza. Per il flusso Docker generico, vedi Docker.

Percorso rapido (operatori esperti)

  1. Crea un progetto GCP + abilita l’API Compute Engine
  2. Crea una VM Compute Engine (e2-small, Debian 12, 20GB)
  3. Accedi alla VM via SSH
  4. Installa Docker
  5. Clona il repository OpenClaw
  6. Crea directory host persistenti
  7. Configura .env e docker-compose.yml
  8. Incorpora i binari richiesti, compila e avvia

Cosa ti serve

  • Account GCP (eleggibile al free tier per e2-micro)
  • CLI gcloud installata (oppure usa Cloud Console)
  • Accesso SSH dal laptop
  • Familiarità di base con SSH + copia/incolla
  • ~20-30 minuti
  • Docker e Docker Compose
  • Credenziali di autenticazione del modello
  • Credenziali provider facoltative
    • QR WhatsApp
    • token bot Telegram
    • Gmail OAuth

1

Installa la CLI gcloud (oppure usa Console)

Opzione A: CLI gcloud (consigliata per l’automazione)Installa da https://cloud.google.com/sdk/docs/installInizializza e autenticati:
gcloud init
gcloud auth login
Opzione B: Cloud ConsoleTutti i passaggi possono essere eseguiti tramite l’interfaccia web su https://console.cloud.google.com
2

Crea un progetto GCP

CLI:
gcloud projects create my-openclaw-project --name="OpenClaw Gateway"
gcloud config set project my-openclaw-project
Abilita la fatturazione su https://console.cloud.google.com/billing (obbligatoria per Compute Engine).Abilita l’API Compute Engine:
gcloud services enable compute.googleapis.com
Console:
  1. Vai a IAM e amministrazione > Crea progetto
  2. Dagli un nome e crealo
  3. Abilita la fatturazione per il progetto
  4. Vai a API e servizi > Abilita API > cerca “Compute Engine API” > Abilita
3

Crea la VM

Tipi di macchina:
TipoSpecificheCostoNote
e2-medium2 vCPU, 4GB RAM~$25/mesePiù affidabile per build Docker locali
e2-small2 vCPU, 2GB RAM~$12/meseMinimo consigliato per build Docker
e2-micro2 vCPU (condivise), 1GB RAMEleggibile al free tierSpesso fallisce per OOM durante la build Docker (exit 137)
CLI:
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. Vai a Compute Engine > Istanze VM > Crea istanza
  2. Nome: openclaw-gateway
  3. Regione: us-central1, Zona: us-central1-a
  4. Tipo di macchina: e2-small
  5. Disco di avvio: Debian 12, 20GB
  6. Crea
4

Accedi alla VM via SSH

CLI:
gcloud compute ssh openclaw-gateway --zone=us-central1-a
Console:Fai clic sul pulsante “SSH” accanto alla tua VM nel pannello di controllo di Compute Engine.Nota: la propagazione della chiave SSH può richiedere 1-2 minuti dopo la creazione della VM. Se la connessione viene rifiutata, attendi e riprova.
5

Installa Docker (sulla VM)

sudo apt-get update
sudo apt-get install -y git curl ca-certificates
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
Esci e rientra affinché la modifica del gruppo abbia effetto:
exit
Poi accedi di nuovo via SSH:
gcloud compute ssh openclaw-gateway --zone=us-central1-a
Verifica:
docker --version
docker compose version
6

Clona il repository OpenClaw

git clone https://github.com/openclaw/openclaw.git
cd openclaw
Questa guida presuppone che compilerai un’immagine personalizzata per garantire la persistenza dei binari.
7

Crea directory host persistenti

I container Docker sono effimeri. Tutto lo stato a lunga durata deve vivere sull’host.
mkdir -p ~/.openclaw
mkdir -p ~/.openclaw/workspace
8

Configura le variabili d'ambiente

Crea .env nella radice del repository.
OPENCLAW_IMAGE=openclaw:latest
OPENCLAW_GATEWAY_TOKEN=change-me-now
OPENCLAW_GATEWAY_BIND=lan
OPENCLAW_GATEWAY_PORT=18789

OPENCLAW_CONFIG_DIR=/home/$USER/.openclaw
OPENCLAW_WORKSPACE_DIR=/home/$USER/.openclaw/workspace

GOG_KEYRING_PASSWORD=change-me-now
XDG_CONFIG_HOME=/home/node/.openclaw
Genera segreti robusti:
openssl rand -hex 32
Non salvare questo file nel commit.Questo file .env è per variabili d’ambiente del container/runtime come OPENCLAW_GATEWAY_TOKEN. L’autenticazione memorizzata del provider OAuth/chiave API vive nel mount ~/.openclaw/agents/<agentId>/agent/auth-profiles.json.
9

Configurazione Docker Compose

Crea o aggiorna 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:
      # Consigliato: mantieni il Gateway solo loopback sulla VM; accedi tramite tunnel SSH.
      # Per esporlo pubblicamente, rimuovi il prefisso `127.0.0.1:` e configura il firewall di conseguenza.
      - "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 serve solo per comodità durante il bootstrap, non sostituisce una corretta configurazione del gateway. Imposta comunque l’autenticazione (gateway.auth.token o password) e usa impostazioni di bind sicure per il tuo deployment.
10

Passaggi runtime condivisi per Docker su VM

Usa la guida runtime condivisa per il flusso host Docker comune:
11

Note di avvio specifiche per GCP

Su GCP, se la build fallisce con Killed o exit code 137 durante pnpm install --frozen-lockfile, la VM è rimasta senza memoria. Usa almeno e2-small, oppure e2-medium per build iniziali più affidabili.Quando fai il bind su LAN (OPENCLAW_GATEWAY_BIND=lan), configura un’origine browser fidata prima di continuare:
docker compose run --rm openclaw-cli config set gateway.controlUi.allowedOrigins '["http://127.0.0.1:18789"]' --strict-json
Se hai cambiato la porta del gateway, sostituisci 18789 con la porta configurata.
12

Accedi dal tuo laptop

Crea un tunnel SSH per inoltrare la porta del Gateway:
gcloud compute ssh openclaw-gateway --zone=us-central1-a -- -L 18789:127.0.0.1:18789
Apri nel browser:http://127.0.0.1:18789/Ristampa un link dashboard pulito:
docker compose run --rm openclaw-cli dashboard --no-open
Se la UI richiede l’autenticazione con segreto condiviso, incolla il token o la password configurati nelle impostazioni della Control UI. Questo flusso Docker scrive un token per impostazione predefinita; se cambi la configurazione del container in autenticazione con password, usa invece quella password.Se la Control UI mostra unauthorized o disconnected (1008): pairing required, approva il dispositivo browser:
docker compose run --rm openclaw-cli devices list
docker compose run --rm openclaw-cli devices approve <requestId>
Ti serve di nuovo il riferimento su persistenza condivisa e aggiornamenti? Vedi Docker VM Runtime e Aggiornamenti Docker VM Runtime.

Troubleshooting

Connessione SSH rifiutata La propagazione della chiave SSH può richiedere 1-2 minuti dopo la creazione della VM. Attendi e riprova. Problemi con OS Login Controlla il tuo profilo OS Login:
gcloud compute os-login describe-profile
Assicurati che il tuo account abbia i permessi IAM richiesti (Compute OS Login o Compute OS Admin Login). Memoria esaurita (OOM) Se la build Docker fallisce con Killed e exit code 137, la VM è stata terminata per OOM. Passa a e2-small (minimo) o e2-medium (consigliato per build locali affidabili):
# Ferma prima la VM
gcloud compute instances stop openclaw-gateway --zone=us-central1-a

# Cambia tipo di macchina
gcloud compute instances set-machine-type openclaw-gateway \
  --zone=us-central1-a \
  --machine-type=e2-small

# Avvia la VM
gcloud compute instances start openclaw-gateway --zone=us-central1-a

Service account (best practice di sicurezza)

Per uso personale, il tuo account utente predefinito va benissimo. Per automazione o pipeline CI/CD, crea un service account dedicato con permessi minimi:
  1. Crea un service account:
    gcloud iam service-accounts create openclaw-deploy \
      --display-name="OpenClaw Deployment"
    
  2. Concedi il ruolo Compute Instance Admin (oppure un ruolo personalizzato più ristretto):
    gcloud projects add-iam-policy-binding my-openclaw-project \
      --member="serviceAccount:openclaw-deploy@my-openclaw-project.iam.gserviceaccount.com" \
      --role="roles/compute.instanceAdmin.v1"
    
Evita di usare il ruolo Owner per l’automazione. Usa il principio del privilegio minimo. Vedi https://cloud.google.com/iam/docs/understanding-roles per i dettagli sui ruoli IAM.

Passaggi successivi