OpenClaw on Hetzner(Docker、本番VPSガイド)
目標
Hetzner VPSでDockerを使用してOpenClaw Gatewayを永続的に実行し、永続状態、組み込みバイナリ、安全な再起動動作を実現します。
「月額約$5でOpenClawを24時間365日稼働」したい場合、これが最もシンプルで信頼性の高いセットアップです。 Hetznerの料金は変動します。最小のDebian/Ubuntu VPSを選び、OOMが発生したらスケールアップしてください。
何をするのか(シンプルに説明)
- 小さなLinuxサーバー(Hetzner VPS)をレンタル
- Docker(隔離されたアプリランタイム)をインストール
- DockerでOpenClaw Gatewayを起動
- ホスト上に~/.openclaw + ~/.openclaw/workspaceを永続化(再起動/再構築後も保持)
- SSHトンネル経由でラップトップからControl UIにアクセス
Gatewayへのアクセス方法:
- ラップトップからのSSHポートフォワーディング
- ファイアウォールとトークンを自分で管理する場合は直接ポート公開
このガイドではHetzner上のUbuntuまたはDebianを想定しています。 別のLinux VPSを使用している場合は、パッケージを適宜マッピングしてください。 一般的なDockerフローについては、Dockerを参照してください。
クイックパス(経験豊富な運用者向け)
- Hetzner VPSをプロビジョニング
- Dockerをインストール
- OpenClawリポジトリをクローン
- ホスト上に永続ディレクトリを作成
- .envとdocker-compose.ymlを設定
- 必要なバイナリをイメージに組み込む
- docker compose up -d
- 永続化とGatewayアクセスを確認
必要なもの
- rootアクセス権を持つHetzner VPS
- ラップトップからのSSHアクセス
- SSHとコピー&ペーストの基本的な知識
- 約20分
- DockerとDocker Compose
- モデル認証情報
- オプションのプロバイダー認証情報
- WhatsApp QRコード
- Telegram botトークン
- Gmail OAuth
1) VPSをプロビジョニング
HetznerでUbuntuまたはDebian VPSを作成します。
rootとして接続:
ssh root@YOUR_VPS_IP
このガイドでは、VPSがステートフルであることを前提としています。 使い捨てインフラとして扱わないでください。
2) Dockerをインストール(VPS上で)
apt-get update
apt-get install -y git curl ca-certificates
curl -fsSL https://get.docker.com | sh
確認:
docker --version
docker compose version
3) OpenClawリポジトリをクローン
git clone https://github.com/openclaw/openclaw.git
cd openclaw
このガイドでは、バイナリの永続性を保証するためにカスタムイメージをビルドすることを前提としています。
4) ホスト上に永続ディレクトリを作成
Dockerコンテナは一時的です。 すべての長期的な状態はホスト上に存在する必要があります。
mkdir -p /root/.openclaw
mkdir -p /root/.openclaw/workspace
# コンテナユーザー(uid 1000)に所有権を設定:
chown -R 1000:1000 /root/.openclaw
chown -R 1000:1000 /root/.openclaw/workspace
5) 環境変数を設定
リポジトリルートに.envを作成。
OPENCLAW_IMAGE=openclaw:latest
OPENCLAW_GATEWAY_TOKEN=change-me-now
OPENCLAW_GATEWAY_BIND=lan
OPENCLAW_GATEWAY_PORT=18789
OPENCLAW_CONFIG_DIR=/root/.openclaw
OPENCLAW_WORKSPACE_DIR=/root/.openclaw/workspace
GOG_KEYRING_PASSWORD=change-me-now
XDG_CONFIG_HOME=/home/node/.openclaw
強力なシークレットを生成:
openssl rand -hex 32
このファイルをコミットしないでください。
6) 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:
# 推奨: GatewayをVPS上でloopbackのみに保ち、SSHトンネル経由でアクセス。
# 公開する場合は、`127.0.0.1:`プレフィックスを削除し、適切にファイアウォールを設定してください。
- "127.0.0.1:${OPENCLAW_GATEWAY_PORT}:18789"
# オプション: iOS/AndroidノードをこのVPSに対して実行し、Canvas hostが必要な場合のみ。
# 公開する場合は、/gateway/securityを読み、適切にファイアウォールを設定してください。
# - "18793:18793"
command:
[
"node",
"dist/index.js",
"gateway",
"--bind",
"${OPENCLAW_GATEWAY_BIND}",
"--port",
"${OPENCLAW_GATEWAY_PORT}"
]
7) 必要なバイナリをイメージに組み込む(重要)
実行中のコンテナ内でバイナリをインストールするのは罠です。 ランタイムでインストールされたものは再起動時に失われます。
スキルに必要なすべての外部バイナリは、イメージビルド時にインストールする必要があります。
以下の例は、3つの一般的なバイナリのみを示しています:
- gog Gmailアクセス用
- goplaces Google Places用
- wacli WhatsApp用
これらは例であり、完全なリストではありません。 同じパターンを使用して必要な数だけバイナリをインストールできます。
後で追加のバイナリに依存する新しいスキルを追加する場合は:
- 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"]
8) ビルドと起動
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
9) Gatewayを確認
docker compose logs -f openclaw-gateway
成功:
[gateway] listening on ws://0.0.0.0:18789
ラップトップから:
ssh -N -L 18789:127.0.0.1:18789 root@YOUR_VPS_IP
開く:
http://127.0.0.1:18789/
Gatewayトークンを貼り付けます。
何がどこに永続化されるか(信頼できる情報源)
OpenClawはDockerで実行されますが、Dockerは信頼できる情報源ではありません。 すべての長期的な状態は、再起動、再構築、再起動を生き残る必要があります。
| コンポーネント | 場所 | 永続化メカニズム | 備考 |
|---|---|---|---|
| Gateway設定 | /home/node/.openclaw/ | ホストボリュームマウント | openclaw.json、トークンを含む |
| モデル認証プロファイル | /home/node/.openclaw/ | ホストボリュームマウント | OAuthトークン、APIキー |
| スキル設定 | /home/node/.openclaw/skills/ | ホストボリュームマウント | スキルレベルの状態 |
| Agent workspace | /home/node/.openclaw/workspace/ | ホストボリュームマウント | コードとAgentアーティファクト |
| WhatsAppセッション | /home/node/.openclaw/ | ホストボリュームマウント | QRログインを保持 |
| Gmailキーリング | /home/node/.openclaw/ | ホストボリューム + パスワード | GOG_KEYRING_PASSWORDが必要 |
| 外部バイナリ | /usr/local/bin/ | Dockerイメージ | ビルド時に組み込む必要がある |
| Nodeランタイム | コンテナファイルシステム | Dockerイメージ | イメージビルドごとに再構築 |
| OSパッケージ | コンテナファイルシステム | Dockerイメージ | ランタイムでインストールしない |
| Dockerコンテナ | 一時的 | 再起動可能 | 安全に破棄可能 |