見出し画像

Difyを使ってLLMアプリを開発しよう - 環境構築とインターネット公開

はじめに

近年、大規模言語モデル(LLM)を活用したアプリケーション開発が注目を集めています。LLMを使うことで、自然言語処理や対話型AIなどの分野で革新的なアプリケーションを作成できます。しかし、LLMアプリの開発には、ワークフローの構築、モデルの管理、プロンプトの最適化など、多くの課題があります。

そこで、本記事では、オープンソースのLLMアプリ開発プラットフォームであるDifyを紹介します。Difyは、直感的なインターフェースを通じて、AIワークフロー、RAGパイプライン、エージェント機能、モデル管理、監視機能などを組み合わせ、プロトタイプから本番環境までを迅速に進められるようにします。

Difyの主要機能は以下の通りです:

  1. ワークフロー:ビジュアルなキャンバス上で強力なAIワークフローを構築・テストできます。

  2. 包括的なモデルサポート:数百もの独自・オープンソースのLLMと、数十ものインファレンスプロバイダーおよびセルフホストソリューションとのシームレスな統合を提供します。

  3. プロンプトIDE:プロンプトを作成し、モデルのパフォーマンスを比較し、音声合成などの追加機能をチャットベースのアプリに追加するための直感的なインターフェースです。

  4. RAGパイプライン:ドキュメントの取り込みから検索まで、あらゆることをカバーする広範なRAG機能を提供します。

  5. エージェント機能:LLM関数呼び出しやReActに基づいてエージェントを定義し、エージェントに組み込みまたはカスタムツールを追加できます。

  6. LLMOps:アプリケーションのログとパフォーマンスを監視・分析できます。

  7. 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との親和性が高く、多くのユーザーに支持されているディストリビューションです。

サーバーの準備

サーバーは、以下のような方法で準備できます:

  1. オンプレミス:Proxmoxなどの仮想化プラットフォームを使って、自社のインフラ上にサーバーを構築する。

  2. クラウド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のインストール

インストール手順の概要:

  1. 古いバージョンのDockerを削除

  2. 必要なパッケージのインストール

  3. Docker公式GPG鍵の追加

  4. Dockerリポジトリのセットアップ

  5. 最新バージョンのDockerのインストール

  6. Dockerデーモンの起動

  7. 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をインターネットに公開するには、以下の手順が必要です。

  1. Cloudflareアカウントの作成と、ドメインの登録(無料プランでも可能)

  2. cloudflaredのインストール

  3. Cloudflare Tunnelの作成と設定

  4. Difyへのトンネル接続の確立

  5. 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で公開できます。以下の手順で設定します。

  1. Cloudflare Dashboardにログインし、「Access」→「Tunnels」へ移動

  2. 「Create a tunnel」をクリックし、トンネルに名前を付ける(例:dify-tunnel)

  3. トンネルの作成が完了したら、「Configure」をクリック

  4. 「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)の機能を活用して、簡単にアクセス制御を設定できます。

推奨されるアクセス制御の方法は以下の通りです。

  1. メール認証:指定したメールアドレスを持つユーザーのみがアクセス可能

  2. 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アプリの開発を進めることができます。

この記事が気に入ったらサポートをしてみませんか?