見出し画像

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

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

ピックアップされています

AI活用術

  • 169本

コメント

コメントを投稿するには、 ログイン または 会員登録 をする必要があります。
エンジニア・アーティスト。市販CDのアートワーク提供、Codrops等の海外Web制作者向けサイトへのチュートリアル記事提供等。生協組合員として宅食サービス利用等の消費活動も行っている。ホームページで無料の画像加工サービスを公開中。 https://xoihazard.com
Difyを使ってLLMアプリを開発しよう - 環境構築とインターネット公開|Xoihazard
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1