小型 Linux VM で OpenClaw Gateway を載せる要件は MCP/Streamable HTTP を tailnet のみに閉じる。Compose で Tailscale を サイドカーにし、状態は永続ボリューム、Gateway はブリッジか 127.0.0.1 のみ。publish は SG より先に効く。Docker とネイティブの整理は
OpenClaw 遠隔 Mac デプロイ実装
へ。
1. Compose サイドカーと ports:
サイドカーと Gateway は同一ブリッジ、Tailscale 状態はコンテナ別ボリュームで共有しない。ports: "443:443" や 0.0.0.0 待受は公網へ穴が開く。MagicDNS と tailnet 内 TLS 終端、openclaw.json も同規律。docker ps で公開マッピングを先に確認。
2. tailnet と HTTPS/Bearer
tailscale up 後は tailscale cert で信頼チェーンを整える。トークンは env/secret で注入しレイヤに焼かない。Bearer はプロキシと Gateway で二重化、401 と TLS はログ分離。秘密は ローリング再起動で回す。
3. Serve と Funnel
serve は tailnet 内、Funnel は公網露出。ゼロ公開なら Funnel オフと監査。ホスト名・パス接頭辞と Gateway ベースは同一変更で揃える。 stdio/Streamable HTTP と ENOENT も参照。
4. 接続失敗の順序
1)tailscale status と NeedsLogin。2)curl -vk。3)Bearer 付き curl で TLS と 401 を分離。4)stdio 可・HTTP 不可ならタイムアウトとボディ上限。ACL 絞り訓練をスクリプト化。
- 再起動で状態ボリューム喪失。
- ホスト
tailscaledとコンテナのルート衝突。
Linux で制御面、重い半分は macOS
Gateway は安い Linux、公証・署名・GUI は macOS へ。tailnet の Compose と 専有 Mac mini で帯域と Xcode を活かし公網は閉じたまま。待機は約 4W、Gatekeeper/SIP/FileVault で無人向き。Mac mini M4 を Macstripe のホーム から同じ tailnet に載せこのスタックとペアにするのが現実的で、Mac mini M4 は今が手頃です。