2026年3月更新 8サービスの解説

Dify Docker Compose設定ガイド

DifyのDockerアーキテクチャについてのすべて — 各コンテナの役割からカスタム設定で本番環境デプロイメントを強化する方法まで。

DifyのDockerアーキテクチャ

Difyのdocker-compose.yamlは8つのサービスを起動します。各サービスの役割を理解することで、設定、トラブルシューティング、デプロイメントのスケーリングが容易になります。

nginx リバースプロキシ/Webサーバー

受信HTTPリクエストを適切な内部サービス(WebUIまたはAPI)にルーティングします。これが公開アクセス可能にする必要がある唯一のコンテナです。

約50MB
api Dify APIサーバー

メインのPython/Flaskバックエンド。すべてのビジネスロジック、LLM呼び出し、RAGパイプライン実行、REST APIエンドポイントを処理します。

約300MB
worker Celeryバックグラウンドワーカー

非同期タスクを処理します:ドキュメントのインデックス化、データセットインポート、長時間実行LLMチェーン。APIコンテナとコードを共有します。

約300MB
web Next.jsフロントエンド

Next.jsアプリとして提供されるReactベースのUI。APIコンテナと通信します。

約150MB
db PostgreSQLデータベース

すべての永続データを格納します:アプリ、会話、データセットのメタデータ、ユーザー、APIキー。

約100MB
redis キャッシュ&メッセージブローカー

頻繁なクエリをキャッシュし、ワーカー用のCeleryタスクキューを格納し、レート制限データを処理します。

約30MB
weaviate ベクトルデータベース

RAGナレッジベース用のドキュメント埋め込みを格納します。最大のメモリ消費者。pgvectorまたはQdrantに置き換え可能です。

約500MB
sandbox コード実行サンドボックス

Difyワークフロー内のユーザー定義コードノードを実行する隔離コンテナ。制限された権限で実行されます。

約100MB

合計ベース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
APIコンテナでシェルを開く 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に接続できない

.envCONSOLE_URLAPP_URL変数が実際のドメインと一致していることを確認してください。CORSエラーはほぼ常にURL設定の誤りが原因です。