GCP Compute Engine에서 OpenClaw 실행 (Docker, 프로덕션 VPS 가이드)
목표
Docker를 사용하여 GCP Compute Engine VM에서 지속적인 OpenClaw Gateway를 실행하며, 내구성 있는 상태, 내장된 바이너리 및 안전한 재시작 동작을 갖춥니다.
"월 ~$5-12로 OpenClaw 24/7"을 원한다면, 이것이 Google Cloud에서 신뢰할 수 있는 설정입니다. 가격은 머신 유형과 지역에 따라 다릅니다; 작업 부하에 맞는 가장 작은 VM을 선택하고 OOM이 발생하면 확장하세요.
간단히 말하면 무엇을 하나요?
- GCP 프로젝트 생성 및 청구 활성화
- Compute Engine VM 생성
- Docker 설치 (격리된 앱 런타임)
- Docker에서 OpenClaw Gateway 시작
- 호스트에서 ~/.openclaw + ~/.openclaw/workspace 지속 (재시작/재빌드 후에도 유지)
- SSH 터널을 통해 노트북에서 Control UI 접근
Gateway는 다음을 통해 접근할 수 있습니다:
- 노트북에서 SSH 포트 포워딩
- 방화벽 및 token을 직접 관리하는 경우 직접 포트 노출
이 가이드는 GCP Compute Engine의 Debian을 사용합니다. Ubuntu도 작동합니다; 그에 맞게 패키지를 매핑하세요. 일반적인 Docker 흐름은 Docker를 참조하세요.
빠른 경로 (숙련된 운영자)
- GCP 프로젝트 생성 + Compute Engine API 활성화
- Compute Engine VM 생성 (e2-small, Debian 12, 20GB)
- VM에 SSH 접속
- Docker 설치
- OpenClaw 레포지토리 클론
- 영구 호스트 디렉토리 생성
- .env 및 docker-compose.yml 구성
- 필요한 바이너리 베이크, 빌드 및 실행
필요한 것
- GCP 계정 (e2-micro 무료 티어 대상)
- gcloud CLI 설치 (또는 Cloud Console 사용)
- 노트북에서 SSH 접근
- SSH + 복사/붙여넣기에 대한 기본적인 익숙함
- ~20-30분
- Docker 및 Docker Compose
- Model 인증 자격 증명
- 선택적 제공업체 자격 증명
- WhatsApp QR
- Telegram bot token
- Gmail OAuth
1) gcloud CLI 설치 (또는 Console 사용)
옵션 A: gcloud CLI (자동화에 권장)
https://cloud.google.com/sdk/docs/install 에서 설치
초기화 및 인증:
gcloud init
gcloud auth login
옵션 B: Cloud Console
https://console.cloud.google.com 의 웹 UI를 통해 모든 단계를 수행할 수 있습니다.
2) GCP 프로젝트 생성
CLI:
gcloud projects create my-openclaw-project --name="OpenClaw Gateway"
gcloud config set project my-openclaw-project
https://console.cloud.google.com/billing 에서 청구 활성화 (Compute Engine에 필요).
Compute Engine API 활성화:
gcloud services enable compute.googleapis.com
Console:
- IAM & Admin > Create Project로 이동
- 이름 지정 및 생성
- 프로젝트에 대한 청구 활성화
- APIs & Services > Enable APIs로 이동 > "Compute Engine API" 검색 > 활성화
3) VM 생성
머신 유형:
| 유형 | 사양 | 비용 | 비고 |
|---|---|---|---|
| e2-small | 2 vCPU, 2GB RAM | ~$12/월 | 권장 |
| e2-micro | 2 vCPU (공유), 1GB RAM | 무료 티어 대상 | 부하 시 OOM 가능 |
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:
- Compute Engine > VM instances > Create instance로 이동
- 이름: openclaw-gateway
- 지역: us-central1, 영역: us-central1-a
- 머신 유형: e2-small
- 부팅 디스크: Debian 12, 20GB
- 생성
4) VM에 SSH 접속
CLI:
gcloud compute ssh openclaw-gateway --zone=us-central1-a
Console:
Compute Engine 대시보드에서 VM 옆의 "SSH" 버튼을 클릭합니다.
참고: VM 생성 후 SSH 키 전파에 1-2분이 걸릴 수 있습니다. 연결이 거부되면 기다렸다가 재시도하세요.
5) Docker 설치 (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
그룹 변경이 적용되도록 로그아웃 후 다시 로그인:
exit
그런 다음 다시 SSH 접속:
gcloud compute ssh openclaw-gateway --zone=us-central1-a
확인:
docker --version
docker compose version
6) OpenClaw 레포지토리 클론
git clone https://github.com/openclaw/openclaw.git
cd openclaw
이 가이드는 바이너리 지속성을 보장하기 위해 사용자 지정 이미지를 빌드한다고 가정합니다.
7) 영구 호스트 디렉토리 생성
Docker 컨테이너는 임시적입니다. 모든 장기 상태는 호스트에 있어야 합니다.
mkdir -p ~/.openclaw
mkdir -p ~/.openclaw/workspace
8) 환경 변수 구성
레포지토리 루트에 .env를 생성합니다.
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
강력한 시크릿 생성:
openssl rand -hex 32
이 파일을 커밋하지 마세요.
9) Docker Compose 구성
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:
# 권장: VM에서 Gateway를 loopback 전용으로 유지; SSH 터널을 통해 접근.
# 공개적으로 노출하려면, `127.0.0.1:` 접두사를 제거하고 적절히 방화벽을 설정하세요.
- "127.0.0.1:${OPENCLAW_GATEWAY_PORT}:18789"
# 선택사항: 이 VM에 대해 iOS/Android nodes를 실행하고 Canvas host가 필요한 경우에만.
# 공개적으로 노출하는 경우, /gateway/security를 읽고 적절히 방화벽을 설정하세요.
# - "18793:18793"
command:
[
"node",
"dist/index.js",
"gateway",
"--bind",
"${OPENCLAW_GATEWAY_BIND}",
"--port",
"${OPENCLAW_GATEWAY_PORT}"
]
10) 이미지에 필요한 바이너리 베이크 (중요)
실행 중인 컨테이너 내부에 바이너리를 설치하는 것은 함정입니다. 런타임에 설치된 모든 것은 재시작 시 손실됩니다.
Skills에 필요한 모든 외부 바이너리는 이미지 빌드 시 설치해야 합니다.
아래 예시는 세 가지 일반적인 바이너리만 보여줍니다:
- Gmail 접근을 위한 gog
- Google Places를 위한 goplaces
- WhatsApp을 위한 wacli
이들은 예시이며 완전한 목록이 아닙니다. 동일한 패턴을 사용하여 필요한 만큼 많은 바이너리를 설치할 수 있습니다.
나중에 추가 바이너리에 의존하는 새 skills를 추가하는 경우:
- Dockerfile 업데이트
- 이미지 재빌드
- 컨테이너 재시작
Dockerfile 예시
FROM node:22-bookworm
RUN apt-get update && apt-get install -y socat && rm -rf /var/lib/apt/lists/*
# 예시 바이너리 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
# 예시 바이너리 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
# 예시 바이너리 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
# 동일한 패턴을 사용하여 아래에 더 많은 바이너리 추가
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"]
11) 빌드 및 실행
docker compose build
docker compose up -d openclaw-gateway
바이너리 확인:
docker compose exec openclaw-gateway which gog
docker compose exec openclaw-gateway which goplaces
docker compose exec openclaw-gateway which wacli
예상 출력:
/usr/local/bin/gog
/usr/local/bin/goplaces
/usr/local/bin/wacli
12) Gateway 확인
docker compose logs -f openclaw-gateway
성공:
[gateway] listening on ws://0.0.0.0:18789
13) 노트북에서 접근
Gateway 포트를 전달하기 위한 SSH 터널 생성:
gcloud compute ssh openclaw-gateway --zone=us-central1-a -- -L 18789:127.0.0.1:18789
브라우저에서 열기:
http://127.0.0.1:18789/
Gateway token을 붙여넣습니다.
무엇이 어디에 지속되는가 (진실의 원천)
OpenClaw는 Docker에서 실행되지만, Docker는 진실의 원천이 아닙니다. 모든 장기 상태는 재시작, 재빌드 및 재부팅에서 살아남아야 합니다.
| 구성 요소 | 위치 | 지속성 메커니즘 | 비고 |
|---|---|---|---|
| Gateway 구성 | /home/node/.openclaw/ | 호스트 볼륨 마운트 | openclaw.json, token 포함 |
| Model 인증 프로필 | /home/node/.openclaw/ | 호스트 볼륨 마운트 | OAuth token, API 키 |
| Skill 구성 | /home/node/.openclaw/skills/ | 호스트 볼륨 마운트 | Skill 수준 상태 |
| Agent 작업 공간 | /home/node/.openclaw/workspace/ | 호스트 볼륨 마운트 | 코드 및 agent 아티팩트 |
| WhatsApp 세션 | /home/node/.openclaw/ | 호스트 볼륨 마운트 | QR 로그인 보존 |
| Gmail keyring | /home/node/.openclaw/ | 호스트 볼륨 + 비밀번호 | GOG_KEYRING_PASSWORD 필요 |
| 외부 바이너리 | /usr/local/bin/ | Docker 이미지 | 빌드 시 베이크해야 함 |
| Node 런타임 | 컨테이너 파일시스템 | Docker 이미지 | 모든 이미지 빌드마다 재빌드 |
| OS 패키지 | 컨테이너 파일시스템 | Docker 이미지 | 런타임에 설치하지 마세요 |
| Docker 컨테이너 | 임시 | 재시작 가능 | 안전하게 파괴 가능 |
업데이트
VM에서 OpenClaw를 업데이트하려면:
cd ~/openclaw
git pull
docker compose build
docker compose up -d
문제 해결
SSH 연결 거부됨
VM 생성 후 SSH 키 전파에 1-2분이 걸릴 수 있습니다. 기다렸다가 재시도하세요.
OS Login 문제
OS Login 프로필 확인:
gcloud compute os-login describe-profile
계정에 필요한 IAM 권한(Compute OS Login 또는 Compute OS Admin Login)이 있는지 확인하세요.
메모리 부족 (OOM)
e2-micro를 사용하고 OOM이 발생하는 경우, e2-small 또는 e2-medium으로 업그레이드하세요:
# 먼저 VM 중지
gcloud compute instances stop openclaw-gateway --zone=us-central1-a
# 머신 유형 변경
gcloud compute instances set-machine-type openclaw-gateway \
--zone=us-central1-a \
--machine-type=e2-small
# VM 시작
gcloud compute instances start openclaw-gateway --zone=us-central1-a
서비스 계정 (보안 모범 사례)
개인 사용의 경우, 기본 사용자 계정이 잘 작동합니다.
자동화 또는 CI/CD 파이프라인의 경우, 최소 권한을 가진 전용 서비스 계정을 생성하세요:
-
서비스 계정 생성:
gcloud iam service-accounts create openclaw-deploy \ --display-name="OpenClaw Deployment" -
Compute Instance Admin 역할 부여 (또는 더 좁은 사용자 지정 역할):
gcloud projects add-iam-policy-binding my-openclaw-project \ --member="serviceAccount:[email protected]" \ --role="roles/compute.instanceAdmin.v1"
자동화에 Owner 역할을 사용하지 마세요. 최소 권한 원칙을 사용하세요.
IAM 역할 세부정보는 https://cloud.google.com/iam/docs/understanding-roles 을 참조하세요.
다음 단계
- 메시징 channel 설정: Channels
- 로컬 기기를 nodes로 페어링: Nodes
- Gateway 구성: Gateway 구성