Podman

OpenClaw Gateway をルートレス Podman コンテナで実行します。Docker と同じイメージを使用します(リポジトリの Dockerfile からビルド)。

要件

  • Podman(ルートレス)
  • 初回セットアップ用の sudo(ユーザー作成、イメージビルド)

クイックスタート

1. 初回セットアップ(リポジトリルートから実行。ユーザー作成、イメージビルド、起動スクリプトのインストールを行います):

./setup-podman.sh

これにより、Gateway がウィザードなしで起動できるよう最小限の ~openclaw/.openclaw/openclaw.jsongateway.mode="local" を設定)も作成されます。

デフォルトではコンテナは systemd サービスとしてインストールされません。手動で起動します(以下を参照)。自動起動と再起動を備えた本番スタイルのセットアップには、systemd Quadlet ユーザーサービスとしてインストールしてください:

./setup-podman.sh --quadlet

(または OPENCLAW_PODMAN_QUADLET=1 を設定。コンテナと起動スクリプトのみをインストールするには --container を使用。)

任意のビルド時環境変数(setup-podman.sh の前に設定):

  • OPENCLAW_DOCKER_APT_PACKAGES — イメージビルド時に追加の apt パッケージをインストール
  • OPENCLAW_EXTENSIONS — エクステンションの依存関係を事前インストール(スペース区切りのエクステンション名、例:diagnostics-otel matrix

2. Gateway の起動(手動、簡易テスト用):

./scripts/run-openclaw-podman.sh launch

3. オンボーディングウィザード(チャンネルやプロバイダーの追加など):

./scripts/run-openclaw-podman.sh launch setup

http://127.0.0.1:18789/ を開き、~openclaw/.openclaw/.env のトークン(またはセットアップで表示された値)を使用してください。

systemd(Quadlet、任意)

./setup-podman.sh --quadlet(または OPENCLAW_PODMAN_QUADLET=1)を実行した場合、Podman Quadlet ユニットがインストールされ、Gateway が openclaw ユーザーの systemd ユーザーサービスとして実行されます。セットアップ終了時にサービスが有効化・起動されます。

  • 起動:sudo systemctl --machine openclaw@ --user start openclaw.service
  • 停止:sudo systemctl --machine openclaw@ --user stop openclaw.service
  • ステータス:sudo systemctl --machine openclaw@ --user status openclaw.service
  • ログ:sudo journalctl --machine openclaw@ --user -u openclaw.service -f

Quadlet ファイルは ~openclaw/.config/containers/systemd/openclaw.container にあります。ポートや環境変数を変更するには、そのファイル(またはそれが読み込む .env)を編集し、sudo systemctl --machine openclaw@ --user daemon-reload を実行してからサービスを再起動してください。ブート時にサービスが自動起動するのは、openclaw ユーザーで lingering が有効な場合です(loginctl が利用可能な場合、セットアップが設定します)。

初回セットアップで Quadlet を使用しなかった場合に後から追加するには、./setup-podman.sh --quadlet を再実行してください。

openclaw ユーザー(非ログイン)

setup-podman.sh は専用のシステムユーザー openclaw を作成します:

  • シェル:nologin — 対話型ログインなし。攻撃対象領域を削減。

  • **ホーム:**例:/home/openclaw~/.openclaw(設定、ワークスペース)と起動スクリプト run-openclaw-podman.sh を保持。

  • **ルートレス Podman:**ユーザーには subuidsubgid の範囲が必要です。多くのディストリビューションではユーザー作成時に自動的に割り当てられます。セットアップで警告が表示された場合は、/etc/subuid/etc/subgid に行を追加してください:

    openclaw:100000:65536

    その後、そのユーザーとして Gateway を起動(例:cron や systemd から):

    sudo -u openclaw /home/openclaw/run-openclaw-podman.sh
    sudo -u openclaw /home/openclaw/run-openclaw-podman.sh setup
  • 設定:openclaw と root のみが /home/openclaw/.openclaw にアクセスできます。設定を編集するには、Gateway が稼働中ならコントロール UI を使用するか、sudo -u openclaw $EDITOR /home/openclaw/.openclaw/openclaw.json を実行してください。

環境変数と設定

  • トークン:~openclaw/.openclaw/.envOPENCLAW_GATEWAY_TOKEN として保存。setup-podman.shrun-openclaw-podman.sh が未設定の場合に生成します(opensslpython3、または od を使用)。
  • **任意:**その .env にプロバイダーキー(例:GROQ_API_KEYOLLAMA_API_KEY)やその他の OpenClaw 環境変数を設定できます。
  • ホストポート:デフォルトでスクリプトは 18789(Gateway)と 18790(ブリッジ)をマッピングします。起動時に OPENCLAW_PODMAN_GATEWAY_HOST_PORTOPENCLAW_PODMAN_BRIDGE_HOST_PORTホストポートマッピングを上書きできます。
  • **Gateway バインド:**デフォルトでは run-openclaw-podman.sh は安全なローカルアクセスのために --bind loopback で Gateway を起動します。LAN に公開するには OPENCLAW_GATEWAY_BIND=lan を設定し、openclaw.jsongateway.controlUi.allowedOrigins(または明示的なホストヘッダーフォールバックの有効化)を設定してください。
  • **パス:**ホストの設定とワークスペースはデフォルトで ~openclaw/.openclaw~openclaw/.openclaw/workspace です。起動スクリプトが使用するホストパスは OPENCLAW_CONFIG_DIROPENCLAW_WORKSPACE_DIR で上書きできます。

ストレージモデル

  • 永続ホストデータ:OPENCLAW_CONFIG_DIROPENCLAW_WORKSPACE_DIR がコンテナにバインドマウントされ、ホスト上に状態が保持されます。
  • エフェメラルサンドボックス tmpfs:agents.defaults.sandbox を有効にした場合、ツールサンドボックスコンテナは /tmp/var/tmp/runtmpfs をマウントします。これらのパスはメモリバックドでサンドボックスコンテナとともに消失します。トップレベルの Podman コンテナセットアップは独自の tmpfs マウントを追加しません。
  • **ディスク増加のホットスポット:**主な監視パスは media/agents/<agentId>/sessions/sessions.json、トランスクリプト JSONL ファイル、cron/runs/*.jsonl/tmp/openclaw/(または設定した logging.file)配下のローリングファイルログです。

setup-podman.sh はイメージ tar をプライベート一時ディレクトリにステージングし、セットアップ中に選択されたベースディレクトリを表示します。非 root 実行では、そのベースが安全に使用できる場合のみ TMPDIR を受け入れます。それ以外は /var/tmp、次に /tmp にフォールバックします。保存された tar はオーナーのみアクセス可能で、ターゲットユーザーの podman load にストリームされるため、プライベートな呼び出し元の一時ディレクトリがセットアップをブロックすることはありません。

よく使うコマンド

  • **ログ:**Quadlet の場合:sudo journalctl --machine openclaw@ --user -u openclaw.service -f。スクリプトの場合:sudo -u openclaw podman logs -f openclaw
  • **停止:**Quadlet の場合:sudo systemctl --machine openclaw@ --user stop openclaw.service。スクリプトの場合:sudo -u openclaw podman stop openclaw
  • **再起動:**Quadlet の場合:sudo systemctl --machine openclaw@ --user start openclaw.service。スクリプトの場合:起動スクリプトを再実行、または podman start openclaw
  • コンテナの削除:sudo -u openclaw podman rm -f openclaw — ホスト上の設定とワークスペースは保持されます

トラブルシューティング

  • **設定または認証プロファイルでの権限エラー(EACCES):**コンテナはデフォルトで --userns=keep-id を使用し、スクリプトを実行するホストユーザーと同じ uid/gid で動作します。ホストの OPENCLAW_CONFIG_DIROPENCLAW_WORKSPACE_DIR がそのユーザーの所有であることを確認してください。
  • Gateway の起動がブロックされる(gateway.mode=local が見つからない):~openclaw/.openclaw/openclaw.json が存在し、gateway.mode="local" が設定されていることを確認してください。setup-podman.sh はファイルが見つからない場合に作成します。
  • ルートレス Podman が openclaw ユーザーで失敗する:/etc/subuid/etc/subgidopenclaw の行(例:openclaw:100000:65536)が含まれているか確認してください。なければ追加して再起動してください。
  • **コンテナ名が使用中:**起動スクリプトは podman run --replace を使用するため、再起動時に既存のコンテナが置き換えられます。手動でクリーンアップするには:podman rm -f openclaw
  • openclaw として実行時にスクリプトが見つからない:setup-podman.sh を実行して run-openclaw-podman.sh が openclaw のホーム(例:/home/openclaw/run-openclaw-podman.sh)にコピーされていることを確認してください。
  • Quadlet サービスが見つからない、または起動に失敗する:.container ファイルを編集した後、sudo systemctl --machine openclaw@ --user daemon-reload を実行してください。Quadlet は cgroups v2 が必要です:podman info --format '{{.Host.CgroupsVersion}}'2 と表示されるはずです。

任意:自分のユーザーで実行

Gateway を通常のユーザーとして実行する場合(専用の openclaw ユーザーなし):イメージをビルドし、~/.openclaw/.envOPENCLAW_GATEWAY_TOKEN を作成し、--userns=keep-id~/.openclaw へのマウントでコンテナを実行します。起動スクリプトは openclaw ユーザー向けに設計されています。シングルユーザーセットアップでは、スクリプト内の podman run コマンドを手動で実行し、設定とワークスペースを自分のホームに向けることもできます。ほとんどのユーザーには、setup-podman.sh を使って openclaw ユーザーとして実行することを推奨します。設定とプロセスが分離されます。