Dify Docker Compose設定ガイド
DifyのDockerアーキテクチャについてのすべて — 各コンテナの役割からカスタム設定で本番環境デプロイメントを強化する方法まで。
DifyのDockerアーキテクチャ
Difyのdocker-compose.yamlは8つのサービスを起動します。各サービスの役割を理解することで、設定、トラブルシューティング、デプロイメントのスケーリングが容易になります。
nginx リバースプロキシ/Webサーバー 受信HTTPリクエストを適切な内部サービス(WebUIまたはAPI)にルーティングします。これが公開アクセス可能にする必要がある唯一のコンテナです。
api Dify APIサーバー メインのPython/Flaskバックエンド。すべてのビジネスロジック、LLM呼び出し、RAGパイプライン実行、REST APIエンドポイントを処理します。
worker Celeryバックグラウンドワーカー 非同期タスクを処理します:ドキュメントのインデックス化、データセットインポート、長時間実行LLMチェーン。APIコンテナとコードを共有します。
web Next.jsフロントエンド Next.jsアプリとして提供されるReactベースのUI。APIコンテナと通信します。
db PostgreSQLデータベース すべての永続データを格納します:アプリ、会話、データセットのメタデータ、ユーザー、APIキー。
redis キャッシュ&メッセージブローカー 頻繁なクエリをキャッシュし、ワーカー用のCeleryタスクキューを格納し、レート制限データを処理します。
weaviate ベクトルデータベース RAGナレッジベース用のドキュメント埋め込みを格納します。最大のメモリ消費者。pgvectorまたはQdrantに置き換え可能です。
sandbox コード実行サンドボックス Difyワークフロー内のユーザー定義コードノードを実行する隔離コンテナ。制限された権限で実行されます。
合計ベースRAM:アイドル状態のコンテナだけで約1.5GB。4GBサーバーでは、OSと実際のワークロード用に約2.5GBが残ります。本番環境では8GB RAMを推奨します。
環境変数ガイド
Difyのすべての設定はdify/docker/.envにあります。.env.exampleからコピーし、以下の重要な設定をカスタマイズします:
セキュリティ(必須)
# 生成方法: openssl rand -base64 42
SECRET_KEY=非常に長いランダム秘密鍵
# 保存された機密データの暗号化キー
# 生成方法: openssl rand -hex 16
ENCRYPT_IV=16文字の16進数値 データベース設定
# PostgreSQL設定(Docker内部ネットワーク)
DB_USERNAME=postgres
DB_PASSWORD=強力なパスワードに変更
DB_HOST=db
DB_PORT=5432
DB_DATABASE=dify
# Redis設定
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=強力なRedisパスワードに変更
REDIS_DB=0 URLとCORS設定
# ドメイン(末尾スラッシュなし)
CONSOLE_URL=https://your-domain.com
APP_URL=https://your-domain.com
SERVICE_API_URL=https://your-domain.com
# CORSオリジン(カンマ区切り)
CONSOLE_CORS_ALLOW_ORIGINS=https://your-domain.com
WEB_API_CORS_ALLOW_ORIGINS=https://your-domain.com LLM APIキー(設定時はオプション)
# Dify WebUIでも設定可能
# これらの.env設定は初回起動時にプロバイダーを事前設定します
OPENAI_API_KEY=sk-your-openai-key
ANTHROPIC_API_KEY=sk-ant-your-key
GOOGLE_API_KEY=your-gemini-key
# Ollama用(ローカルLLM)
# UIで設定:設定 → モデルプロバイダー → Ollama カスタム設定
カスタムポートマッピング
ポート80が使用中の場合、.envを編集してDifyのNginxがバインドするホストポートを変更します:
# Nginxコンテナのホストポートを変更
EXPOSE_NGINX_PORT=8080
EXPOSE_NGINX_SSL_PORT=8443 Weaviateを無効化(pgvectorを代わりに使用)
Weaviateは約500MBのRAMを使用します。メモリの少ないサーバーでは、pgvectorに切り替えます(PostgreSQLコンテナで既に利用可能):
# .envでベクトルストアをpgvectorに変更
VECTOR_STORE=pgvector
# Weaviateなしで再起動
docker compose up -d --scale weaviate=0 GPUサポートの有効化
NVIDIAのGPU(ローカル埋め込みモデル用)を渡すには、docker-compose.override.yamlにGPUランタイムを追加します:
services:
api:
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu] 完全なセットアップ手順についてはGPUホスティングガイドを参照してください。
よく使うコマンド
docker compose up -d docker compose down docker compose restart api docker compose logs -f api worker docker compose exec api bash docker compose ps docker stats docker compose down --remove-orphans docker compose pull docker compose up -d --build api トラブルシューティング
コンテナが再起動し続ける
ログを確認します:docker compose logs api。通常、SECRET_KEYの形式が間違っているか、必要な環境変数が不足していることが原因です。SECRET_KEYが少なくとも32文字あることを確認してください。
メモリ不足 — OOMキラーによりコンテナが終了
スワップスペースを追加するか、より大きなサーバーにアップグレードしてください。dmesg | grep -i "killed process"でOOM障害を確認します。weaviateコンテナが最もよく原因となります — pgvectorへの切り替えを検討してください。
WebコンテナがAPIに接続できない
.envのCONSOLE_URLとAPP_URL変数が実際のドメインと一致していることを確認してください。CORSエラーはほぼ常にURL設定の誤りが原因です。