SSD Nodes Learn
ガイド Matt Connor著者 Matt Connor ・更新日 2026-07-24

DifyをVPSにDocker Composeで構築する方法

Docker Composeを使用してDifyをVPSにセルフホストする手順を解説します。6つのコンテナを動かすため、最低4 GBのRAMが必要です。起動前に.env内のsecretを必ず書き換えてください。また、セキュリティ確保のため、起動直後に/installから管理者アカウントを作成することが重要です。

Difyの概要と運用に関する注意点

Difyは、大規模言語モデル(LLM)上でアプリケーションを構築するためのセルフホスト可能なプラットフォームです。チャットアプリ、エージェント、リトリーバル・パイプラインを設計するためのWebインターフェース、自作コードから呼び出すためのAPI、そしてプロンプト、データセット、モデルキーを一括管理できる場所が提供されます。これは、APIキーをスクリプトに分散させるのではなく、小規模なチームが共有のプライベートな基盤を構築するために適したツールです。

セルフホストする場合、複数のコンポーネントを動作させる必要があります。DifyはDockerコンテナのセットとして提供されます。これには、APIサーバー、バックグラウンドワーカー、Webフロントエンド、Postgresデータベース、Redisキャッシュ、およびベクトルデータベースが含まれ、これらはすべてDocker Composeによって連携されます。単一のバイナリよりも構成は複雑ですが、Composeが接続を管理するため、数GBの空きRAMを持つVPSがあれば快適に動作します。

DifyはモデルのAPIキーや、リトリーバル用にロードしたプライベートなドキュメントを保持します。そのため、実行環境のサーバーは、最初から機密性の高いものとして扱ってください。このガイドでは、Difyのインストールと、機密情報を扱うサービスと同様のセキュリティ強化(ハードニング)の手順を説明します。

前提条件

Ubuntu 24.04が動作するVPSが必要です。DockerおよびDocker Composeプラグインがインストールされており、sudo権限を持つユーザー、またはdockerグループに所属している必要があります。Dockerが初めての場合は、VPSでのDocker Composeの基本で、このガイドが前提とするインストール手順と基本コマンドを確認してください。また、IPアドレスを直接使うのではなくTLSを使用するため、サーバーに紐付けられたドメイン名を用意しておくことを推奨します。

ステップ 1: DifyとComposeファイルの取得

DifyのDocker設定はメインリポジトリにあります。リポジトリをクローンし、dockerディレクトリに移動します。

git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env

.envファイルがすべての設定ファイルです。作業を開始する前に必ず読んでください。まず確認すべきは、パスワードとシークレットを設定する値です。具体的には、SECRET_KEY、Postgresのパスワード、およびRedisのパスワードです。サンプルファイルにはプレースホルダーの値が入っています。そのままにしておくことは、セルフホストしたDifyが侵害される最も一般的な原因です。以下のコマンドで、実際のシークレットキーを生成してください。

openssl rand -base64 42

生成したキーをSECRET_KEYに貼り付け、ファイル内のすべてのパスワードフィールドに強力で一意な値を設定してください。

ステップ 2: 起動

スタックを起動します。

docker compose up -d

初回実行時は複数のイメージのプルとデータベースの初期化が行われるため、完了まで少し時間がかかります。コンテナが正常に動作しているか確認してください。

docker compose ps

すべてのサービスがrunningを読み込んでいる必要があります。DifyのWebインターフェースは、デフォルトでポート80の同梱nginxコンテナを通じて提供されます。http://YOUR_SERVER/installに最初にアクセスした際に、管理者アカウントを作成します。他のものがポートに到達する前に、すぐに作成してください。管理者アカウントが存在しない間は、ページにアクセスした誰もがそのアカウントを占有し、インスタンスを制御できてしまいます。

ステップ 3: 直接公開しない。TLSとファイアウォールを前段に置く

