Difyを使ってLLMアプリを開発しよう - 環境構築とインターネット公開
はじめに
近年、大規模言語モデル(LLM)を活用したアプリケーション開発が注目を集めています。LLMを使うことで、自然言語処理や対話型AIなどの分野で革新的なアプリケーションを作成できます。しかし、LLMアプリの開発には、ワークフローの構築、モデルの管理、プロンプトの最適化など、多くの課題があります。
そこで、本記事では、オープンソースのLLMアプリ開発プラットフォームであるDifyを紹介します。Difyは、直感的なインターフェースを通じて、AIワークフロー、RAGパイプライン、エージェント機能、モデル管理、監視機能などを組み合わせ、プロトタイプから本番環境までを迅速に進められるようにします。
Difyの主要機能は以下の通りです:
ワークフロー:ビジュアルなキャンバス上で強力なAIワークフローを構築・テストできます。
包括的なモデルサポート:数百もの独自・オープンソースのLLMと、数十ものインファレンスプロバイダーおよびセルフホストソリューションとのシームレスな統合を提供します。
プロンプトIDE:プロンプトを作成し、モデルのパフォーマンスを比較し、音声合成などの追加機能をチャットベースのアプリに追加するための直感的なインターフェースです。
RAGパイプライン:ドキュメントの取り込みから検索まで、あらゆることをカバーする広範なRAG機能を提供します。
エージェント機能:LLM関数呼び出しやReActに基づいてエージェントを定義し、エージェントに組み込みまたはカスタムツールを追加できます。
LLMOps:アプリケーションのログとパフォーマンスを監視・分析できます。
Backend-as-a-Service:Difyの全機能に対応するAPIを提供しているため、自社のビジネスロジックにDifyを容易に統合できます。
本記事では、Dify環境のセットアップ方法と、Cloudflare Tunnelを使ってインターネットからアクセスできるようにする手順を説明します。
環境準備
Difyを使ってLLMアプリを開発するには、まず適切なサーバー環境を準備する必要があります。DifyはDocker以外でも動作しますが、今回はDockerを使用した方法を説明します。Dockerを使うことで、セットアップ手順が簡単になり、環境の一貫性を保つことができます。
サーバー要件
Difyを快適に動作させるには、以下のスペックを満たすサーバーが必要です:
メモリ:4GB以上
CPU:2コア以上
これらは最低限の要件ですが、より多くのリソースを割り当てることで、パフォーマンスを向上させることができます。
オペレーティングシステム
Difyは、LinuxベースのOSで動作します。特に、Ubuntuの使用を推奨します。Ubuntuは、Dockerとの親和性が高く、多くのユーザーに支持されているディストリビューションです。
サーバーの準備
サーバーは、以下のような方法で準備できます:
オンプレミス:Proxmoxなどの仮想化プラットフォームを使って、自社のインフラ上にサーバーを構築する。
クラウドVPS:AWS、Google Cloud Platform、DigitalOceanなどのクラウドプロバイダーが提供するVPSを利用する。
クラウドVPSを使う場合は、以下の点に注意してください:
適切なリージョンを選択する(アプリケーションを利用するユーザーに近いリージョンを選ぶ)。
適切なインスタンスタイプを選択する(メモリとCPUの要件を満たすもの)。
Proxmoxについて
Proxmoxは、オープンソースの仮想化プラットフォームです。Linux KVMとLXCを使って、仮想マシンとコンテナを管理できます。Proxmoxは、WebUIを提供しており、ブラウザから簡単に仮想環境を管理できます。
Proxmoxを使えば、Linuxサーバーを手軽に立ち上げることができます。必要な分だけ仮想マシンを作成し、リソースを割り当てられるため、クラウドサービスを契約するよりも安く、かつ柔軟にサーバーを運用できます。
私も自宅にProxmoxサーバーを設置して使っています。Proxmoxは、オープンソースプロジェクトの実行を試すのに最適なソリューションです。以下のような利点があります:
無料で利用できる。
仮想マシンとコンテナの両方を管理できる。
スナップショット機能により、環境の状態を簡単に保存・復元できる。
テンプレート機能により、新しい環境を素早く作成できる。
WebUIが使いやすく、リモートからの管理が容易。
Proxmoxを使えば、Difyをはじめとする様々なOSSプロジェクトを、手軽に試すことができます。
Cloudflare Tunnelについて
後の手順で、Cloudflare Tunnelを使ってDifyをインターネットに公開する方法を説明します。Cloudflare Tunnelは、Cloudflareが提供するサービスで、NATの内側にあるサーバーやSSH以外のポートを開放せずに、安全にインターネットにサービスを公開することができます。
Cloudflare Tunnelを使うことで、以下のようなメリットがあります:
SSHポート以外を開放する必要がなくなるため、セキュリティが向上する。
NATの内側にサーバーがあっても、外部からアクセスできるようになる。
Cloudflareのグローバルネットワークを利用できるため、パフォーマンスが向上する。
Cloudflareが提供する多彩なアクセス制御機能(IPアドレス制限、認証、認可など)を利用できる。
Cloudflareの Web Application Firewall(WAF)を使って、アプリケーションを各種の攻撃から保護できる。
これらの機能を活用することで、Difyアプリをより安全に、かつ高いパフォーマンスで提供できるようになります。
サーバーが準備できたら、次はDockerのインストールに進みます。
Dockerのインストール
Difyを使用するには、まずDockerをインストールする必要があります。ここでは、UbuntuにDockerをインストールする手順を説明します。
前提条件
Ubuntu 20.04以降のシステム
sudoアクセス権限
インストール手順
Dockerの公式ガイドに従って、Ubuntuに最新バージョンのDockerをインストールしてください。
Docker公式ガイド - UbuntuへのDockerのインストール
インストール手順の概要:
古いバージョンのDockerを削除
必要なパッケージのインストール
Docker公式GPG鍵の追加
Dockerリポジトリのセットアップ
最新バージョンのDockerのインストール
Dockerデーモンの起動
sudo無しでDockerを実行できるようにユーザーをdockerグループに追加
docker-composeのインストールについて
Difyでは、docker composeコマンドを使用するため、別途docker-composeをインストールする必要はありません。docker composeコマンドは、Docker Engine 1.13.0以降に含まれています。
Dockerのインストールを確認
以下のコマンドを実行して、Dockerが正常にインストールされたことを確認します。
docker --version
docker compose version
これで、DockerとDocker Composeが正常にインストールされました。次のセクションでは、Difyのインストールと設定について説明します。
Difyのインストールと設定
Difyのインストールは、公式ガイドに従って行います。ここでは、docker-composeを使用してDifyをインストールする手順を説明します。
Difyのクローン
まず、Difyのソースコードをローカルマシンにクローンします。
git clone https://github.com/langgenius/dify.git
docker-compose.override.yamlの作成
公式ガイドでは、docker-compose.yamlを直接編集すると説明されていますが、将来的にDifyのアップデートを行う際に、git pullを使用してソースコードを更新しやすくするために、docker-compose.override.yamlを作成することをお勧めします。
docker-compose.override.yamlは、docker-compose.yamlの設定を上書きするために使用されます。このファイルを使用することで、元のdocker-compose.yamlを変更せずに済み、Difyのアップデートによる設定の上書きを防ぐことができます。
dify/dockerディレクトリに移動し、docker-compose.override.yamlファイルを作成します。
cd dify/docker
touch docker-compose.override.yaml
docker-compose.override.yamlに以下の内容を記述します。
version: '3'
services:
api:
environment:
CONSOLE_WEB_URL: 'https://dify.example.com'
CONSOLE_API_URL: 'https://dify.example.com'
MAIL_TYPE: 'smtp'
MAIL_DEFAULT_SEND_FROM: 'example@gmail.com'
SMTP_SERVER: 'smtp.gmail.com'
SMTP_PORT: 587
SMTP_USERNAME: 'example@gmail.com'
SMTP_PASSWORD: 'xxxx xxxx xxxx xxxx' # Gmailのアプリパスワード
SMTP_USE_TLS: 'true'
worker:
environment:
CONSOLE_WEB_URL: 'https://dify.example.com'
CONSOLE_API_URL: 'https://dify.example.com'
MAIL_TYPE: 'smtp'
MAIL_DEFAULT_SEND_FROM: 'example@gmail.com'
SMTP_SERVER: 'smtp.gmail.com'
SMTP_PORT: 587
SMTP_USERNAME: 'example@gmail.com'
SMTP_PASSWORD: 'xxxx xxxx xxxx xxxx'
SMTP_USE_TLS: 'true'
nginx:
ports:
- "8080:80" # Difyを公開するポート
この設定ファイルでは、以下の項目を設定しています。
CONSOLE_WEB_URLとCONSOLE_API_URL: Cloudflare Tunnelで割り当てるDifyのWebコンソールとAPIのURL
メール設定: SMTPサーバー、ポート、ユーザー名、パスワード、TLSの使用
Nginxのポート: Difyを公開するポート(8080に変更)
Difyの起動
設定ファイルを作成したら、以下のコマンドを実行してDifyを起動します。
docker compose up -d
これで、Difyがバックグラウンドで実行されます。インストールが完了したら、http://localhost:8080にアクセスしてDifyのWebコンソールを開くことができます。
Difyの停止
Difyを停止するには、以下のコマンドを実行します。
docker compose down
このコマンドは、Difyのコンテナを停止し、関連するネットワークを削除します。
ログの確認
Difyの実行ログを確認するには、以下のコマンドを使用します。
docker compose logs -f
このコマンドは、Difyのすべてのコンテナのログを表示し、-fオプションを使用することで、リアルタイムでログを追跡することができます。
次のセクションでは、Cloudflare Tunnelを使用してDifyをインターネットに公開する方法について説明します。
Cloudflare Tunnelを使ったインターネット公開
Cloudflare Tunnelの概要と利点
Cloudflare Tunnelは、ローカルネットワーク上のサービスをインターネットに安全に公開するためのソリューションです。主な利点は以下の通りです。
SSL/TLSによる暗号化通信で、セキュアにサービスを公開できる
NAT traversalの問題を解決し、ファイアウォールの設定変更なしでサービスを公開できる
Cloudflareのグローバルネットワークを利用して、高速かつ安定したアクセスを提供
Cloudflare Tunnelのセットアップ
Cloudflare Tunnelを使ってDifyをインターネットに公開するには、以下の手順が必要です。
Cloudflareアカウントの作成と、ドメインの登録(無料プランでも可能)
cloudflaredのインストール
Cloudflare Tunnelの作成と設定
Difyへのトンネル接続の確立
Cloudflare DashboardでDNSの設定
筆者は、Proxmox上にcloudflared用のコンテナを作成し、そこでCloudflare Tunnelを運用しています。これにより、Difyとは別のコンテナでcloudflaredを管理でき、柔軟性と安定性が向上します。
具体的な設定方法については、Cloudflare Zero Trustのドキュメントを参照してください。わかりやすいガイドが提供されており、手順に沿って進めることで、簡単にCloudflare Tunnelを使ったDifyの公開が可能です。
独自ドメインでDifyを公開
Cloudflare Tunnelを使って、独自ドメインでDifyを公開することができます。例えば、ローカル環境でhttp://localhost:8080で動作しているDifyを、dify.yourdomain.comというURLで公開できます。以下の手順で設定します。
Cloudflare Dashboardにログインし、「Access」→「Tunnels」へ移動
「Create a tunnel」をクリックし、トンネルに名前を付ける(例:dify-tunnel)
トンネルの作成が完了したら、「Configure」をクリック
「Public Hostname」セクションで、以下の設定を行う
「Hostname」にdify.yourdomain.comと入力
「Service」にhttp://localhost:8080と入力
「Save hostname」をクリック
これにより、Cloudflare Tunnelが作成され、http://localhost:8080で動作しているDifyに、https://dify.yourdomain.comというURLでアクセスできるようになります。
サーバー側での設定は、Cloudflare Dashboardに表示されるインストールコマンドを実行するだけです。cloudflaredのインストールと、トンネルの認証情報の取得が自動的に行われます。
アクセス制御の設定
個人でDifyを公開する場合、不特定多数からのアクセスを防ぐために、アクセス制御を設定することを強くお勧めします。Cloudflare Tunnelを使う場合、Cloudflare Access(Zero Trust)の機能を活用して、簡単にアクセス制御を設定できます。
推奨されるアクセス制御の方法は以下の通りです。
メール認証:指定したメールアドレスを持つユーザーのみがアクセス可能
Google認証:Googleアカウントを使った認証でアクセスを制御
これらの認証方式を組み合わせることで、セキュリティを強化できます。
また、メールアドレスのドメインを指定することで、特定の企業内のユーザーのみにアクセスを許可することも可能です。例えば、@yourcompany.comというドメインのメールアドレスを持つユーザーのみにアクセスを制限できます。
Cloudflare Accessでは、以下のような詳細なアクセス制御も設定できます。
IPアドレスによるアクセス制限
特定のデバイスのみアクセスを許可
時間帯によるアクセス制限
多要素認証(MFA)の強制
これらの機能を活用することで、個人で公開したDifyへのアクセスを細かく制御し、セキュリティを確保することができます。
Cloudflare Accessの設定方法については、公式ドキュメントを参照してください。わかりやすいガイドが提供されており、少ない手順でアクセス制御を実装できます。
個人で使用する場合でも、適切なアクセス制御を設定することで、安心してDifyをインターネットに公開し、LLMアプリの開発を進めることができます。
まとめ
この記事では、Difyを使ったLLMアプリ開発環境の構築方法とCloudflare Tunnelを使ったインターネット公開について説明しました。
まず、Difyの概要と主要機能を紹介し、環境準備として、サーバー要件とDockerのインストール手順を解説しました。次に、Difyのインストールと設定方法を説明し、docker-compose.override.yamlを使った設定の管理方法を紹介しました。
次に、Cloudflare Tunnelを使ったDifyのインターネット公開方法を説明しました。Cloudflare Tunnelの概要と利点を述べ、Cloudflare Dashboardを使った簡単な設定方法を紹介しました。また、独自ドメインを使ってDifyを公開する方法も解説しました。
さらに、個人で使用する場合のアクセス制御の重要性を強調し、メール認証やGoogle認証、メールアドレスのドメイン指定などの方法を紹介しました。Cloudflare Accessの機能を活用することで、簡単にアクセス制御を設定できることを説明しました。
ProxmoxでのローカルサーバーとCloudflare Tunnelの組み合わせは、Difyに限らず様々な用途で応用が利きます。ローカルホストにアクセスして使うよりもはるかに使いやすく、セキュアにサービスを公開できます。この方法を習得することで、他のサービスやアプリケーションでも同様の設定を行うことができます。
Difyは、LLMアプリの開発を容易にするための強力なプラットフォームです。Dockerを使った環境構築と、Cloudflare Tunnelを使ったインターネット公開により、簡単かつセキュアにDifyを利用できます。適切なアクセス制御を設定することで、個人でも安心してDifyを使ったLLMアプリの開発を進めることができます。
この記事が気に入ったらサポートをしてみませんか?