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を参照してください。


クイックパス(経験豊富な運用者向け)

  1. Hetzner VPSをプロビジョニング
  2. Dockerをインストール
  3. OpenClawリポジトリをクローン
  4. ホスト上に永続ディレクトリを作成
  5. .envdocker-compose.ymlを設定
  6. 必要なバイナリをイメージに組み込む
  7. docker compose up -d
  8. 永続化と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用

これらは例であり、完全なリストではありません。 同じパターンを使用して必要な数だけバイナリをインストールできます。

後で追加のバイナリに依存する新しいスキルを追加する場合は:

  1. Dockerfileを更新
  2. イメージを再ビルド
  3. コンテナを再起動

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コンテナ一時的再起動可能安全に破棄可能