2026年3月更新 約2時間のセットアップ

2026年にDifyをセルフホストする方法

独自のVPSでDifyを実行するための完全な実践ガイド。サーバーの選択からSSL証明書と継続的なメンテナンスまで — すべてが一箇所にまとまっています。

Difyのセルフホスティングとは?

Difyは、AIを活用したアプリ、チャットボット、RAGパイプラインを構築できるオープンソースのLLMアプリケーション開発プラットフォームです。セルフホスティングとは、Dify Cloudを使用する代わりに独自のサーバーでDifyを実行することを意味します。

Dify Cloudよりセルフホスティングを選ぶ主な3つの理由:

  • コスト — Hetzner CX22は月€3.79に対し、Dify Cloud Proは月$59。チームスケールでは節約額は劇的です。
  • コントロール — 設定、プラグイン、カスタムモデルへの完全アクセス、無制限のワークスペースメンバー、メッセージクレジットなし。
  • データプライバシー — プロンプト、ドキュメント、会話履歴が独自のインフラから外に出ることはありません。規制業界に不可欠。

トレードオフとして、セットアップ、更新、稼働時間の責任を負うことになります。このガイドでそれを簡単にします。

サーバー要件

最低

2 vCPU 4GB RAM 50GB SSD

推奨

4 vCPU 8GB RAM 80GB SSD

OS: Ubuntu 22.04 LTS(推奨)。Debian 11/12も動作します。

1

サーバーの選択

ほとんどのセルフホスターには、Hetzner CX22(€3.79/月、2 vCPU、4GB RAM、40GB NVMe)が最適な出発点です。Difyとそのすべてのサービスを快適に実行できます。欧州のデータセンターはGDPRコンプライアンスに理想的です。

より簡単なコントロールパネルを望む初心者には、Hostinger VPSが$7.99/月から利用でき、より多くのサポートが含まれています。8GB RAMが必要な場合、KVM 2プラン($9.99/月)は優れたコスパを提供します。

ヒント:公開SSH鍵を追加済みでサーバーを作成してください。パスワード認証を完全に回避でき、より安全です。

2

サーバーの初期設定

サーバーに接続して初期設定を実行します:

# サーバーにSSH接続
ssh root@YOUR_SERVER_IP

# パッケージを更新
apt update && apt upgrade -y

# 必須ツールをインストール
apt install -y curl wget git ufw

# 非rootユーザーを作成
adduser dify
usermod -aG sudo dify

# 新しいユーザーにSSH鍵をコピー
rsync --archive --chown=dify:dify ~/.ssh /home/dify

# UFWファイアウォールを設定
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp comment 'SSH'
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'
ufw --force enable
ufw status

ログアウトして、残りのステップのためにdifyユーザーとして再接続します。

3

Docker Engineのインストール

公式のaptリポジトリを使ってDockerをインストールします — snapバージョンは使用しないでください:

# 前提条件をインストール
sudo apt install -y ca-certificates curl gnupg lsb-release

# 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

# DockerのaptリポジトリをはP加
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

# Docker Engineをインストール
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

# ユーザーをdockerグループに追加(sudoなしで実行可能に)
sudo usermod -aG docker $USER
newgrp docker

# インストールを確認
docker --version
4

Docker Composeプラグインのインストール

Docker Composeプラグインは上記のパッケージに含まれています。動作を確認します:

# Docker Composeのバージョンを確認(v2.xである必要あり)
docker compose version

# インストールされていない場合、手動で追加
sudo apt install -y docker-compose-plugin
5

Difyのクローンと設定

Difyの公式リポジトリをクローンして環境を設定します:

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

# サンプルから.envファイルを作成
cp .env.example .env

# 安全なSECRET_KEYを生成
openssl rand -base64 42

# .envファイルを編集
nano .env

.envの重要な設定を更新します:

# 必須:強力なランダム秘密鍵を設定
SECRET_KEY=ここに生成した秘密鍵を入力

# ドメインを設定(メールとリンクに使用)
CONSOLE_URL=https://your-domain.com
APP_URL=https://your-domain.com

# デフォルトのデータベースパスワードを変更
DB_PASSWORD=強力なDBパスワードを入力

# デフォルトのRedisパスワードを変更
REDIS_PASSWORD=強力なRedisパスワードを入力

# 任意:素早く始めるためにOpenAI APIキーを追加
OPENAI_API_KEY=sk-...
6

Difyの起動

Docker ComposeですべてのDifyサービスを起動します:

# すべてのサービスをバックグラウンドで起動
docker compose up -d

# すべてのコンテナが動作していることを確認
docker compose ps

# 起動を追跡するためにログを追跡(Ctrl+Cで終了)
docker compose logs -f

