Claw-Empire VPSデプロイ トラブルシューティング記録

発生した問題と解決策

問題1: Caddy → pm2 接続タイムアウト(502 Bad Gateway)

症状:

  • https://claw.siruera.com にアクセスすると 502 Bad Gateway
  • VPS上の curl http://127.0.0.1:8790 は正常応答

原因(2つ):

1-A. pm2のリッスンアドレス

  • .envHOST=127.0.0.1 → Docker bridge IP(172.19.0.1)から接続不可
  • 修正: HOST=0.0.0.0 に変更

1-B. iptables/UFWファイアウォール

  • UFW の INPUT ポリシーが DROP → Docker(172.19.0.0/16)からポート8790への通信がブロック
  • VPSホスト側の curl 172.19.0.1:8790 は成功するが、Docker内から wget 172.19.0.1:8790 はタイムアウト
  • 修正: ufw allow from 172.19.0.0/16 to any port 8790 proto tcp

診断コマンド:

# リッスンアドレス確認
ss -tlnp sport = :8790
 
# Docker内部からの接続テスト
docker exec n8n-caddy-1 wget -qO- --timeout=5 http://172.19.0.1:8790/api/company
 
# Caddyログ確認
docker logs n8n-caddy-1 2>&1 | grep claw | tail -20

問題2: 静的ファイル 403 Forbidden

症状:

  • HTML(/)は 200 OK で返るが、/assets/*.js, /assets/*.css が 403
  • ブラウザでは白い画面

原因:

  • CORSミドルウェア(server/security/auth.ts)が Origin チェック
  • ALLOWED_ORIGINS 環境変数が未設定 → claw.siruera.com が許可リストに含まれない

修正:

# .env に追加
echo 'ALLOWED_ORIGINS=https://claw.siruera.com' >> /opt/claw-empire/.env
pm2 restart claw-empire --update-env

診断コマンド:

# Origin付きでcurlテスト
curl -sI -H 'Origin: https://claw.siruera.com' http://127.0.0.1:8790/assets/index-620Rcgyd.js
# → 200 OK なら CORS 解決

問題3: SSL証明書取得失敗

症状:

  • Caddy が Let’s Encrypt から証明書を取得できない
  • ログに NXDOMAIN looking up A for claw.siruera.com

原因:

  • DNS設定がまだ反映されていない状態でCaddyが証明書取得を試行
  • Let’s Encrypt のレートリミットに到達

解決:

  • DNS設定完了後、Caddy再起動で自動リトライ → 成功
  • Caddyは max_duration: 2592000(30日)まで自動リトライし続ける

教訓

TIP

Docker内→ホストOS通信のトラブルシュートは、以下の3レイヤーを順に確認:

  1. アプリ: リッスンアドレス(0.0.0.0 vs 127.0.0.1
  2. ファイアウォール: iptables/UFW でDockerサブネットからの通信が許可されているか
  3. アプリ設定: CORS、認証ミドルウェア等がOriginをブロックしていないか

関連