【VPSで自作】Difyをセルフホストして独自のセキュアなAIエージェントを構築する手順

生成AIをビジネスや日々の業務に組み込む際、最大の懸念点となるのが「データのセキュリティ」と「運用コスト」です。商用のSaaS型AIサービスは手軽である一方、機密データや顧客情報の送信、API利用トークン量の増加に伴うコスト高騰が課題になります。

これらの課題をクリアする強力な解決策が、オープンソースのLLMアプリ開発プラットフォームである「Dify」を自前のVPS(仮想専用サーバー)でセルフホスト(自己ホスト)することです。データの外部流出リスクを極限まで抑え、API料金のみで制限のない自由なAIエージェント構築環境を手に入れることができます。

本記事では、VPS上にDifyを構築し、セキュアなHTTPS接続を確立して自分専用のAIエージェントを24時間安定稼働させるための具体的な手順を解説します。

以前紹介した【Dify超入門】VPSとDockerでの環境構築手順からさらに一歩踏み込み、実用的なセキュリティ対策やサーバー設計、よくあるトラブルの解決方法までを網羅した実践的な構成となっています。


1. Difyをセルフホストするメリットとシステム構成

Difyは、高度なプロンプトエンジニアリング、RAG(検索拡張生成)、ワークフロー設計、そしてツール統合をノーコード/ローコードで実現できるオープンソースプラットフォームです。

セルフホストのメリット

  • データ主権の確保: 社内ドキュメントや顧客データを自社管理下のVPSに閉じた状態で処理可能。
  • インフラコストの最適化: SaaS版の定額プランや機能制限にとらわれず、サーバーのリソースが許す限りアプリケーションを作成・デプロイ可能。
  • 外部APIとの自由な連携: 独自のWeb APIや社内システムとDifyをシームレスに結合可能。

推奨されるシステム構成

本構築手順では、以下の技術スタックと構成を採用します。

  • サーバー: Ubuntu 22.04 LTS (4 vCPU, 8GB RAM 以上のVPS推奨)
  • コンテナ基盤: Docker / Docker Compose
  • リバースプロキシ: Nginx / Certbot (Let’s Encrypt による無料のSSL/HTTPS化)
  • LLMバックエンド: OpenAI, Anthropic (Claude) などの外部API、またはローカルLLM

Dify本体およびその関連サービス(PostgreSQL、Redis、Vector Databaseなど)はすべてDockerコンテナとしてカプセル化され、VPS上で独立して動作します。

ConoHa WINGでブログを立ち上げる

⚡ 初期費用無料・ドメインが2個無料


2. 前提条件とインフラ(Docker)の準備

まずはVPSにログインし、Docker環境およびビルドに必要な各種ツール一式をインストールします。ここではUbuntu環境を前提とします。

システムパッケージの更新

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git build-essential-y

Docker と Docker Compose V2 のインストール

Difyのコンテナ群をスムーズにオーケストレーションするため、公式のDocker Engineをセットアップします。最新のインストール方法は Docker公式ドキュメント に準拠しています。

# Dockerの公式GPG鍵を追加
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# リポジトリをAPTソースに追加
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# パッケージインデックスの更新とインストール
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 動作確認
docker --version
docker compose version

これでDifyをデプロイするためのインフラ土台が整いました。


3. Difyのクローンと環境変数の設定

次に、Difyの公式ソースコードをクローンして構成ファイルを編集します。Difyのソースは Difyの公式GitHubリポジトリ から取得できます。

# リポジトリのクローン
git clone https://github.com/langgenius/dify.git
cd dify/docker

# 環境設定ファイルのコピー
cp .env.example .env

.env ファイルの主要な設定変更

デフォルトの環境設定ファイルのままでも起動は可能ですが、本番運用およびセキュリティ確保のために以下の項目を変更することを強く推奨します。

# セキュリティ用キーの生成(必ずユニークな文字列に変更する)
# linuxコマンド `openssl rand -base64 42` などで生成した値を設定
SECRET_KEY=YourSuperSecretKeyGoesHereYourSuperSecretKeyGoesHere

# アップロードファイルの制限値(必要に応じて拡張)
UPLOAD_FILE_SIZE_LIMIT=15

# ベクトルデータベースの暗号化キー
VECTOR_LICENSE_KEY=your-unique-vector-key

4. Difyコンテナのデプロイと初期設定

環境変数の編集が完了したら、いよいよDocker Composeを使って全コンテナをバックグラウンドで起動します。

sudo docker compose up -d

