ノーコードで生成AIアプリを開発できる『Dify(ディフィー)』。
VPSにセルフホストすることで、データの機密性を高められるなど、SaaS版よりセキュアなDify環境を構築可能です。
本記事では、VPSでDifyを「手軽にセルフホストする方法」と「セキュアにセルフホストする方法」それぞれの実践的な手順を解説します。
- Difyをセルフホストするメリット
- 手軽にDifyをセルフホストする手順
- セキュアなDify環境を構築する手順
本記事を参考にして、目的や用途に合った方法でVPS上にDifyをセルフホストしてみてください。
VPSでDifyをセルフホストするメリット
VPSでDifyをセルフホストするメリットは、主に以下の3つです。
VPS上でデータを管理できる
VPSでセルフホストすれば、AIアプリの開発や運用にあたって、データがDifyの運営会社(LangGenius社)に送信されることはありません。
VPS上でデータを管理できるため、「LangGenius社」に委ねることなく、主体的に情報漏洩などのリスクへの対策ができます。

以下は、SaaS版の利用にあたり、「LangGenius社」のクラウドに送信されるデータの一例です。
- 生成AIに学習させるドキュメント(ナレッジ)
- 生成AIへの指示内容(プロンプト)
- 生成AIからの返答内容
- LLM(ChatGPTやGeminiなど)のAPIキー
- Difyのアカウント情報(ユーザー名やパスワードなど)
たとえば、特定の用途に特化したAIアプリの開発では、個人情報や内部データなどの機密情報を読み込ませることもあります。
とくに「ISMS」や「プライバシーマーク」を取得しているなど、厳格なセキュリティポリシーを定めている企業の場合は、SaaS版のDifyだと社内規定に抵触するかもしれません。
一方、VPSでのセルフホストなら、SaaS版のような仕様や制約に縛られず、条件やルールに基づいて自由にデータを管理できます。
厳しいセキュリティポリシーに準拠すべきケースでも機密情報が扱いやすくなる点は、VPSでDifyをセルフホストする大きなメリットです。
カスタマイズの自由度が高い
VPSでDifyをセルフホストすると、SaaS版よりもカスタマイズの幅を広げられます。
以下は、SaaS版では難しいカスタマイズの一例と、その効果です。
- AIアプリの公開範囲を限定して、セキュリティを強化できる
- 既存のシステムと連携して、AIアプリの機能を拡張できる
- 任意の独自ドメインを設定して、AIアプリの信頼性を高められる
- 複数のDify環境を構築して、可用性を高められる
VPSでのセルフホストでは、指定したIPアドレスからのアクセスに絞れるなど、AIアプリの公開範囲を限定できます。
公開範囲を身内に限定すれば、AIアプリとの会話から不特定多数の利用者に情報漏洩を起こしてしまったり、悪意を持ってAPIの利用枠を浪費されたりする心配がなくなります。
さらに、既存のシステムやデータベースにDifyを組み込める点も非常に有効です。
たとえば、内部の動的データベースと連携させて、最新のデータを反映したチャットボットを開発することも可能。
静的ファイルを読み込ませるだけでは実現できない、高機能なAIアプリを開発できます。
コストパフォーマンスが高い
VPSでのセルフホストは、SaaS版のDifyを利用するよりもコストパフォーマンスに優れています。
以下は、SaaS版で用意されている3つのプランと、それぞれの料金です。
| SaaS版のプラン表 | Sandbox | Professional | Team |
|---|---|---|---|
| 料金(月額) | 無料 | 59ドル (約9,000円 ※) | 159ドル (約25,000円 ※) |
| メッセージクレジット | 200 | 5,000/月 | 10,000/月 |
| AIアプリの保有数 | 5個 | 50個 | 200個 |
| 共同開発できる人数 | 1人 | 3人 | 50人 |
| アップロードできる ドキュメント数 | 50個 | 500個 | 1,000個 |
※2025年12月時点の為替レート
SaaS版には「メッセージクレジット」「AIアプリの保有数」「共同開発できる人数」など、利用量や機能に制限があります。
本格的にDifyを運用するなら、「Professional」プランや「Team」プランへの加入が必要です。
一方で、セルフホストならDifyのソフトウェア自体は無料で利用可能。
それでいて、利用量や機能に制限はありません。
実際はVPSのスペックに依存するものの、サーバーとドメインの費用だけで実質的に制限なくDifyを利用できます。

