公開日:

VPSでお安く自分専用のDifyを持つ方法

Authors
  • author image
    Name
    代表取締役 宮永邦彦
    Twitter
    @miyanaga
  • 画像軽量化とWebフロントエンドのスピード改善の専門家です。Web系のIT技術大好き。

    このサイトではスピード改善のリアルや、日々の技術的な気づきを共有します。

LLMアプリ開発が楽しいDifyだが、無料だとできることが限られ、有料プランは個人にはちと高い。3アカウントも手に余る。

そこでオープンソース版をVPSにセルフホストしてみた。これなら月額1500円程度から、自分だけのDifyを持つことができる。

その手順を紹介したい。


下準備

VPSを起動してLinuxをインストール

VPS事業者はどこでもよいが、ファイアウォール機能を備えたところにしよう。もちろんAmazon EC2などでも構わない。

公式の案内に、最小限のスペックとしてCPU >= 2 Core、RAM >= 4GBとある。

例えば安価なVPSであるWebARENA Indigoなら、1ヶ月税込1,630円からDifyを利用できる。

まずはなんらかのVPSインスタンスを契約し、Ubuntu 24.04をインストールする。

OSについて

Docker Composeを使って進めるので、OSはLinuxならなんでもよい。Ubuntu以外の場合はaptのあたりを読み替えてほしい。

ドメイン名を用意

後ほどLet's EncryptoによるSSLの設定も行うので、VPSのIPアドレスはなんらかのドメイン名で参照できるようにしておく。

自前のドメイン名がなければ、以下のようなサービスでもよい。

  • FreeDNS - 無料で使えるDNSサーバー

VPSでデフォルトのドメイン名を提供しているケースもある。

動作確認用ではFreeDNSを使い、my-dify.mooo.comドメインを取得してみた。

FreeDNSの注意点

FreeDNSは反映に時間がかかった。host ドメイン名などで、正引きできるまでじっくり待とう。

また、sslip.ioのような加工したIPアドレスを事前登録なしにドメイン名にできるサービスもあるが、ドメインからのリクエストが多すぎるとしてLet's Encryptに弾かれてしまった。

ファイアウォールを設定

ファイアウォールは次のTCPポートを解放する。

  • 22 - SSH
  • 80 - HTTP
  • 443 - HTTPS

GitとDockerをインストール

SSHでログインしてシェルから下準備を続ける。

GitとDockerを使うのでこれらを準備する。ついでにファイル編集用のエディタnanoも入れておく。

bash
sudo apt install -y git docker.io docker-compose-v2 nano
# ユーザーがdockerを使用できるようにする(rootで操作する場合は不要)
sudo usermod -G docker ubuntu

Difyをセットアップ

いよいよDifyをセットアップする。

プロジェクトをgit clone

Difyのオープンソースプロジェクトをgit cloneする。

Docker関連はプロジェクトのdockerディレクトリにあるので、そこに移動する。

bash
git clone https://github.com/langgenius/dify.git
cd dify/docker

環境変数.envを用意

.env.exampleから.envを作成する。

bash
cp .env.example .env

初期パスワードとシークレットキー

一応シークレットキーをデフォルトから変えておく。

bash
echo sk-$(openssl rand -base64 42)

# 出力(例)
sk-CAv/mnUJ90kmw8C0KE0rGhvkNJaCVhErCkHDSS5F4UYJbXIPJnsbOD/2

.envを編集し、以下の値を変更する。

bash
SECRET_KEY=作成されたシークレットキー
INIT_PASSWORD=管理者初期化パスワード

管理者初期化パスワードは、管理者作成の前に入力する仮パスワードのようなものだ。

DifyのSSL化

この段階でもうDifyを起動はできるが、SSLには対応していない。

もしロードバランサーなど、SSLゲートウェイを別に用意する場合は、この工程はスキップしてもよい。

証明書の取得

DifyのDocker Composeプロジェクトには、ご丁寧にLet's Encryptのcertbotも含まれている。

詳しくは、dify/docker/certbot/README.md at main · langgenius/difyに解説があり、それを使ってSSL対応を進める。

まずは.envファイルを開いて、次の行を変更する。

bash
# 以下はデフォルト値から書き換える(こうしないとnginxの設定と一致しないっぽい)
NGINX_SSL_CERT_FILENAME=fullchain.pem
NGINX_SSL_CERT_KEY_FILENAME=privkey.pem

# ACMEチャレンジを有効にする
NGINX_ENABLE_CERTBOT_CHALLENGE=true

# 以下はみなさんの状況に合わせて指定する
CERTBOT_DOMAIN=作成したドメイン名 # 筆者の場合は my-dify.mooo.com
CERTBOT_EMAIL=あなたのメールアドレス # 筆者の場合は miyanaga@ideamans.com

変更したら、certbotも含めてDocker Composeを起動する。

bash
docker compose --profile certbot up --force-recreate -d

certbotコンテナが起動したら次のコマンドでSSL証明書を取得する。

bash
docker compose exec -it certbot /bin/sh /update-cert.sh

nginxを再起動して証明書を適用する

再び.envを編集し、次の行を編集する。

bash
NGINX_HTTPS_ENABLED=true

nginxを再起動する。

bash
docker compose --profile certbot up -d --no-deps --force-recreate nginx

コンテナが再起動したらいよいよDifyにアクセスしてみよう。

ログイン画面が出た!

ログイン画面

管理者アカウントの登録

管理者アカウントの設定から最初のアカウントを作成する。

ログイン画面

ここで先ほど設定した管理者初期化パスワードを尋ねられる。

管理者初期化パスワード入力画面

管理者初期化パスワード

これがないと起動直後は誰でも管理者アカウントを作成できてしまう無防備な状態になってしまう。

メールアドレス、ユーザ名、パスワードを入力して管理者アカウントを作成する。

管理者アカウントの設定

管理者アカウントでログインすると…

コミュニティに参加する

ついに自分専用のDifyが手に入った!

Firecrawlのセルフホストと設定

DifyではWebクローラーと連携して簡単にRAGを実装できる。

ぜひ使いたい機能であるが、それにはJina Readerか、FirecrawlのAPIキーが必要だ。

しかしFirecrawlにはオープンソース版があり、これもセルフホストできる。

長くなったので別の記事にする。

自分専用FirecrawlでDifyを便利にするに続く!