2026年にDifyをセルフホストする方法
独自のVPSでDifyを実行するための完全な実践ガイド。サーバーの選択からSSL証明書と継続的なメンテナンスまで — すべてが一箇所にまとまっています。
Difyのセルフホスティングとは?
Difyは、AIを活用したアプリ、チャットボット、RAGパイプラインを構築できるオープンソースのLLMアプリケーション開発プラットフォームです。セルフホスティングとは、Dify Cloudを使用する代わりに独自のサーバーでDifyを実行することを意味します。
Dify Cloudよりセルフホスティングを選ぶ主な3つの理由:
- コスト — Hetzner CX22は月€3.79に対し、Dify Cloud Proは月$59。チームスケールでは節約額は劇的です。
- コントロール — 設定、プラグイン、カスタムモデルへの完全アクセス、無制限のワークスペースメンバー、メッセージクレジットなし。
- データプライバシー — プロンプト、ドキュメント、会話履歴が独自のインフラから外に出ることはありません。規制業界に不可欠。
トレードオフとして、セットアップ、更新、稼働時間の責任を負うことになります。このガイドでそれを簡単にします。
サーバー要件
最低
推奨
OS: Ubuntu 22.04 LTS(推奨)。Debian 11/12も動作します。
サーバーの選択
ほとんどのセルフホスターには、Hetzner CX22(€3.79/月、2 vCPU、4GB RAM、40GB NVMe)が最適な出発点です。Difyとそのすべてのサービスを快適に実行できます。欧州のデータセンターはGDPRコンプライアンスに理想的です。
より簡単なコントロールパネルを望む初心者には、Hostinger VPSが$7.99/月から利用でき、より多くのサポートが含まれています。8GB RAMが必要な場合、KVM 2プラン($9.99/月)は優れたコスパを提供します。
ヒント:公開SSH鍵を追加済みでサーバーを作成してください。パスワード認証を完全に回避でき、より安全です。
サーバーの初期設定
サーバーに接続して初期設定を実行します:
# サーバーに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ユーザーとして再接続します。
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 Docker Composeプラグインのインストール
Docker Composeプラグインは上記のパッケージに含まれています。動作を確認します:
# Docker Composeのバージョンを確認(v2.xである必要あり)
docker compose version
# インストールされていない場合、手動で追加
sudo apt install -y docker-compose-plugin 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-... Difyの起動
Docker ComposeですべてのDifyサービスを起動します:
# すべてのサービスをバックグラウンドで起動
docker compose up -d
# すべてのコンテナが動作していることを確認
docker compose ps
# 起動を追跡するためにログを追跡(Ctrl+Cで終了)
docker compose logs -f すべてのコンテナがhealthyステータスを表示したら(1〜2分かかります)、http://YOUR_SERVER_IPにアクセスして管理者設定ウィザードを完了します。
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を置き換えてください):
server {
listen 80;
server_name your-domain.com www.your-domain.com;
location / {
proxy_pass http://localhost:8080;
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;
proxy_read_timeout 300s;
client_max_body_size 100M;
}
} # 有効化してテスト
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 メンテナンス
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)、.envでEXPOSE_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秒未満です。