サーバーは「月額1,500円~3,000円」ほど。
ドメインは「年額2,000円~2,500円」ほどで、月額に換算すると「約150円~200円」です。
なお、LLM(ChatGPTやGeminiなど)のAPI料金は、別途発生するので注意してください。
SaaS版の場合は、各プラン規定の「メッセージクレジット」を消費すると、追加のAPI費用が生じます。
XServer VPSでDifyをセルフホストする方法
以下は、『XServer VPS』でDifyをセルフホストする主な方法2つです。
- アプリイメージを利用する
- Docker Composeで構築する
アプリイメージを利用する
『XServer VPS』では、Difyを簡単に導入できる「アプリイメージ」機能を提供しています。
指定のアプリケーションをインストールし、自動で環境を構築するテンプレート機能のこと。
以下、アプリイメージを利用する方法のメリットとデメリットです。
- 専門知識が必要ない
- 手軽に環境を構築できる
- rootユーザーでの運用や管理が前提になる
- 細かなカスタマイズに対応しづらい
アプリイメージを使えばコマンド操作は必要なく、クリックやテキスト入力によって手軽にDify環境を構築できます。
VPS(Linux)の利用に不安がある方でも、環境の構築に苦戦することなく、すぐにDifyを使い始められる点が魅力です。
ただ、アプリイメージを利用する方法では、VPSのrootユーザーでDifyを運用、管理することに配慮する必要があります。
サーバー全体のシステムをコントロールできる管理者権限のこと。
rootユーザーはあらゆる操作が可能なため、常用すると不意に重要なファイルを削除してしまうなどのヒューマンエラーを引き起こすおそれがあります。
たとえば、機密情報を扱ったり、複数人でAIアプリを開発したりするケースでは、過剰な権限では作業しない「最小権限の原則」を意識した運用が理想的です。
アプリイメージの利用とVPSのrootユーザーでの運用には、向き不向きがあります。
「手軽にDifyをセルフホストしたい」「スピード重視で環境を用意したい」という場合は、アプリイメージの利用がおすすめ。
一方で機密情報を扱うなどの実運用を想定している方は、次に紹介する「Docker Composeで構築する方法」をご検討ください。
Docker Composeで構築する
「Docker Compose」を使用することでも、VPS上にDifyをセルフホストできます。
複数のプログラム(Dockerコンテナ)を一括で起動、管理するツールのこと。
以下は、「Docker Compose」で構築する方法のメリットとデメリットです。
- セキュアな運用や管理に向いている
- 細かなカスタマイズにも対応しやすい
- コマンド操作で環境を構築する
- DockerやWebサーバーに関する基礎知識が必要になる
「Docker Compose」で構築する方法なら、任意の構成でDify環境をセットアップできます。
たとえば、rootユーザーではなく、必要最小限の権限のみを与えた一般ユーザーでDifyを管理することも可能。
「最小権限の原則」に則った、セキュアな管理環境を構築しやすいです。
環境構築に一定の手間や知識は必要なものの、「機密情報を扱いたい」「チームで本格的に運用したい」場合は、「Docker Compose」でDifyをセルフホストしましょう。
アプリイメージでDifyをセルフホストする手順
ここでは、『XServer VPS』のアプリイメージ機能を使い、手軽にDify環境を構築する手順を解説します。
以下は、アプリイメージでDifyをセルフホストする手順です。
本手順は、迅速かつ手間なくDifyをセルフホストすることに重きを置いています。
セキュリティ設定を省略しているなど、実運用を想定した手順にはなっていません。
本格的にDifyを運用したい方は、「Docker ComposeでDifyをセルフホストする手順」を参考にしてください。
1. XServer VPSに申し込む
はじめに、『XServer VPS』の申し込みを進めます。
「OS再インストール」でDifyのアプリイメージを選択してください。
詳しい手順は、以下のマニュアルで解説しています。
※「OS再インストール」を実行すると、現在のデータは削除されます。
『XServer VPS』の申し込みフォームにアクセスしたら、すぐにスタート!新規お申込みをクリックしましょう。

以下のとおり、「XServerアカウント」の登録画面に遷移します。

登録情報を入力後、「利用規約」と「個人情報の取り扱いについて」にチェックを入れ、次へ進むをクリックしてください。

