要件
- Podman (ルートレス)
- 初回セットアップ用の sudo 権限 (ユーザー作成、イメージビルド)
クイックスタート
1. 初回セットアップ (リポジトリルートで実行。ユーザー作成、イメージビルド、起動スクリプト配置を行います):~openclaw/.openclaw/openclaw.json (gateway.mode="local" を設定) も作成されます。
デフォルトでは、コンテナは systemd サービスとしては インストールされません。起動は手動です (後述)。自動起動と再起動を含む本番向け構成にしたい場合は、代わりに systemd の Quadlet ユーザーサービスとして導入してください。
OPENCLAW_PODMAN_QUADLET=1 を設定しても同じです。コンテナと起動スクリプトだけを入れたい場合は --container を使います。)
任意のビルド時環境変数 (setup-podman.sh 実行前に設定):
OPENCLAW_DOCKER_APT_PACKAGES— イメージのビルド中に追加の apt パッケージをインストールしますOPENCLAW_EXTENSIONS— 拡張機能の依存関係を事前インストールします (スペース区切りの拡張機能名。例:diagnostics-otel matrix)
http://127.0.0.1:18789/ を開き、~openclaw/.openclaw/.env にあるトークン、またはセットアップ時に表示された値を使ってアクセスします。
Systemd (Quadlet、オプション)
./setup-podman.sh --quadlet (または OPENCLAW_PODMAN_QUADLET=1) を実行すると、Podman Quadlet ユニットが入り、ゲートウェイが 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
~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: ユーザーには subuid と subgid の範囲が必要です。多くのディストリビューションでは、ユーザー作成時に自動割り当てされます。セットアップで警告が出た場合は、
/etc/subuidと/etc/subgidに次の行を追加してください。その後、そのユーザーとしてゲートウェイを起動します (cron や systemd から実行する場合など)。 -
設定:
/home/openclaw/.openclawにアクセスできるのはopenclawと root のみです。設定編集は、ゲートウェイ起動後に Control UI を使うか、sudo -u openclaw $EDITOR /home/openclaw/.openclaw/openclaw.jsonを実行してください。
環境と設定
- トークン:
~openclaw/.openclaw/.envにOPENCLAW_GATEWAY_TOKENとして保存されます。存在しない場合は、setup-podman.shとrun-openclaw-podman.shがopenssl、python3、またはodを使って生成します。 - 任意設定: 同じ
.envで、プロバイダーキー (例:GROQ_API_KEY、OLLAMA_API_KEY) やその他の OpenClaw 環境変数を設定できます。 - ホストポート: デフォルトでは、スクリプトは
18789(Gateway) と18790(ブリッジ) をマップします。 起動時に、 ホスト のポートマッピングをOPENCLAW_PODMAN_GATEWAY_HOST_PORTとOPENCLAW_PODMAN_BRIDGE_HOST_PORTで上書きします。 - ゲートウェイの bind: デフォルトでは、
run-openclaw-podman.shは安全なローカルアクセスのため--bind loopbackで起動します。LAN に公開する場合はOPENCLAW_GATEWAY_BIND=lanを設定し、openclaw.jsonでgateway.controlUi.allowedOriginsを構成するか、明示的に host-header fallback を有効にしてください。 - パス: ホスト側の既定値は
~openclaw/.openclawと~openclaw/.openclaw/workspaceです。必要に応じてOPENCLAW_CONFIG_DIRとOPENCLAW_WORKSPACE_DIRで上書きします。
ストレージモデル
- 永続的なホストデータ:
OPENCLAW_CONFIG_DIRとOPENCLAW_WORKSPACE_DIRはコンテナにバインドマウントされ、ホスト上の状態を保持します。 - 一時サンドボックス tmpfs:
agents.defaults.sandboxを有効にすると、ツールサンドボックスコンテナは/tmp、/var/tmp、/runにtmpfsをマウントします。これらはメモリ上の一時領域で、サンドボックスコンテナ終了とともに消えます。最上位の 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 へストリーミングされるため、呼び出し元の private な一時ディレクトリがセットアップの妨げになることはありません。
便利なコマンド
- ログ: 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— ホスト上の設定とワークスペースは保持されます。
トラブルシューティング
- 設定や auth-profiles で Permission denied (EACCES) が出る: コンテナはデフォルトで
--userns=keep-idを使い、スクリプトを実行したホストユーザーと同じ uid/gid で動きます。ホスト側のOPENCLAW_CONFIG_DIRとOPENCLAW_WORKSPACE_DIRがそのユーザー所有になっているか確認してください。 - Gateway の起動がブロックされる (
gateway.mode=localがない):~openclaw/.openclaw/openclaw.jsonが存在し、gateway.mode="local"が設定されていることを確認してください。setup-podman.shは、存在しない場合はこのファイルを作成します。 openclawユーザーでルートレス Podman が失敗する:/etc/subuidと/etc/subgidにopenclaw用の行 (例:openclaw:100000:65536) があるか確認してください。なければ追加して再実行します。- コンテナ名が使用中: 起動スクリプトは
podman run --replaceを使用するため、再開時に既存のコンテナが置き換えられます。 手動でクリーンアップするには:podman rm -f openclaw。 openclawとして実行したときにスクリプトが見つからない:run-openclaw-podman.shがopenclawのホーム (例:/home/openclaw/run-openclaw-podman.sh) にコピーされるよう、setup-podman.shを実行済みか確認してください。- Quadlet サービスが見つからないか、起動に失敗する:
.containerファイルを編集した後、sudo systemctl --machine openclaw@ --user daemon-reloadを実行します。 Quadlet には cgroups v2 が必要です:podman info --format '{{.Host.CgroupsVersion}}'が2を表示するはずです。
オプション: 自分のユーザーで実行する
専用のopenclaw ユーザーを使わず、通常ユーザーとしてゲートウェイを動かすこともできます。その場合は、イメージをビルドし、OPENCLAW_GATEWAY_TOKEN を含む ~/.openclaw/.env を作成し、--userns=keep-id と ~/.openclaw へのマウント付きでコンテナを起動します。起動スクリプトは openclaw ユーザーフロー向けなので、単一ユーザー構成ではスクリプト内の podman run 相当を手動実行し、設定とワークスペースを自分のホームへ向けてください。通常は、setup-podman.sh を使い、openclaw ユーザーで分離運用する方法を推奨します。