n8n を Cloud Runにデプロイしたらときに2つハマった話(connection is insecureと404エラー)
概要
Cloud Run に n8n をデプロイしたら、
- **DB 接続エラー (try using
sslmode=require
) **
cloudRunにdeployがうまくいかない...。 - デプロイ完了後の謎の 404 エラー
ちゃんとデプロイで来てるが、ずっと404がでる...。
に遭遇しました。調べてみると同じ罠にハマってる人多数。🥹
結論から言うと、環境変数とちょっとした設定でサクッと解決できます。
使っているサービス
- GCPのCloud Run (サーバのscale to zeroができる。最高)
- NeonのPosgresDB (DBのscale to zeroができる。最高。Neonだけじゃない?)
使ってるのはこれだけ。
ポイント1: Postgres 接続エラー対策
もしログに
connection is insecure (try using `sslmode=require`)
と出ていたら、Postgres 側が SSL 必須になっています。
この場合、n8n の環境変数にこれを追加するだけで解決👇
DB_POSTGRESDB_SSL_ENABLED=true
💡 Cloud SQL / Supabase / Neon などマネージドDBはほぼこれ必須です。
ポイント2:Cloud Run で 404 が出るとき
デプロイ成功しているのに 404 Not Found
で UI に入れない場合、n8n の初期化が遅くてリクエストを捌けていないことが原因のことが多いです。
解決法
- こちらを参考にしました。
- 環境変数を追加
WEBHOOK_URL=https://xxxxxxxxx.run.app/ #cloudRunがHostするURL)
N8N_EDITOR_BASE_URL=https://xxxxxxxxx.run.app/ #cloudRunがHostするURL
EXECUTIONS_PROCESS=main
EXECUTIONS_MODE=regular
N8N_LOG_LEVEL=debug # これはもしかしたらいらないかも?
- Startup Probe で起動を待つ
Cloud Run の「ヘルスチェック → Startup probe」でinitialDelaySeconds=120
を設定しましょう。コンソールにおいては、以下の画像の設定です。多分これがめちゃくちゃ大事。
これで n8n の起動が完了するまでトラフィックを流さないようにできます。
最後に:全体の環境変数設定
コンソール上での設定値はこんな感じ。
.envファイルだとこんな感じ
```.env
# Postgres 接続設定
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=xxxx # PostgresのHost
DB_POSTGRESDB_DATABASE=xxxx # PostgrasのDB名
DB_POSTGRESDB_USER=xxxx # Postgrasのユーザ名
DB_POSTGRESDB_PASSWORD=xxxx # Postgrasのパスワード。
DB_POSTGRESDB_SSL_ENABLED=true
# n8n 公開URL設定
WEBHOOK_URL=https://n8n-436163788088.asia-northeast1.run.app
N8N_EDITOR_BASE_URL=https://n8n-436163788088.asia-northeast1.run.app
# 実行設定
N8N_RUNNERS_ENABLED=true
N8N_DISABLE_PRODUCTION_MAIN_PROCESS=true
EXECUTIONS_PROCESS=main
EXECUTIONS_MODE=regular
N8N_LOG_LEVEL=debug
```
🎉 まとめ
- Postgres エラー →
DB_POSTGRESDB_SSL_ENABLED=true
をつける - 404 エラー →
EXECUTIONS_*
環境変数 + Startup probe を設定する
これで安定稼働しました!同じ罠にハマった人の助けになれば幸いです 🙌
快適なn8nライフを!!
Discussion