入力したメールアドレス宛に6桁の確認コードが届きます。
そちらを入力して、次へ進むをクリックしましょう。

入力内容を確認のうえ、電話認証へ進むをクリックしてください。

「電話認証」のステップは、省略されることもあります。
任意の電話番号を入力してから、認証コードを取得するをクリックしましょう。

5桁の認証コードを入力して、認証してサーバー申し込みに進むをクリックしてください。

電話認証が完了すると、「VPSのお申し込み」画面に遷移します。

以下の表を参考にしながら、申し込み情報を入力してください。
| 項目 | 説明 |
|---|---|
| サーバー名 | そのままで問題ありません。 |
| プラン | Difyのイメージは「6GB」以上のプランからご利用いただけます。 6GB以上のプランを選択してください。 |
| サーバーの契約期間 | 任意の契約期間を選択してください。 「3ヶ月以上」でご契約いただくと、月額料金が割引されるためお得です。 |
| イメージタイプ | 「アプリケーション」のタブをクリックして、「Dify」を選択してください。 |
| ドメイン・SSLクイック設定 | 「利用する」にチェックを入れ、「XServerのサブドメイン(無料)」を選択してください。 「ドメイン名」には、任意の文字列を入力しましょう。 |
| rootパスワード | 任意のパスワードを入力してください。 忘れないようにメモしておきましょう。 |
| SSH Key | 「設定しない」を選択してください。 ※セキュリティを強化したい場合は、公開鍵認証の有効化を推奨します。 |
| デフォルトポート開放 | 「利用する」にチェックを入れてください。 |
『XServer VPS』では、1契約につき1つ無料でサブドメインを利用できます。
サブドメインを利用すれば、独自ドメインを事前に準備する手間がかかりません。
本手順はスピードと手軽さを重視するため、「XServerのサブドメイン」で環境を構築します。
なお、独自ドメインを利用する場合は、ネームサーバーの設定が必要です。
詳しくは、以下のマニュアルを参照してください。
それぞれ入力したあと、「XServer VPS利用規約」「個人情報の取り扱いについて」にチェックを入れ、お申し込み内容を確認するをクリックしましょう。

お申し込み内容に誤りがなければ、お支払いへ進むをクリックします。

お支払い方法は、「クレジットカード」「あと払い(ペイディ)」「プリペイド決済」の3種類です。
任意のお支払い方法を選択して、決済画面へ進むをクリックしてください。
※本記事では、「クレジットカード」で支払いを進めます。

クレジットカード情報を入力後、確認画面へ進むをクリックしましょう。

プランや合計金額を最終確認して、支払いをするをクリックしてください。

以下の画面が表示されれば、『XServer VPS』の申し込みは完了です。

お支払いから15分ほど待ったあと、サーバーの稼働状況を確認しましょう。
ログインページにアクセスして、ご契約時に設定した「メールアドレス」と「パスワード」を入力してください。

ステータスが「構築中」から「稼働中」に変わっていればOKです。

2. Difyにアクセスする
それでは、Difyにアクセスしてみましょう。
ブラウザを開いて、以下のURLを入力してください。
https://「XServerのサブドメイン」で設定した文字列.xvps.ne.jp

問題なく構築できていれば、管理者アカウントの設定画面が開きます。
「メールアドレス」「ユーザー名」「パスワード」を入力して、セットアップをクリックしましょう。

ダッシュボードにアクセスできれば、アプリイメージによるDify環境の構築は完了です。

アプリイメージでDifyを構築した場合のアップデート手順については、以下のマニュアルで詳しく解説しています。
Docker ComposeでDifyをセルフホストする手順
続いて、「Docker Compose」を使用して、一般ユーザー配下にDify環境を構築する手順を解説します。
なお、本手順の環境は以下のとおりです。
- クライアントOS
Windows
- サーバーOS
Linux
- サーバースペック
vCPU4コア、メモリ6GB
- ディストリビューション
Ubuntu22.04 LTS
- SSHクライアント
Tera Term
本手順では、『XServer VPS』の申し込み手順は割愛します。
本手順は、VPS契約直後の初期セキュリティ対策が完了していることを前提としています。
まだの方は、以下の記事を参考に初期セキュリティ対策を済ませてから、本手順に進んでください。
1. 独自ドメインを準備する
まずは、独自ドメインを取得しましょう。
※すでに独自ドメインを所有している場合は、こちらのステップは飛ばして問題ありません。
なお、独自ドメインの詳しい取得手順は割愛します。
続いて、『XServer VPS』と独自ドメインを紐づける、「ネームサーバー」の設定状況を確認しましょう。
本手順では、『XServerドメイン』を前提にネームサーバーの確認方法を解説します。
他のサービスをご利用の場合は、各社の公式マニュアルを参照してください。
『XServerドメイン』のログインページにアクセス後、ご契約時に設定した「メールアドレス」と「パスワード」を入力してログインするをクリックします。