起動には数分かかる場合があります。コンテナの動作ステータスは以下のコマンドで確認可能です。

sudo docker compose ps

すべてのサービス(api, web, db, redis, sandbox など)が Up または running になっていれば成功です。

この時点で、ブラウザから http://<あなたのVPSのIPアドレス>:80 にアクセスすると、Difyの管理者初期登録画面が表示されます。しかし、このままHTTP通信の状態で運用するのはセキュリティ上大変危険です(APIキーやログインパスワードが平文でネットワークを流れるため)。

そこで、次にNginxとLet’s Encryptを用いたHTTPS化の設定を行います。


5. セキュリティ強化:NginxによるリバースプロキシとSSL/HTTPS化

ドメイン名(例: dify.example.com)を用いて安全にアクセスできるよう、SSL化を行います。あらかじめお使いのドメイン管理サービスで、VPSのIPアドレスに対する「Aレコード」を登録しておいてください。

CertbotとNginxのインストール

sudo apt install -y nginx certbot python3-certbot-nginx

Nginxの設定ファイル作成

/etc/nginx/sites-available/dify ファイルを新規作成し、以下のリバースプロキシ設定を記述します。

server {
    listen 80;
    server_name dify.example.com; # 取得したドメイン名に置き換えてください

    # Difyコンテナ(デフォルトでポート80でバインドされています)への転送
    location / {
        proxy_pass http://127.0.0.1:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

設定を有効化し、Nginxを再起動します。

sudo ln -s /etc/nginx/sites-available/dify /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

SSL証明書の取得と自動適用

Certbotを実行し、Let’s Encryptから無料のSSL証明書を発行・設定します。

sudo certbot --nginx -d dify.example.com

コマンド内の対話形式プロンプトに従い、メールアドレスの入力と利用規約への同意を行ってください。「Redirect all HTTP traffic to HTTPS」のオプションを選択することで、すべての通信が自動的にセキュアなHTTPS接続にリダイレクトされます。

これで、 https://dify.example.com 経由でのセキュアなAIエージェント構築環境が完成しました。


6. 【トラブルシューティング】VPS構築での代表的なエラーと対処法

セルフホストの構築や運用において、遭遇しやすい代表的なエラーと解決策を解説します。

エラー1: コンテナの起動中に処理が強制終了する(OOM Killerによるメモリ不足)

  • 症状: docker compose up -d の途中でコンテナが終了する、または起動後に一部コンテナ(特に dbvector)が頻繁にクラッシュする。
  • 原因: VPSの物理メモリ(RAM)が不足しています。Difyは複数のデータベースやサービスが同時に動作するため、最低でも2GB〜4GBの空きメモリが必要です。
  • 解決策: VPSのプランをアップグレードするのが最善ですが、暫定対応として「スワップ領域(Swap)」を設定することで物理メモリの不足を補うことができます。
    # 4GBの臨時スワップファイルを作成する場合
    sudo fallocate -l 4G /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
    # 再起動後も有効にするため /etc/fstab に以下を追記
    # /swapfile swap swap defaults 0 0
    

エラー2: 外部API(OpenAIやAnthropicなど)に接続できない

  • 症状: Dify管理画面の「設定 -> モデルプロバイダー」でAPIキーを入力した際、「Connection Timeout」や「Name Resolution Error」が発生する。
  • 原因: VPSのアウトバウンド(送信)通信のファイアウォール設定、またはDNSの名前解決失敗が原因です。
  • 解決策: VPS内の resolv.conf 設定を確認するか、コンテナ内から外部に疎通が通っているかテストします。
    docker compose exec api curl -I https://api.openai.com
    
    疎通が取れない場合は、ホストサーバーのセキュリティグループ、UFWなどのパケットフィルタリングルールで、HTTPS(ポート443)のアウトバウンド通信が許可されているか確認してください。

7. まとめと次のステップ

本記事では、VPS上にDifyをセルフホストし、NginxとLet’s Encryptを組み合わせてセキュアなAIエージェント開発環境を構築する手順を解説しました。

これで、独自の社内ナレッジを学習させたRAG(検索拡張生成)チャットボットや、各種APIを自律的に呼び出すインテリジェントなAIエージェントをセキュリティの心配なくいくらでも量産・構築できるようになりました。

さらにこのエージェントをDiscordやWebアプリケーションと連携させて24時間安定運用させるための設計手法については、こちらのVPSでの自作AIエージェント常時稼働手順の記事を組み合わせることで、より実用的な運用システムを構築することができます。ぜひ、自分だけの強力なAIシステムをデザインしてみてください。