こんにちは。
今回は、DifyをGCPにデプロイした時にいくつか詰まった点があったので紹介したいと思います。
基本的には、DeNAさんのこちらを活用させていただきます。
https://github.com/DeNA/dify-google-cloud-terraform
こちらのドキュメント通りに作成すると、とりあえず管理者作成画面までは進めました。
管理者を作成しようとすると、「maximum recursion depth exceeded」といわれる
立ち上げると、最初にブラウザ上で管理者を作成する操作があるのですが、そこで「maximum recursion depth exceeded」というエラーで次に進めなくなりました。
調べると、DifyのデフォルトのWebサーバーワーカー (gevent) が、Python 3.12のSSLライブラリと相性が悪く、「maximum recursion depth exceeded」というエラーで管理者作成に失敗していました。ワーカータイプをスレッドベースの gthread に変更しました。
# terraform/environments/dev/main.tf
# shared_env_vars に以下を追加
"SERVER_WORKER_CLASS" = "gthread"
ナレッジベースのインデックスを貼る処理など、ワーカージョブが動作しない
Cloud RunのCPUスロットリング無効化 & Startup Probe削除 & GCS権限付与により対応しました。
# terraform/modules/cloudrun/main.tf
"run.googleapis.com/cpu-throttling" = "false"
# terraform/environments/dev/main.tf
resource "google_storage_bucket_iam_member" "dify_service_storage_admin" { ... }
CPUスロットリング無効化: バックグラウンド処理中もCPUを使えるようにしました。
Startup Probe削除: HTTPサーバーではないワーカーコンテナが起動チェックで落ちないようにしました。
GCS権限付与: ワーカーがファイルを読み書きできるように権限を与えました。
ユーザー招待メールが飛ばない
SMTP設定の追加をすることで対応しました。
# terraform/environments/dev/main.tf
"MAIL_TYPE" = var.mail_type
"SMTP_SERVER" = var.smtp_server
resend などのSMTPサーバー設定が環境変数として正しく渡されていることで解決しています。もし未解決なら、Celeryワーカーが動くようになったことで、メール送信タスクも消化されるようになります。
ユーザー将来メールのリンクが変になっている
環境変数 CONSOLE_WEB_URL が正しく設定されていないと、メール内のリンクが localhost や不正なURLになります。これらがCloud RunのURL(またはカスタムドメイン)に設定されていれば解決します。
補足: 今回のGit差分にある cloudsql_instance_connection_name の追加は、「2. ワーカージョブが動作しない」 を解決するための副次的な修正です。Cloud Runの設定(CPUスロットリング)を変更する際に、Terraformの依存関係を正しく解決するために必要でした。
# terraform/environments/dev/main.tf
"CONSOLE_WEB_URL" = "https://dify-service-..."
"APP_WEB_URL" = "https://dify-service-..."
一応全体の動作の確認はしましたが、まだ不具合等あるかもしれません。その場合は追記していきますね。
![[AWS] GenU(Generative AI Use Cases JP)でAWS × 生成AI入門してみた](/assets/ogp/aws-genu-instruction.webp)