管理画面にアクセスしたら、左メニューのネームサーバー設定をクリックしましょう。

以下のとおり、「XServer VPS」にチェックが入っていればOKです。

一方で「XServer VPS」が選択されていない場合は、チェックを入れて確認画面へ進むをクリックしてください。

設定を変更するをクリックすれば、ネームサーバーの設定は完了です。

なお、「XServer VPS」の表示がない場合は、その他のサービスで利用するをクリックします。

「ネームサーバー1」「ネームサーバー2」「ネームサーバー3」に以下を入力しましょう。
| ネームサーバー1 | ns1.xvps.ne.jp |
| ネームサーバー2 | ns2.xvps.ne.jp |
| ネームサーバー3 | ns3.xvps.ne.jp |
それぞれ入力したあと、確認画面へ進むをクリックしてください。

あとは同様に設定を変更するをクリックすればOKです。

2. GitとDockerをインストールする
続いて、VPSに「Git」と「Docker」をインストールしていきます。
ファイルやプログラムコードの変更履歴を記録、管理するためのツールのこと。
「Git」で記録した履歴を『GitHub』というWebサービスにアップロードすれば、簡単にファイルやプログラムコードを共有可能です。
本手順では、Dify公式の「GitHubリポジトリ(保管庫)」から設計図などのファイル一式をダウンロードし、「Docker Compose」で複数のプログラムを連携、実行していきます。

SSHクライアント(本記事では『Tera Term』)を起動したら、VPSに接続しましょう。

本記事では、VPS契約直後の初期セキュリティ対策で作成した「xserver」という一般ユーザーを使用します。
一般ユーザーの作成をはじめ、VPS契約直後の初期セキュリティ対策がまだの方は、以下の記事からご覧ください。
以下のコマンドを実行してください。
sudo apt install -y git docker.io docker-compose-v2

sudoコマンドを実行するには、一般ユーザーのパスワードの入力が必要です。
入力後、Enterを押しましょう。

本手順では、一般ユーザーを「Dockerグループ」には追加しません。
Dockerグループに追加すれば、「sudo」なしで「docker」や「docker compose」コマンドを実行できるようになり便利です。
その反面、一般ユーザーが不正利用の被害に遭うと、攻撃者はサーバーの全ファイルにアクセスできるようになり、VPSが乗っ取られるおそれがあります。
セキュリティリスクが上がるため、基本的にDockerグループには追加しないようにしましょう。
3. Difyをインストールする
次に、公式の「GitHubリポジトリ」からDifyのソースコードをインストール(クローン)します。
以下のコマンドを実行してください。
git clone https://github.com/langgenius/dify.git

4. 設定(環境変数)ファイルを作成する
Difyのソースコードをクローンしたら、重要な設定値をまとめる「環境変数ファイル」を用意します。
まずは、以下のコマンドでDifyのソースコードを格納する「docker」ディレクトリに移動しましょう。
cd dify/docker

以下のコマンドで、環境変数ファイルのテンプレートをコピーし、Difyが読み込む本番用のファイルを作成します。
cp .env.example .env

ファイルの作成後、以下のコマンドを実行して編集画面を開いてください。
nano .env

以下のとおり、ズラッと設定項目が表示されます。

「Ctrl + W」で検索欄を出したら、以下をコピペしましょう。
NGINX_SSL_CERT_FILENAME

該当の設定項目にジャンプするので、以下3つの値を書き換えてください。
NGINX_SSL_CERT_FILENAME=fullchain.pem
NGINX_SSL_CERT_KEY_FILENAME=privkey.pem
NGINX_ENABLE_CERTBOT_CHALLENGE=true

再度、「Ctrl + W」で検索欄を開いて以下をコピペします。
CERTBOT_EMAIL

