AI / 自動化 2026 年 4 月 22 日

OpenClaw ステージングと本番 launchd プロファイル分離:2026 レンタル Mac mini(VmMac)

VmMac エンジニアリングチーム 2026 年 4 月 22 日 約 21 分で読了

OpenClaw を出荷するプラットフォームエンジニアは、1 台のレンタル Apple Silicon Mac miniでやがて地味に聞こえる危機に直面します。ステージング実験が本番ゲートウェイを汚染する—同じ状態ディレクトリを読む、同じ LaunchAgent ラベル接頭辞を共有する、同じ localhost ポートを束縛する。この 2026 ランブックはホストに監査可能な二つの人格を与える方法—別々の OpenClaw ホーム接頭辞、衝突しない plist ラベル、明示的な LimitLoadToSessionType、インシデント中に grep できる環境変数優先度表—を説明します。シークレットと plist の安全ヘッドレスと GUI セッションゲートウェイ復旧と併読し、再起動が自己破壊的な自動化ループにならないようにしてください。

VmMac は香港・日本・韓国・シンガポール・米国でノードと SSH、任意の VNC を提供しますが、プロファイル分離は依然としてあなたの契約です。

共有記憶喪失なしに 1 台に二つの人格

ステージングと本番を、電源と NVMe を共有する二つの艦隊として扱ってください。別々の設定ルートログパスAPI キーが必要です—「同じキーでモデルだけ違う」は禁止です。ステージングを本番ディレクトリへシンボリックリンクするチートは、共有ビルドエージェントの最悪部分を再現します。疲れた人間でも守れる命名を文書化し、OPENCLAW_HOME_STGOPENCLAW_HOME_PRD は LaunchAgent plist の EnvironmentVariables にだけ置き、対話 SSH が変えうるシェルプロファイルには置かないでください。

  • 数値ガードレール:両ゲートウェイ同時稼働時は NVMe に少なくとも 40 GB 空きを確保。SQLite キューとローカルモデルキャッシュが同じディスク予算を奪い合います。
  • 数値ガードレール:計測余力がない限り、同時進行の外向き webhook 扇出クライアントは 30 までに制限。
  • 数値ガードレール:ベンダーが要求しなくてもステージングトークンは 14 日ごとにローテーション。

ディレクトリレイアウト:状態、ログ、「同期しない」規律

両ルートをデスクトップでも iCloud 隣接でもない、オペレータ所有の接頭辞(例:/usr/local/var/openclaw-*)の下に置いてください。香港・日本・韓国・シンガポール・米国で同じレイアウトをミラーし、rsync 診断スクリプトを同一に保ちます。構造化ログとローテーションとセットにし、ステージングが長期休暇中にディスクを埋めて本番ログを追い出さないようにしてください。

ディスク衛生:ステージング JSONL が保持ジョブなしで 1 日 2 GB を超えて増えるなら、ローテーションを直すまで設定変更の昇格をブロックしてください。

LaunchAgent ラベル、ThrottleInterval、LimitLoadToSessionType

別々の逆 DNS ラベル(例:com.yourorg.openclaw.gateway.stgcom.yourorg.openclaw.gateway.prd)を使い、大文字小文字だけの差は避けてください。ThrottleIntervalゲートウェイ復旧 の最悪再起動時間に合わせ、本番がソケットを排出している間に壊れたステージング plist を launchd が蘇生し続けないようにします。GUI 補助が必要なステージングだけ LimitLoadToSessionType に Aqua を含め、本番はヘッドレスのままにして TCC 面を減らしてください。

ポート、ループバック束縛、StandardOutPath の衛生

デフォルトでステージングを 127.0.0.1:18789、本番を 127.0.0.1:18790 に束縛—社内標準が奪っているなら調整してもよいですが、オンコールが覚えやすいよう奇偶分割を残してください。両エージェントの StandardOutPathStandardErrorPath が同一ファイルを指さないようにしてください。

環境変数優先度マトリクス(オペレータチートシート)

ソース ステージング優先度 本番優先度 インシデントのコツ
LaunchAgent plist EnvironmentVariables デーモンではシェルより勝つ デーモンではシェルより勝つ 常に launchctl print gui/$(id -u)/com...stg で確認
SSH セッションの ~/.zshenv 人間のみ plist を上書きしてはいけない シェルからシークレットを削除
状態ディレクトリ内の .env アプリローカル既定は可 厳格な許可リスト stg/prd 間でシンボリックリンクしない
黄金律:launchctl print がどの環境変数が勝ったか証明できないなら、オペレータは推測します—推測は本番キーがステージング Slack ボットに漏れる経路です。

「API キーだけ変えて本番 plist を再利用しよう」という要求には差分優先ポリシーで応えてください。ステージング plist は本番と少なくともつの可視キー—ポート、ラベル、ログパス、状態ルート、スロットル—で異なり、誤った cp がレビューで即座に見えるようにします。

昇格前の 7 ステップ・スモークとロールバック

  1. ステージング plist をアンロードし、lsof でポートが閉じたことを確認。
  2. フォレンジクス用にステージング状態の tarball をエクスポート(本番では再利用しない)。
  3. カナリアトークンでステージングリスナーに合成 webhook。
  4. リージョン間で plist を diff—ホスト名以外ゼロ差分を期待。
  5. 本番 plist をロードし、ヘルスエンドポイントが 12 秒以内に 200 を返すことを確認。
  6. 既知良好の本番キュー深さメトリクスを再生し、ベースラインの 3 倍 を超えたらアラート。
  7. ロールバックを文書化:prd をアンロードし、git タグから前の plist に戻す。

コミュニティ報告では、エージェントセッション内からゲートウェイ再起動を呼び出すと特定の launchd 設定でクリーンな再ローンチなしに終了することがあります。昇格はまず営業時間に人間がゲートウェイを再起動する設計にしてください。手順を インストールとデプロイガイド に紐づけ、「サービス再インストール」を部族知識ではなく版固定のステップにします。

二重プロファイルの 5 リージョン整合チェック

毎週、すべての VmMac リージョンで同じ 7 ステップ昇格リハーサルを実行してください。乖離は多くの場合パスのタイポロケール固有の plist エンコードです。リポジトリに保存している実際の plist キーと ヘルプセンター の例を揃えてください。

FAQ:1 台の Mac mini 上のステージングと本番 OpenClaw

1 つの Node バイナリを共有できる?はい—バージョンはグローバルに固定。状態ディレクトリは共有しない。

ステージングは本番ベンダー API を叩くべき?サンドボックスを優先。不可ならレート制限と明示的ラベル付け。

ロールバックの所有者は?プラットフォームチーム。VmMac は plist を戻しません。

2026 年も Mac mini M4 がデュアルゲートウェイ金属に合う理由

Apple Silicon Mac mini は二つのゲートウェイプロセス、ローカル SQLite キュー、バックグラウンドモデルヘルパーに騒がしい隣人なしのシングルテナントスループットを提供します。リージョン単位のレンタルでステージングを開発者近くに置きつつ、本番を上流 SaaS の出口近くに保てます。VmMac の SSH ファーストワークフローはアプリコードと同じ git パイプラインで plist 変更を強制し、香港・日本・韓国・シンガポール・米国で同一に検証できます。launchd 分離を配管の細事ではなく製品品質として扱えば、OpenClaw はデモからインフラになります。

予備リージョンで二重 plist をリハーサル

料金 からリージョン内に Mac mini を追加し、主ゲートウェイを危険にさらさず昇格を練習しましょう。