2026年、SREとプラットフォームエンジニアはApple Silicon Mac mini1台にOpenClawのstagingゲートウェイと本番ゲートウェイを同居させたいと考える。理由は単純で、調達より「日16.9ドル前後から借りられるクラウドmacOS」を先に回した方が早い。だが設定ルートを共有すると、staging側のnpm linkや一時的なツール許可リストが本番のsqliteに書き込み、障害対応が「誰が最後に触ったか」探偵になる。PATHだけ分けてもlaunchdのplistが同一Labelを指せばlaunchctl kickstart -kで意図しないプロセスが再起動する。本稿ではchmod 700の二重ホーム、ポート8787/8788、ログパスの分離、ThrottleIntervalを最低10秒に上げたデバッグ運用、そして先にdoctorを通す5分スモークをまとめる。関連してEADDRINUSEとlsof、初回PATHとLaunchEnvironmentVariables、doctor診断を併読してほしい。
監査で聞かれる三問──どのディレクトリがどのAPIキーを保持するか、どのLabelがどのポートをLISTENするか、最後に緑だったdoctorログの保管場所──に即答できる状態をゴールとする。
運用メモとして、各環境のlaunchctl print出力を週次でスナップショット化し、差分が出たら即レビューに回すと、静かな設定ドリフトを早期に拾える。
1台二役の理由
クラウドMac miniはlaunchd挙動・キーチェーン・Safari併走など、Linux CIでは再現しづらい境界条件をそのまま持つ。PoCではstagingを1日複数回マージし、本番は変更窓だけ触る運用が多い。二つのプロファイルを「フラグで切替」ではなく隔離境界として扱うと、権限レビューで説明しやすい。ディスクは512GBクラスでも、誤った本番接続1回の損失より安価だ。
財務への説明では「日額16.9USD前後のレンタルで二重のゲートウェイ検証が可能」と数字で示すと通りやすい。金属機二台を買う前に、まず物理挙動を借りて確かめるのが現実的だ。
ディレクトリと秘密情報
~/.openclaw-stagingと~/.openclaw-prodを作り、chmod 700で他ユーザから見えないようにする。stagingを本番へシンボリックリンクしない。READMEに作成日、オーナー、最終doctor成功時刻、ログローテーション方針(単一ファイル128MB上限など)を書く。将来ユーザ分離へ移行する際もディレクトリ名を変えずに済む。
バックアップは環境ごとにtarを分け、復元手順をRunbook化する。同じ tarball を二環境で使い回すと秘密が混線する。
plist・ログ・環境変数
com.example.openclaw.gateway.stagingのようにLabelを絶対に重複させない。StandardOutPathとStandardErrorPathは~/Library/Logs/OpenClaw/以下でファイル名を分ける。LaunchEnvironmentVariablesにはwhich nodeで確認した絶対パス、Homebrewやvoltaのshimを先頭に置いたPATH、そしてOPENCLAW_PROFILE_DIRのようなプロファイル根変数を入れる。クラッシュループ時はThrottleIntervalを10秒以上にし、ログ洪水を止める。
ポート責務マトリクス
| 項目 | staging | 本番 |
|---|---|---|
| TCPポート | 8787 | 8788 |
| 設定ルート | ~/.openclaw-staging | ~/.openclaw-prod |
| LaunchAgent | …staging | …prod |
| キー轮换 | 週次も可 | 変更窓に合わせ月次など |
| doctor | マージ前必須 | タグ付け後必須 |
リバプロとループバックの罠
nginxやCaddyでTLS終端しループバックへ転送する構成では、ゲートウェイを127.0.0.1に限定し、不要な0.0.0.0バインドを避ける。アイドルタイムアウトはstagingと本番で5%以内に揃えないと再現性が崩れる。security find-identity -v -p codesigningのスクショを添付し、署名材料が混線していないことを示す。
障害時にkillall nodeだけを打つとlaunchd外の第三プロセスが残る。必ずbootoutとポート解放の順序をRunbookに固定する。
チェックリスト
- ディレクトリ作成と
chmod 700、ls -leでACL確認。 lsofで8787/8788が空いていることを確認。- plist差分はLabel・パス・ポート・環境変数以外を禁止。
- 各ルートで
doctorを実行しログをチケットへ。 - stagingを先に立ち上げ、127.0.0.1:8787へ3回連続200を確認(間隔2秒)。
- 本番をbootstrapし8788で同様に確認。
- plistのSHA-256を変更管理へ登録。
- ロールバック手順(本番
bootout→staging単独)をリンク。
FAQ
設定ファイルだけ分ければ十分?
sqliteやキャッシュが衝突するのでディレクトリ単位の分離が必要。
単一ドメインしかない
SNIやパスで二つのループバックポートへ振り分ける。
セキュリティ監査への提示物は?
別Label、別ログ、別APIキー、別タイムスタンプのdoctor出力。
Apple Silicon Mac miniは二つのNodeゲートウェイとlog streamを同時に回しても静音性が高く、デスク上の検証に向く。MacHTMLのクラウドminiはSSHと任意のVNCを組み合わせられるため、plistを二人で突き合わせる際にノートPCを郵送する必要がない。試験終了後はインスタンスを停止し、暦日ベースの課金だけを支払う──これがOpenClawのような短期プロファイル検証と相性が良い。
stagingは頻繁に壊れて良いが、本番は退屈であるべきだ。レンタルmacOSはその「頻繁さ」と「退屈さ」を同じ金属上で両立させる現実解になる。