「CERTBOT_EMAIL」には、普段使用しているメールアドレスを入力してください。
CERTBOT_EMAIL=任意のメールアドレスを入力
「CERTBOT_DOMAIN」には、「1. 独自ドメインを準備する」で用意したドメイン名を入力しましょう。
CERTBOT_DOMAIN=「1. 独自ドメインを準備する」で用意したドメイン名を入力

それぞれ入力したら、Ctrl + Xを押してください。
「変更されたバッファを保存しますか?」と表示されるので、「Y」のあとEnterを押せば環境変数ファイルの編集は完了です。

5. Docker Composeを起動する
環境変数ファイルを編集したあと、一度「Docker Compose」と「Certbot」を起動します。
Difyの通信を暗号化(https化)するために必要な「SSL証明書」を無料で発行、更新してくれるツールのこと。
以下のコマンドを実行して、「Docker Compose」と「Certbot」を起動してください。
sudo docker compose --profile certbot up --force-recreate -d

6. SSL証明書を取得する
続いて、「SSL証明書」を取得しましょう。
以下のコマンドを実行してください。
sudo docker compose exec -it certbot /bin/sh /update-cert.sh

以下のとおり、「Certificate operation successful」と表示されれば、SSL証明書の取得は完了です。

反対に、「Certbot failed to authenticate some domains」と表示された場合は、SSL証明書の取得に失敗しています。
エラーの原因は、主に以下の二つです。
- 「HTTP(80/TCP)」ポートへのアクセスを拒否している
「Certbot」は、デフォルトで「HTTP(80/TCP)」のポートを経由してSSL証明書を取得します。
SSL証明書の取得に失敗するときは、「パケットフィルター設定」で80番のポートが開放されているか確認しましょう。
- DNS設定の反映に時間がかかっている
独自ドメインのネームサーバーを変更した場合は、設定が反映されるまでに数時間~24時間ほどかかることもあります。
80番のポートを開放していてエラーが生じるときは、少し時間を置いてから再度コマンドを実行してください。
7. https接続を有効化する
SSL証明書を取得できたら、環境変数ファイルで「https接続」を有効化します。
以下のコマンドで環境変数ファイルの編集画面を開きましょう。
nano .env

Ctrl + Wで検索欄を出して、以下をコピペしてください。
NGINX_HTTPS_ENABLED

「false」を「true」に書き換えます。
NGINX_HTTPS_ENABLED=true

編集後、Ctrl + Xでファイルを保存してください。
8. httpsへの転送設定(リダイレクト)を追加する
現在の設定のままでは、Webブラウザに「http://」から始まるURLを直接打ち込むと、暗号化されていない通信でDifyにアクセスできてしまいます。
Difyのログイン情報やLLMのAPIキーなど、機密情報を第三者に盗み見られるリスクがあり、セキュリティの観点で好ましくありません。
そこで、「http://」のURLにアクセスしても、自動的に安全な「https://」へと転送(リダイレクト)されるよう、Webサーバーの設定を追加します。
まずは以下のコマンドで、80番(http)ポートの通信を制御する設定ファイルを作成しましょう。
nano my_default.conf.template

空のファイルが開いたら、以下の内容をすべてコピペしてください。
# ------------------------------------------------------------
# 80番ポート(HTTP)
# ------------------------------------------------------------
server {
listen 80;
server_name _;
location /.well-known/acme-challenge/ {
root /var/www/html;
}
location / {
return 301 https://$host$request_uri;
}
}
# ------------------------------------------------------------
# 443番ポート(HTTPS)
# ------------------------------------------------------------
server {
listen 443 ssl;
server_name _;
ssl_certificate /etc/letsencrypt/live/${CERTBOT_DOMAIN}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/${CERTBOT_DOMAIN}/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
include proxy.conf;
location /console/api {
proxy_pass http://api:5001;
include proxy.conf;
}
location /api {
proxy_pass http://api:5001;
include proxy.conf;
}
location /v1 {
proxy_pass http://api:5001;
include proxy.conf;
}
location /files {
proxy_pass http://api:5001;
include proxy.conf;
}
location /explore {
proxy_pass http://web:3000;
include proxy.conf;
}
location /e/ {
proxy_pass http://plugin_daemon:5002;
proxy_set_header Dify-Hook-Url $scheme://$host$request_uri;
include proxy.conf;
}
location /mcp {
proxy_pass http://api:5001;
include proxy.conf;
}
location / {
proxy_pass http://web:3000;
include proxy.conf;
}
}