多くの簡易インストールがここで止まり、多くのインシデントが発生します。Dify自身のnginxは、すべてのインターフェースのポート80で、暗号化されていない状態で待機しています。管理者ログインやモデルAPIキーを平文のHTTPで通信させてはいけません。また、内部サービスを外部から到達可能にしてはいけません。

SSHとWebトラフィックのみを許可する、デフォルト拒否(default-deny)のファイアウォールでサーバーを保護してください。

sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

IPv4のみを対象としたファイアウォールは、IPv6で同じポートを開放したままにする可能性があることに注意してください。これは多くのセルフホスターが陥る IPv6ファイアウォールの隙間 です。両方のスタックがフィルタリングされていることを確認してください。

TLSを適用する最もクリーンな方法は、DifyのWebポートをループバックアドレスにバインドし、その前段にLet's Encrypt証明書を使用したリバースプロキシを配置することです。これにより、パブリックインターネットに対してはHTTPSで通信するプロキシのみが露出することになります。Difyの.envを使用すると、公開ポートを変更できます。これを127.0.0.1にバインドするように設定し、プロキシの転送先をそこに指定してください。VPSでAIエージェントを安全に実行する で説明するエージェントのハードニング手法もここに応用できます。コンポーネントはループバック内に保持し、公開が必要なものだけを公開し、強化された単一の入り口(プロキシ)からTLS通信を行わせるようにしてください。

ステップ 4: パッチを適用し続ける

Difyの開発は速く、アップデートにはセキュリティ修正が含まれます。アップデートは、dockerディレクトリから以下の手順で行います。

git pull
docker compose pull
docker compose up -d

メジャーバージョンの更新前には、必ずリリースノートを読んでください。Difyはリリース間で.envのスキーマを変更することがあり、設定していない新しい変数のためにコンテナが起動しなくなる可能性があるためです。

ステップ 5: 再生成できないものをバックアップする

Difyのサーバーにおいて、代替不可能なものが2つあります。アプリ、ユーザー、設定を保持するPostgresデータベースと、アップロードされたドキュメントとベクトルインデックスを保存するボリュームです。これらは両方ともdockerディレクトリ内のDockerボリュームとして存在します。定期的にスナップショットを取得し、そのスナップショットをサーバー外にコピーしてください。モデルのAPIキーは再発行できますが、構築に1週間かけたアプリを復元することはできません。

より自律的なコード実行エージェントについては Agent Zeroのセルフホスト を、すべての基盤となる概念については VPSでの独自のAIエージェントの構築 を参照してください。

FAQ

Difyをセルフホストするためのシステム要件は何ですか?

Difyは、約6つのコンテナからなるDocker Composeスタックとして動作します。そのため、少なくとも2 GBの空きRAMを持つVPS(理想的には4 GB)と、数個のCPUコア、およびアップロードするドキュメントとベクトルインデックスのための十分なディスク容量を準備してください。メモリ負荷の主な原因は、Dify自体ではなく、データベースとベクトルストアです。

Difyをポート80で直接公開しても安全ですか?

いいえ。Difyの同梱Webサーバーは平文のHTTPで待機しており、管理者ログインやモデルAPIキーを保護していません。Let's Encrypt証明書を備えたリバースプロキシを前段に配置し、Dify自身のポートはループバックにバインドして、HTTPSプロキシのみをインターネットに公開してください。これに、IPv4とIPv6の両方をカバーするデフォルト拒否のファイアウォールを組み合わせてください。

セルフホストしたDifyをアップデートする方法は?

dockerディレクトリから git pull を実行し、次に docker compose pulldocker compose up -d を実行して新しいイメージを取得し、再起動します。まずリリースノートを読んでください。Difyはバージョン間で新しい .env 変数を追加することがあり、それらが不足しているとコンテナが起動しません。

Difyをインストールした後に最初に行うべきことは何ですか?

すぐに /install にアクセスして、管理者アカウントを作成してください。そのアカウントが存在しない限り、ページにアクセスできる誰もがアカウントを占有できてしまいます。コンテナが正常に動作したら、ファイアウォールを外部に開放する前に、直ちに設定を完了させてください。