すべてのコンテナがhealthyステータスを表示したら(1〜2分かかります)、http://YOUR_SERVER_IPにアクセスして管理者設定ウィザードを完了します。

7

NginxとSSLの設定

DifyのDockerスタックにはポート80で独自のNginxが含まれています。SSLには、その前にホストレベルのNginxをリバースプロキシとして追加します。まず、競合を避けるためにDifyのポートを変更します:

# dify/docker/.envでNginxポートを変更
EXPOSE_NGINX_PORT=8080

# 適用のために再起動
docker compose down && docker compose up -d

# ホストNginxとCertbotをインストール
sudo apt install -y nginx certbot python3-certbot-nginx

# ドメイン用のNginx設定を作成
sudo nano /etc/nginx/sites-available/dify

この設定を追加します(your-domain.comを置き換えてください):

# 有効化してテスト
sudo ln -s /etc/nginx/sites-available/dify /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

# SSL証明書を取得(NginxをHTTPS用に自動設定)
sudo certbot --nginx -d your-domain.com -d www.your-domain.com
8

メンテナンス

Difyの更新 — Difyは頻繁にアップデートをリリースします。設定変更なしで更新します:

cd ~/dify
git pull origin main
cd docker
docker compose pull
docker compose up -d

バックアップ — PostgreSQLデータベースとアップロードされたファイルをバックアップします:

# データベースのバックアップ
docker compose exec db pg_dump -U postgres dify > backup_$(date +%Y%m%d).sql

# アップロードされたファイルのバックアップ
tar -czf dify_storage_$(date +%Y%m%d).tar.gz ./volumes/app/storage

監視 — リソース使用量を確認します:

# コンテナのリソース使用量
docker stats

# ディスク使用量
df -h
docker system df

よくある質問

ポートの競合:ポート80がすでに使用されています

別のサービス(多くの場合Apache)がポート80を占有しています。停止するか(sudo systemctl stop apache2)、.envEXPOSE_NGINX_PORT=8080を設定してDifyのNginxポートを変更してください。

コンテナがメモリ不足エラーで終了する

DifyにはRAMが最低4GB必要です。free -hで確認してください。RAMが限界に達している場合、4GBスワップファイルを追加します:fallocate -l 4G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile

管理者設定ページにアクセスできない

すべてのコンテナが動作していることを確認します(docker compose ps)。ファイアウォールがポート80を許可していることも確認してください(sudo ufw status)。APIコンテナは準備完了まで30〜60秒かかります — healthyステータスを待ってください。

管理者パスワードを忘れた

APIコンテナでリセットします:docker compose exec api flask reset-password — メールアドレスと新しいパスワードの入力プロンプトに従ってください。

ダウンタイムなしでDifyを更新するには?

docker compose pullで新しいイメージを事前ダウンロードし、その後docker compose up -dで適用します。Docker Composeはデフォルトでローリング再起動を行うため、ダウンタイムは通常30秒未満です。

一般的な間違いとその回避方法

1. Dockerのポート設定ミス

Dockerコンテナのポートを正しく設定しないことがよくあります。特に、DifyのAPIがリッスンするポートはデフォルトで5000です。ポートを開放しないと、接続できません。

修正方法: docker-compose.yml内でポート設定を確認し、以下のように設定します。

ports:
      - "5000:5000"

2. 環境変数の設定忘れ

環境変数を設定しないと、Difyが正常に動作しません。特に、DATABASE_URLSECRET_KEYが必要です。

修正方法: .envファイルを作成し、必要な変数を追加します。

DATABASE_URL=postgres://user:password@db:5432/dify
SECRET_KEY=your_secret_key

3. SSL証明書の設定ミス

SSL証明書が正しく設定されていないと、HTTPS接続が失敗します。特に、証明書のパスや権限に注意が必要です。

修正方法: Nginxの設定ファイルを確認し、正しいパスを指定します。

4. メモリ不足によるクラッシュ

サーバーのRAMが不足すると、Difyがクラッシュすることがあります。特に、4GB RAMでは負荷が高い場合に問題が発生します。

修正方法: サーバーのRAMを8GB以上にアップグレードするか、不要なサービスを停止します。

高度な設定

1. リクエスト制限の設定

高トラフィック時にサーバーが過負荷にならないように、リクエスト制限を設定します。

http {
      limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
      server {
          location / {
              limit_req zone=one burst=5;
          }
      }
  }

2. ログローテーションの設定

ログファイルが肥大化しないように、ログローテーションを設定します。

/var/log/dify/*.log {
      daily
      missingok
      rotate 7
      compress
      delaycompress
      notifempty
      create 0640 dify dify
      sharedscripts
      postrotate
          systemctl reload nginx > /dev/null 2>/dev/null || true
      endscript
  }