Ctrl + Xでファイルを保存しましょう。
次に、上記の設定をDifyに読み込むよう指示する、「Docker Compose」の上書きファイルを作成します。
以下のコマンドを実行してください。
nano docker-compose.override.yaml

空のファイルが開くので、以下の内容をコピペしましょう。
services:
nginx:
volumes:
- ./my_default.conf.template:/etc/nginx/conf.d/default.conf.template

ペースト後、Ctrl + Xでファイルを保存してください。
9. Docker Composeを再起動する
ここまでの設定を適用するため、以下のコマンドで「Docker Compose」を再起動しましょう。
sudo docker compose up -d

再起動が完了すればOKです。

10. SSL証明書の自動更新を設定する
通常、SSL証明書(Let's Encrypt)の有効期限は、発行から90日間です。
万が一SSL証明書が失効すると、https接続でDifyにアクセスできなくなってしまいます。
そうならないよう、SSL証明書の有効期限を定期的にチェックし、残り30日未満になれば自動で更新する設定ファイルを作成しましょう。
まずは、以下のコマンドで自動更新の指示をまとめるスクリプトファイルを作成します。
nano renew_ssl.sh

以下のコマンドをすべてコピペしてください。
#!/bin/bash
cd /home/xserver/dify/docker
sudo docker compose --profile certbot run --rm certbot certbot renew
sudo docker compose exec nginx nginx -s reload

Ctrl + Xでファイルを保存しましょう。
ファイルを保存後、以下のコマンドで実行権限を変更してください。
chmod +x renew_ssl.sh

次に、作成したスクリプトを定期的に実行するよう、スケジュール機能(Cron)を設定します。
指定した日時にプログラムを自動で実行するスケジュール機能のことです。
あらかじめ日時とコマンドを登録しておくことで、定期的なタスクを自動化できます。
以下のコマンドを実行してください。
sudo crontab -e

以下のとおり、初回のみエディタの選択肢が表示されます。
「1(nanoエディタ)」と入力してEnterを押しましょう。

末尾に以下のコードをペーストしてください。
0 3 * * * /home/xserver/dify/docker/renew_ssl.sh >> /var/log/dify_ssl_renew.log 2>&1

上記のコードは、「毎日午前3時に自動更新のスクリプトを実行する」設定です。
ペーストしたら、Ctrl + Xでファイルを保存しましょう。
11. Difyにアクセスする
最後にDifyにアクセスします。
以下のURLをブラウザに貼り付けて、Enterを押してください。
https://「1. 独自ドメインを準備する」で用意したドメイン

「Docker Compose」の再起動が正常に完了していないと、Difyにアクセスできなかったり、「Internal Server Error」と表示されたりすることがあります。
これは、基本的にデータベースが上手く起動していないときに起きるエラーです。
Difyへのアクセス時にエラーなどが発生した場合は、以下のコマンドで再度「Docker Compose」を起動し直してみてください。
sudo docker compose up -d
管理者アカウントの設定画面が開いたら、任意の「メールアドレス」「ユーザー名」「パスワード」を入力しましょう。

それぞれ入力したあと、セットアップをクリックしてください。

ダッシュボードにログインできれば、「Docker Compose」によるDify環境の構築は完了です。

(補足)Difyをアップデートする手順
Difyでは、新機能の追加やバグの修正など、頻繁にアップデートが提供されています。
また、古いバージョンのまま使い続けると、セキュリティリスクが高まるおそれもあるため、定期的にアップデートするようにしてください。
以下は、Docker Composeで構築したDify環境をアップデートする手順です。
アップデート中に予期せぬエラーが発生し、データが破損する可能性もゼロではありません。
基本的にDifyのアップデートは、事前にバックアップを取得してから実施するのがおすすめです。
なお、本記事ではアップデートの手順のみを解説します。
バックアップも含めた手順については、別の記事で解説する予定です。
SSHでVPSに接続したら、以下のコマンドでDifyを格納するディレクトリに移動しましょう。
cd dify/docker

アップデートの途中でトラブルが起きないよう、一時的に「Docker Compose」を停止してください。
「Docker Compose」を停止すると、Difyは利用できなくなります。
sudo docker compose down

以下のコマンドを実行して、Difyの公式リポジトリから最新のアップデートを取得しましょう。
git pull origin main

続いて、以下のコマンドを実行してください。
sudo docker compose pull

最後に、以下のコマンドを実行すれば、Difyのアップデートは完了です。
sudo docker compose up -d

アップデートによっては、環境変数のテンプレートファイル(「.env.example」)が更新されることもあります。
そのため、アップデート後は「.env.example」ファイルと本番用の「.env」ファイルを見比べて、差異がないか確認するようにしてください。
また、アップデートの手順は、バージョンによって異なる可能性があります。
アップデートがあったときは、以下の公式ページも併せて確認するようにしてください。
【任意】AIアプリの公開範囲を制限する方法
特定のメンバーだけがAIアプリを利用する「クローズドな環境」を構築したい場合は、公開範囲を制限する設定が必要になります。
以下は、本記事で案内する制限方法です。
- パケットフィルター設定を利用する
パケットフィルター設定とは、ポートを開閉することで通信を制御するセキュリティ設定のこと。
簡単に公開範囲を制限できるものの、固定IPアドレスからのアクセスのみを許可するため、利用シーンが限定されてしまいます。
- IP制限とBasic認証を組み合わせる
Webサーバー(Nginx)で固定IPアドレスの通信を許可し、他からのアクセスは「Basic認証」で制御する方法です。
※Basic認証とは、指定のWebページへのアクセスに対し、ユーザー名とパスワードの入力を求める認証方法のこと。
少し手順は難しいものの、より実運用に適しています。
Difyで開発したAIアプリを一般公開したい場合は、こちらのセクションは飛ばしてください。
パケットフィルター設定を利用する
社内からのアクセスに限定するなど、固定IPアドレスの通信のみを許可する場合は、『XServer VPS』で提供する「パケットフィルター設定」の活用が最適です。
許可していない通信を一律で遮断でき、手軽に強固なセキュリティを確保できます。
ただ、IPアドレスが定期的に変動したり、外出先からもアクセスしたりするケースには対応できません。
より柔軟にWebアプリの公開範囲を制御したい場合は、「IP制限とBasic認証を組み合わせる」方法を検討してください。
それでは、「パケットフィルター設定」でAIアプリの公開範囲を制限する方法を解説します。
パケットフィルター設定を追加するをクリックしてください。

まずは、「Certbot」がSSL証明書を更新するために使用する80番ポートを開放しておきます。
手動で設定を選択してください。

「ポート番号」に「80」と入力して、下部の追加するをクリックしましょう。

続いて、Difyがhttps通信に使用する443番ポートに対し、送信元のIPアドレスを限定するよう設定します。
再度、パケットフィルター設定を追加するをクリックして、「手動で設定」を選択してください。
「ポート番号」には「443」と入力します。
「許可する送信元IPアドレス」を「一部許可」に変更したあと、任意のIPアドレスを入力しましょう。
「/32」の数字は、そのままで問題ありません。
それぞれ入力したら、下部の追加するをクリックしてください。

あとは、既存の「Webポート」を削除すれば、パケットフィルター設定による送信元IPアドレスの制限は完了です。

IP制限とBasic認証を組み合わせる
実運用を想定し、AIアプリへのアクセスを柔軟に制御したい場合は、「IP制限」と「Basic認証」を組み合わせる方法がおすすめです。
Webサーバー(Nginx)の設定を変更することで、指定したIPアドレスの通信は許可し、それ以外のアクセスはBasic認証によって制御します。

以下は、「Nginx」の設定を変更し、IP制限とBasic認証を有効化する手順です。
まずは、Basic認証に使用する「ユーザー名」と「パスワード」を定義した「.htpasswd」ファイルを作成しましょう。
VPSにSSH接続したあと、以下のコマンドを実行します。
sudo apt update && sudo apt install -y apache2-utils

Difyを格納するディレクトリ以外で作業している場合は、以下のコマンドで移動してください。
cd dify/docker
続いて、以下のコマンドを実行します。
<ユーザー名>の部分には、Basic認証で使用する任意の英数字を入力しましょう。
htpasswd -c .htpasswd <ユーザー名>

「New password」と表示され、Basic認証用のパスワードの入力が求められます。
任意の英数字を入力してください。
パスワードは、入力しても画面に表示されません。
指示に従い、再度パスワードを入力しましょう。

「Adding password for user <ユーザー名>」と表示されればOKです。

Basic認証用のパスワードファイルを作成したあと、「Nginx」の設定ファイル(my_default.conf.template)を編集してアクセス制御のルールを追加します。
ただ、既存のファイルを手動で編集すると、記述を間違えるかもしれません。
一つインデントがズレるだけでDifyが動かなくなることもあるため、今回は一度ファイルを削除して新規に作成します。
「dify/docker」のディレクトリで、以下のコマンドを実行してください。
rm my_default.conf.template

続いて、以下のコマンドで設定ファイルを新規作成しましょう。
nano my_default.conf.template

ファイルが開いたら、以下のコードをすべてコピペしてください。
# ------------------------------------------------------------
# 80番ポート(HTTP)
# ------------------------------------------------------------
server {
listen 80;
server_name _;
location /.well-known/acme-challenge/ {
root /var/www/html;
}
location / {
return 301 https://$host$request_uri;
}
}
# ------------------------------------------------------------
# 443番ポート(HTTPS)
# ------------------------------------------------------------
server {
listen 443 ssl;
server_name _;
ssl_certificate /etc/letsencrypt/live/${CERTBOT_DOMAIN}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/${CERTBOT_DOMAIN}/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
satisfy any;
allow 127.0.0.1;
allow <指定のIPアドレス>;
deny all;
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
include proxy.conf;
location /console/api {
proxy_pass http://api:5001;
include proxy.conf;
}
location /api {
proxy_pass http://api:5001;
include proxy.conf;
}
location /v1 {
proxy_pass http://api:5001;
include proxy.conf;
}
location /files {
proxy_pass http://api:5001;
include proxy.conf;
}
location /explore {
proxy_pass http://web:3000;
include proxy.conf;
}
location /e/ {
proxy_pass http://plugin_daemon:5002;
proxy_set_header Dify-Hook-Url $scheme://$host$request_uri;
include proxy.conf;
}
location /mcp {
proxy_pass http://api:5001;
include proxy.conf;
}
location / {
proxy_pass http://web:3000;
include proxy.conf;
}
}
「指定のIPアドレス」の部分に、アクセスを許可したいグローバルIPアドレスを入力します。
複数のIPアドレスを許可したい場合は、改行して追記してください。

編集後、Ctrl + Xでファイルを保存しましょう。
本手順では、「Nginx」の設定を「my_default.conf.template」で上書きし、固定しています。
Difyのアップデートにより、公式テンプレートの通信設定(ルーティング)に変更が合った場合、新機能が動かなくなるなどの不整合が生じるかもしれません。
不具合が生じたときは、公式のテンプレートと「my_default.conf.template」ファイルの内容を見比べ、新しい記述があれば追記してください。
次に、追記したルールをDockerに読み込ませるため、「docker-compose.override.yaml」ファイルを編集します。
先ほどと同じく、以下のコマンドで一度ファイルを削除してください。
rm docker-compose.override.yaml

以下のコマンドで、「docker-compose.override.yaml」ファイルを新規作成しましょう。
nano docker-compose.override.yaml

以下の内容をコピペします。
services:
nginx:
volumes:
- ./my_default.conf.template:/etc/nginx/conf.d/default.conf.template
- ./.htpasswd:/etc/nginx/conf.d/.htpasswd

編集したあと、Ctrl + Xでファイルを保存しましょう。
「Nginx」のコンテナを再起動して設定を適用します。
以下のコマンドを実行してください。
sudo docker compose --profile certbot up -d --no-deps --force-recreate nginx

「Started」と表示されれば、IP制限とBasic認証の有効化は完了です。

最後に、IP制限とBasic認証が無事に有効化されているか確認しましょう。
許可したIPアドレスから、通常通りDifyにアクセスできればOKです。
また、許可していないIPアドレスからDifyにアクセスしてみて、以下のとおり「ユーザー名」と「パスワード」の入力が求められれば、Basic認証も正常に有効化されています。

さいごに
以上、VPSでDifyをセルフホストする実践ガイドでした。
テスト用途なら「アプリイメージ」、実運用なら「Docker Compose」で構築するのがおすすめです。
Difyを利用する目的や用途を踏まえ、どちらの方法が自分に合っているか判断してください。
最後までお読みいただき、ありがとうございました。




