IT

Difyのセルフホスティング:インストールとセットアップガイド

はじめに

Difyは、コードを書かずにAIアプリケーションを構築できるオープンソースのプラットフォームです。いわゆる「LLMOpsプラットフォーム」(大規模言語モデルの運用基盤)と呼ばれることもありますが、使い方は簡単で、専門知識がなくても扱えます。Difyを使うと、視覚的なインターフェース上でAIのワークフローを作成し、強力な言語モデル(GPT-4などのLLM)に接続して対話型アプリやチャットボットを作ることができます。また、自分のデータを読み込んでAIの文脈として利用するRAG(Retrieval-Augmented Generation)の機能も備えています。何より嬉しいのは、Difyはセルフホスト(自前サーバーでの運用)が可能なことです。自分自身のコンピュータやサーバーにDifyをインストールして動かすことで、データや設定を完全に自分でコントロールできます。本ガイドでは、Difyとは何か、そのセルフホスティングのメリット、そして実際にDifyをインストールしてセットアップする手順を、初心者向けに詳しく解説します。Dockerなどの用語が出てきますが、順を追って説明しますので安心してください。このガイドを読み終える頃には、ご自身の環境でDifyが動き始め、AIアプリ作りの第一歩を踏み出せるでしょう。

Difyとは? なぜセルフホストするのか

Dify(「Do It For You」の略)は、迅速にジェネレーティブAIアプリケーションを構築するためのプラットフォームです。視覚的なドラッグ&ドロップのワークフローエディタを備え、コードを書かずにAIの処理手順をデザインできます。エージェント(Agent)と呼ばれるAIの自律的な動作フレームワークや、RAG(外部データを使った応答生成)、複数のAIモデルの切り替え、そして運用・監視機能(ログやコストの確認など)もオールインワンで提供しています。簡単に言えば、DifyがあればチャットボットAIアシスタント、質問応答システムなどを、自分専用のChatGPTのような形で作成できるのです。しかもオープンソースなので自由に導入・カスタマイズできます。

では、わざわざセルフホスト(自分でサーバーにインストール)するメリットは何でしょうか?主な理由をいくつか挙げてみます。

  • データのプライバシーと制御: セルフホスティングでは、すべてのデータとAIのやりとりが自分のサーバー内に留まります。第三者のクラウドにデータを預けないので、機密情報を扱う場合も安心です。また、サービス提供者のポリシー変更等に左右されず、自分のペースで運用できます。
  • カスタマイズ性: 自前で動かすことで、Difyの設定や機能を柔軟に調整できます。例えば、社内の認証システムと統合したり、オープンソースのAIモデルを組み込んだり、UIを自社ブランドに合わせて変更することも可能です。クラウド版ではできない細かな調整も、セルフホストなら自分次第です。
  • コスト効率: Dify自体はオープンソースで無料ですが、クラウド版を使う場合は制限や料金が発生するかもしれません。セルフホストなら、自分のサーバー代(またはクラウドVM代)と利用するAIモデルのAPI料金だけで済みます。長期的に見ると、使用量が多い場合はセルフホストの方が経済的になる可能性があります。もちろん、自分で管理する手間もありますが、うまく運用すれば費用対効果は高いでしょう。
  • 学習機会と資産の所有: 技術愛好家や開発者にとって、自分でAIプラットフォームを立ち上げる経験は貴重です。インフラからアプリまでを構築する過程で、AIアプリの仕組み(データベース、バックエンド、フロントエンド、モデル連携など)を深く理解できます。また、構築したシステムは自分の資産となり、外部要因で突然使えなくなる心配もありません(サービス終了やAPI変更による影響が少ない)。

一方でセルフホストには、サーバーのメンテナンス(アップデート適用やセキュリティ対策など)の責任も伴います。しかし、Difyのコミュニティやドキュメントが充実しているため、困ったときの助けは得られるでしょう。このガイドに沿って進めれば、初期セットアップはスムーズに行えるはずです。それでは、インストールに必要な前提条件から確認していきましょう。

導入前の準備(必要要件)

Difyをセルフホストで動かすにあたり、事前に以下の準備・確認をしてください。

  • ハードウェア要件: 動作させるコンピュータやサーバーが必要です。ローカルPCでも試せますし、本番用途ならクラウド上のVPSや社内サーバーでも構いません。最低でもCPU 2コア、メモリ4GB程度のリソースが推奨されます(これはDify公式の最低要件です)。軽い検証なら4GBでも動きますが、複数のコンテナが動く関係上、可能なら8GB以上あると安心です。Docker Desktopを使用する場合は、設定でDocker用VMに割り当てるリソースを2CPU・8GB程度に上げておきましょう。
  • オペレーティングシステム: 開発・実行環境としてはLinuxが最も一般的です(UbuntuやCentOSなど、最新のもの)。Dockerを利用する前提なら、WindowsやmacOSでもDocker Desktop経由で問題なく動作します。ただしWindowsの場合はWSL2(Windows Subsystem for Linux 2)が有効になっている必要があります。macOSの場合もDocker Desktopを使えばOKです。要はDockerさえ動けばOSは問いませんが、本番運用ではLinuxサーバーが主流です。
  • DockerとDocker Compose: Difyを簡単にデプロイするには、Dockerコンテナ技術を使う方法が推奨されています。ですのでDocker Engine(Docker本体)とDocker Composeがインストールされている必要があります。Docker Composeは、最近のDockerには統合(docker composeコマンド)されています。まだインストールしていない場合は、公式サイトからDocker Desktop(Windows/macOS向け)をダウンロードするか、Linuxでは公式ドキュメントに従ってインストールしてください。インストール後、ターミナル/コマンドプロンプトでdocker --versionおよびdocker compose versionを実行し、バージョン情報が表示されることを確認しましょう。
  • インターネット接続: インストール中、Dockerイメージ(Difyの各種コンポーネント)がダウンロードされますので、インターネットに接続できる環境が必要です。また、インストール後も、OpenAIなど外部のAIモデルAPIを利用する場合はその通信が発生します。オフラインで完結させたい場合、ローカルモデルを導入する方法もありますが、このガイドでは一般的なオンラインモデル利用を前提にしています。
  • (任意)ドメイン名とSSL証明書: 外部からアクセスするサーバーにDifyを立てる場合、独自ドメインでアクセスできるようにすると便利です(例: ai.example.com)。必須ではありませんが、後から環境変数の設定でドメインを指定することもできます。また、本番環境ではSSL化(HTTPS)も重要です。Let’s Encrypt等で無料の証明書を取得し、Nginxのリバースプロキシを設定することでHTTPS対応できます。インストール直後はhttpで動かし、後で設定する形でも構いません。
  • (任意)AIモデルのAPIキー: Difyはプラグインを通じて様々なLLMプロバイダを利用できます。代表的なのはOpenAIのAPIキーです。Dify自体のインストールには不要ですが、インストール後に実際にAI応答を得るにはこれらのキーが必要になります。事前にOpenAIのアカウントを作成しAPIキーを取得しておく、または利用したいモデル(例えばAnthropicのClaude)のAPIアクセスを用意しておくと、セットアップ後すぐに試せて便利です。
  • 基本的なコマンドライン操作: インストール手順では、ターミナル上でいくつかコマンドを実行します。普段あまりコマンドラインを使わない方は、コマンドのコピー&ペーストで大丈夫です。このガイドでは実行すべきコマンドを正確に示しますので、その通り入力してください。もしDocker自体が初めてで不安という場合は、Web上の初心者向けDocker解説記事やUdemyなどのDocker入門講座を軽く見ておくと理解が深まるでしょう(必須ではありませんが、学習を兼ねておすすめします)。

アドバイス: まだサーバーを用意していない方は、VPS(仮想プライベートサーバー)のレンタルを検討してみてください。さくらインターネットやConoHa、AWS Lightsail、DigitalOceanなど、手頃な価格で使えるサービスがあります。UbuntuなどLinuxが選択でき、月額数百円程度から開始できます。例えば、ConoHaやさくらのVPSではメモリ4GBプラン以上を選ぶのが無難です。多くの海外VPS(DigitalOcean等)は初回にクレジットが貰えるキャンペーンもあります。クラウドサーバーを使う場合も、基本的にはSSHでログインしてLinux上でコマンドを実行する流れとなります。このガイドの手順はどの環境でも共通なので、安心して進めてください。

準備が整ったら、次はインストール方法の全体像を説明します。今回は主にDocker Composeを使った方法を取り上げ、必要に応じて上級者向けのソースコードからの起動方法にも触れます。それでは本題に入りましょう。

インストール方法の概要

Difyをセルフホストする方法として、主に次の2通りがあります。

  • 方法1: Docker Composeによるデプロイ(推奨) – Docker Composeを使って、Difyが必要とするコンテナ群を一括で起動する方法です。Dify公式が用意したdocker-compose.ymlファイルを使うことで、コマンド数回で環境構築が完了します。クロスプラットフォームで動作し、初心者の方はこちらが断然簡単です。以下、詳細な手順を解説していきます。
  • 方法2: ソースコードから直接起動(開発者向け) – Dockerを使わず、Difyのソースコードを直接実行する方法です。PythonやNode.jsの環境構築が必要で、ステップも多くなります。Dify自体を開発したりカスタム改造したい場合はこちらになりますが、単に使うだけならDocker方法で十分です。本ガイドでは概要のみ紹介します。

他にも、aaPanelというホスティング管理ツールを使ったインストールや、Kubernetes上で動かすケース、Pigstyのような統合スクリプトを使う高度なデプロイ方法などがありますが、それらは特殊なケースなので本記事では割愛します。大半のユーザーにとってはDocker Composeが最も簡単で確実でしょう。それでは、まずは方法1のDocker Composeを使ったインストール手順から始めます。

Docker Composeを使ったDifyインストール手順

方法1: Docker Composeデプロイ
もっとも手軽なDocker ComposeによるDifyインストール手順を、ステップバイステップで説明します。

  1. DockerおよびDocker Composeのインストール(未済の場合): まずは、お使いの環境でDockerが利用できる状態にします。既にDockerが動いている場合はこのステップは読み飛ばしてください。
    • Windows/macOSの場合: Docker社が提供するDocker Desktopをインストールします。公式サイト(docker.com)からダウンロードし、インストーラの指示に従ってセットアップしてください。Docker Desktopを起動すると、バックグラウンドでDockerエンジンが動作します。Docker ComposeもDocker Desktopに統合されているため、別途設定する必要はありません。
    • Linuxの場合: Linuxディストリビューションに応じてDocker Engineをインストールします。例えばUbuntuなら、aptを使ってsudo apt-get install -y docker.ioとインストール可能です(事前にapt-get updateも)。Composeはプラグインとしてdocker-compose-pluginをインストールするか、公式サイトの手順でdocker-composeコマンドをセットアップします。詳細はDocker公式のLinux向けインストールガイドを参照してください。
    • バージョン確認: Dockerインストール後、ターミナルもしくはコマンドプロンプトでdocker --versionを実行し、バージョン情報が表示されるか確認します。同様にdocker compose version(またはdocker-compose --version)も実行します。どちらもエラーが出なければインストール成功です。
    • テスト(任意): 初めてDockerを使う方は、docker run hello-worldコマンドを試してみてください。Docker Hubからイメージを取得してコンテナを起動し、「Hello from Docker!」というメッセージが表示されれば正常に機能しています。
      以上でDockerの準備は完了です。
  2. Difyリポジトリのダウンロード: Docker Compose用の設定ファイルはDify公式のGitHubリポジトリで公開されています。そのため、まずDifyのソースコード一式を取得します。Gitが使える場合は、クローンするのが簡単です。任意の作業ディレクトリで以下のコマンドを実行してください。 git clone https://github.com/langgenius/dify.git これにより、現在のディレクトリ下に「dify」というフォルダが作成され、中にソースコードが入ります。Gitがインストールされていない場合は、GitHub上からZIPファイルをダウンロードして解凍しても構いません(ただし、今後の更新適用を考えるとGitで取得する方が便利です)。
  3. 環境変数ファイルの準備: リポジトリを取得したら、その中のdockerというディレクトリに移動します。 cd dify/docker このディレクトリには、Docker Compose関連のファイルが入っています。中でも重要なのが.env.exampleというファイルです。これはDocker Compose実行時に読み込まれる環境変数のサンプル一覧で、各種設定値(データベースのパスワードやURLなど)が記載されています。このファイルをもとに、自分用の.envファイルを作成します。以下のコマンドでコピーしましょう。 cp .env.example .env 新しく作成された.envファイルが、Docker Compose起動時に自動的に読み込まれます。必要に応じて、このファイルをエディタで開き、設定を調整してください。初心者の方は、基本的にデフォルトのままで問題ありませんので、この段階では編集不要です。主な項目だけ簡単に説明します。
    • ポート設定: Difyはデフォルトで80番ポート(HTTP)と443番ポート(HTTPS)で動作するよう設定されています。.env内のNGINX_PORTCONSOLE_WEB_URL等で参照されます。既に同じポートを使うサービス(例えば別のWebサーバー)が稼働中の場合、競合が起きます。その場合は一時的にそちらを停止するか、Dify側のポートを変更する必要があります(例えば80を8080に変えるなど)。テスト環境では基本そのままで大丈夫でしょう。
    • パスワード/キー類: .envにはPostgreSQLデータベースのパスワードやJWTトークンの秘密鍵など、セキュリティ関連の値も含まれます。デフォルトではランダムな文字列が既に入っているか、またはchangemeのような値になっている場合があります。開発用途であればデフォルトのままでも構いませんが、本番運用する際はユニークで強力なパスワードに変更することをおすすめします。変更する場合は、.envを編集して該当の値を書き換えてください。
    • URLドメイン: Difyを特定のドメインで提供したい場合は、CONSOLE_API_URLAPP_WEB_URLといった項目にそのURLを設定します。ただし、初回はローカルホストやIPでアクセスし、後から変更も可能ですので、現時点では触れなくても大丈夫です。
    • ボリュームと永続データ: Docker Composeでは、データをコンテナの外に保存するためにボリューム(ホスト上のディレクトリ)が利用されます。.env内でDATA_PATH_HOSTという項目により、dify/docker/volumes以下に各種データが保存される設定になっています。このフォルダにデータベースファイル等が溜まっていきますので、消さないように注意してください(コンテナを削除・再作成しても、このボリュームが残っていればデータは消えません)。ディスク容量にも留意しましょう。
    設定ファイルの準備ができたら、いよいよコンテナの起動です。
  4. Docker ComposeでDifyを起動: それでは、Docker Composeを使ってDifyを立ち上げましょう。まだdify/dockerディレクトリ内にいることを確認して、以下のコマンドを実行します。 docker compose up -d (補足: Docker Composeのバージョンによっては、docker-compose up -dとハイフン付きコマンドになることがあります。Docker Desktop付属のCompose v2ではdocker composeスペース区切りです。docker compose versionで確認できます。) このコマンドを実行すると、Dockerはまず必要なイメージ(コンテナのひな形)をダウンロードし、その後コンテナを起動します。Difyでは以下のようなコンテナが起動します。
    • dify-api(バックエンドAPIサーバー)
    • dify-web(フロントエンドWebアプリケーション)
    • dify-worker(非同期タスク処理を行うワーカー)
    • postgres(PostgreSQLデータベース)
    • redis(Redisキャッシュ&メッセージブローカー)
    • weaviate(Weaviateベクトルデータベース、ドキュメント埋め込み用)
    • nginx(Nginxサーバー、リバースプロキシ兼静的ファイル配信)
    • ssrf-proxy(SSRフプロキシ?外部リクエストを安全に行うためのプロキシ)
    • sandbox(サンドボックス、AIエージェントがコード実行などを行う際の隔離環境)
    コンテナの詳細は意識しなくても構いませんが、裏側ではこれだけのサービスが連携して動くということです。初回はイメージのダウンロードに多少時間がかかります(数百MB程度×複数のイメージ)。コマンド実行後、ターミナルには各種コンテナの作成ログが表示され、最後に各コンテナのIDやポート情報が一覧で表示されるでしょう。 コンテナ起動後、きちんと動いているか確認します。以下のコマンドでコンテナの一覧と稼働状況を表示できます。 docker compose ps ここに、先ほど挙げた各サービスがUp(起動中)と表示されていれば成功です(Up (healthy)と表示されるものもあります)。もしExitRestartingの状態がある場合、そのコンテナでエラーが起きている可能性があります。その際は、docker compose logs <サービス名>でログを確認し、エラー内容を調べてください。例えば、docker compose logs apiでAPIサーバーのログが、docker compose logs webでフロントエンドのログが確認できます。最初から正しく起動していれば、特にエラーもなく全てのコンテナがUp状態になっているはずです。
  5. 初期セットアップ(管理者アカウントの作成): コンテナが立ち上がっただけでは、まだDifyの利用準備が完了していません。ブラウザからDifyにアクセスし、初期セットアップを行いましょう。具体的には、Difyの管理者ユーザーを作成します。これは一度きりの作業です。
    • ローカルPCで動かしている場合は、ウェブブラウザで http://localhost/install にアクセスしてください。
    • リモートサーバーで動かしている場合は、そのサーバーのIPアドレス(またはドメイン名)が必要です。例えば、サーバーのIPが123.45.67.89なら、 http://123.45.67.89/install にアクセスします。
    正しく接続できれば、「インストール」または「管理者の初期設定」のような画面が表示されるはずです。ここで、管理者ユーザーとして使用するメールアドレスパスワードを入力します。メールアドレスは実在するものでなくても構いません(例: admin@localなど)。パスワードは今後Difyにログインする際の管理者パスワードとなりますので、十分に強いものを設定してください。この情報を入力して送信すると、データベース内に管理者ユーザーが作成されます。 成功すると、自動的にDifyのログイン画面やホーム画面へリダイレクトされるか、またはそのままログイン状態になるでしょう。これで初期設定完了です。おめでとうございます!
  6. DifyのWebインターフェースにアクセスする: 管理者アカウントが作成できたら、実際にDifyを操作できるようになります。改めて以下のURLにブラウザでアクセスしてみましょう。
    • ローカルで動かしている場合: http://localhost/
    • サーバー上で動かしている場合: http://<サーバーのIPアドレス>/ (例: http://123.45.67.89/
    先ほど設定した管理者メールアドレスとパスワードでログインします。ログインすると、Difyのメイン画面(ダッシュボード)が表示されます。画面レイアウトはバージョンによって多少異なるかもしれませんが、一般的には左側にメニューがあり、「アプリケーション」や「ナレッジ(知識データ)」、設定などの項目があるはずです。右側には、まだ何もアプリを作っていない場合はチュートリアルやテンプレートの案内が表示されることもあります。 この時点で、Difyの基本的な機能は全て利用可能になっています。例えば、新しいAIアプリケーションを作成することができます。試しにメニューから「新規アプリ作成」や「Create App」といったボタンを探してクリックしてみてください。ウィザードまたはテンプレート選択画面が現れ、どんなAIアプリを作るか選べるようになっているでしょう。モデル(例えばOpenAI GPT-4など)を選択し、簡単なプロンプトフローを設定すれば、その場でAIとの対話アプリが完成します。まだAPIキーを設定していない場合、OpenAI系のモデルは動きませんので、後述するモデルプロバイダの設定を行う必要があります。それでもUI上で触ってみることで、Difyの使い勝手がつかめると思います。 Difyのインターフェースは基本的に直感的ですが、いくつかポイントを挙げると:
    • Applications(アプリケーション): ここで新しいアプリ(AIエージェントやチャットボット)を作成・管理します。各アプリはワークフローと呼ばれるフロー図で構成され、プロンプトや分岐、ツール呼び出しなどを視覚的に組み立てます。
    • Knowledge(知識ベース): 文書データやFAQなど、自分の提供する情報源をアップロードできます。アップロードしたデータは自動的にベクトルデータベースに登録され、AIが回答時に参照できるようになります(RAGのための機能です)。
    • Settings(設定): ここでシステム全体の設定や、モデルプロバイダ(OpenAIキーなど)の登録、ユーザー招待などを行います。特に「Providers(モデル提供元)」の設定では、OpenAIやAzure OpenAI、AI21など利用するAIサービスのAPIキーやエンドポイントを登録できます。
    ひとまず、これでDifyが無事動いていることを確認できました。必要に応じてコンテナの状態も再確認しておきましょう(docker compose psでUpが並んでいればOK)。
  7. (動作確認)簡単なAI応答を試す: インストールが成功したら、実際にAIに何か質問してみたくなるものですよね。モデルプロバイダの設定をしていれば、簡単なチャットボットを作って試せます。例えば、OpenAIのAPIキーを設定済みだと仮定して:
    • 新規アプリ作成から「Chatbot」あるいは「QAボット」のテンプレートを選ぶ。
    • モデルに「gpt-3.5-turbo」などを選択し、システムメッセージ(AIのキャラクター設定)の文言を入力、ユーザーからの入力に答える仕組みを作成。
    • プレビューやテスト実行機能で、AIに「こんにちは」と送信してみる。
    正しく設定されていれば、AIから適切な応答が返ってくるでしょう。もし返答が無かったりエラーになる場合は、モデルプロバイダのAPIキー登録漏れやワーカーコンテナ未稼働などが考えられます。後述のトラブルシューティングも参考にしてください。

以上で、Docker Composeを用いたDifyのセットアップ手順は完了です!コンテナはバックグラウンドで動き続けます。しばらく使わない場合はdocker compose downコマンドで停止できますし、また使うときはdocker compose up -dで再起動できます(データはボリュームに残っているので安心です)。Difyを継続的に運用するなら、サーバー起動時に自動でコンテナを立ち上げる設定をしておくと便利ですが、必要に応じて検討してください。

補足: Docker環境に関するヒント

  • 再起動時の注意: Docker Composeで立ち上げたコンテナは、サーバー再起動後には自動では立ち上がりません(unless-stoppedポリシー等を適用すれば別ですが)。手動でdocker compose up -dを実行する必要があります。これは忘れがちなので、必要であればcronやsystemdを使って自動起動させるか、手順をドキュメントしておきましょう。
  • ログの確認: Difyアプリの動作に問題が起きたとき、原因究明にはログが役立ちます。Docker環境では、docker compose logs -fで全コンテナのログをフォローできます。特定のコンテナだけ見るには前述のようにlogs <サービス名>を指定します。例えば、OpenAIのAPIキーを登録し忘れていると、APIコンテナのログに「API key missing」のようなエラーが出るでしょう。UIで異常があったら、まずはログを確認するクセをつけると良いです。
  • Difyのアップデート: 新しいバージョンのDifyが公開されたら、セルフホスト環境もアップデートしたくなるでしょう。Docker Composeを使っている場合、アップデート手順は比較的簡単です。
    1. GitHubリポジトリの最新コードを取得(git pullで更新)。
    2. コンテナを停止(docker compose down)。
    3. 新しいイメージを取得(docker compose pull)。
    4. コンテナ再起動(docker compose up -d)。
    5. (必要に応じて).env.exampleと現在の.envを見比べ、新しい環境変数が増えていれば.envに追記。
      これで新バージョンへの更新が完了します。必ずしも全バージョンで上記だけでOKとは限りませんが、多くの場合この手順で問題ありません。データベースのスキーマ変更があれば、apiコンテナ起動時に自動でマイグレーションされます。エラーが出た場合はログを見て対応しましょう。
  • バックアップ: 大事なデータを扱う場合は、定期的なバックアップを取りましょう。Docker環境では、前述の通りdify/docker/volumes以下に実データが保存されています。最低限、そのディレクトリを丸ごと定期コピーしておけば、最悪の場合でもデータベース(PostgreSQL)やベクトルデータベース(Weaviate)、アップロードファイルなどを復元できます。特にバージョンアップやサーバーメンテナンスの前にはバックアップしておくと安心です。

以上がDockerを用いたインストール方法ですが、続いて興味のある方向けに、ソースコードから直接Difyを起動する方法も概略を説明します。開発者や高度なユーザー以外は飛ばしても構いませんが、「裏側ではこんな風に動いているんだ」という理解の助けになるかもしれません。

ソースコードからDifyを起動する方法(参考・上級者向け)

方法2: ローカルでのソースコード起動
この方法は、Dockerを使わずにDifyを動作させる手順です。開発目的や独自改変を行いたい場合に有用ですが、セットアップの難易度は上がります。

Difyは複数のコンポーネントから構成されています。それぞれを個別に起動する必要があるため、Docker Composeと比べて手間がかかりますが、仕組みを理解するために各コンポーネントを紹介しつつ手順を説明します。

  • バックエンドAPIサービス(api): Python製のFlaskアプリケーションです。Difyのコアロジック(アプリ設定や会話履歴の管理、外部API呼び出しなど)はここで実行されます。
  • ワーカーサービス(worker): CeleryというPythonの非同期処理キューを用いたワーカーです。データセット(Knowledge)処理やメール送信、定期クリーンアップなど、時間のかかる処理をバックグラウンドで実行します。
  • フロントエンドWebサービス(web): Next.js(React)製のシングルページアプリケーションです。ユーザーがブラウザで操作する画面を提供します。

これら3つがDifyの主要コンポーネントです。さらに、動作にはデータベース等のミドルウェアが必要です。具体的には:

  • PostgreSQL(データベース) – アプリの設定情報やユーザー情報、ログなどを保存します。
  • Redis – Celeryワーカーのジョブキューや、一時的なキャッシュに使用します。
  • Weaviate(もしくは他のベクトルDB) – ドキュメント埋め込みの保存と検索に使うベクトルデータベースです。

ソースから起動する場合でも、PostgreSQLやRedisといったミドルウェアはDockerで起動することができます。公式ドキュメントでも、これらミドルウェアはDocker Composeで立ち上げ、Difyのアプリ部分だけホスト上で動かすハイブリッド運用を推奨しています。

それでは、順を追って手順を見ていきます。

  1. リポジトリの取得とDockerミドルウェアの起動: 方法1ですでにGitクローンしてある前提で進めます(まだならgit clone https://github.com/langgenius/dify.gitを実行してください)。まず、Difyに必要なPostgresやRedisなどを用意します。Docker Composeを使ってミドルウェアだけ起動するため、先ほどと同じdify/dockerディレクトリに入り、以下を実行します。 cd dify/docker cp middleware.env.example middleware.env docker compose -f docker-compose.middleware.yaml up -d これでデータベース(PostgreSQL)、Redis、Weaviate、Nginx(プロキシ)などが起動します。docker compose ps -f docker-compose.middleware.yamlで確認すると、それらのコンテナがUpしているはずです。 補足: middleware.envにはデータベースのパスワード等が記載されています。デフォルトのままでも動作しますが、気になる場合は適宜編集してください。また、Weaviateは標準で埋め込み用バックエンドとして動きますが、オープンソースのMilvusなどに差し替えることも技術的には可能です(Difyドキュメントにコミュニティガイドがあります)。
  2. Pythonバックエンド(API)のセットアップ: バックエンドはPythonで書かれているため、ホストに適切なPython環境を用意します。Python 3.12が推奨されていますので、バージョンを確認してください。python --versionで3.12.xであればOKです。もし3.11以下の場合、pyenvなどで3.12を導入するか、公式サイトからインストールしてください。
    • Python環境が整ったら、Difyリポジトリ内のapiディレクトリに移動します。 cd ../api
    • ここでも、環境変数ファイルを用意する必要があります。例によって.env.exampleがあるのでコピーします。 cp .env.example .env.envファイルを開き、中身をチェックしましょう。ポイントは以下です。
      • SECRET_KEY: Flaskアプリのセッションなどに使われる秘密鍵です。デフォルトでは空欄か仮の値になっている可能性がありますので、ランダムな文字列に設定します。LinuxやMacなら、先述のopenssl rand -base64 42コマンドで生成した文字列を貼り付けると良いでしょう。Windowsの場合は、適当なパスワードジェネレータ等で64文字程度のランダム値を作成してください。
      • データベース接続設定: DB_HOST, DB_PASSWORDなどが記載されています。ここは、先ほどDockerで起動したPostgreSQLコンテナの情報と一致させる必要があります。middleware.envPOSTGRES_PASSWORDがあったはずなので、その値がDB_PASSWORDに設定されているか確認します(デフォルトではpostgresPasswordのようになっているかもしれません)。ホストはlocalhost、ユーザーはpostgresでOKでしょう。Redisも同様に、REDIS_HOST=localhost, REDIS_PORT=6379となっていることを確認します。
      • その他APIキー: OpenAIのAPIキー等を直接ここに書くこともできますが、UI上から設定可能なので.envでは空のままで大丈夫です。
        設定を終えたらファイルを保存します。
    • Python依存関係のインストール: Difyのバックエンドが必要とするライブラリをインストールします。DifyはAstralというツールのuvコマンドでパッケージ管理をしていますが、ここではシンプルにpipでインストールしてしまいましょう。 pip install -r requirements.txt もしrequirements.txtがない場合、pyproject.tomlpoetry.lockがあるかもしれません。その場合はpip install poetry && poetry installなどの手順が必要ですが、おそらくrequirements.txtが準備されているでしょう。インストールには数分かかる場合があります。エラーが出ず完了したら次に進みます。
    • データベースマイグレーションの実行: 初回起動前に、データベースのテーブルを作成しておく必要があります。Flask-Migrateを使ったマイグレーションが組み込まれているので、以下を実行します。 flask db upgrade これにより、PostgreSQL上に必要なテーブル(ユーザーやアプリ、ログなど)が作られます。エラーなく終了すればOKです。
    • APIサーバーの起動: いよいよバックエンドAPIを起動します。開発モードで実行するため、以下のコマンドを使用します。 flask run --host 0.0.0.0 --port 5001 --debug ポート5001でFlask開発サーバーが立ち上がります。0.0.0.0と指定することで外部(同じマシン上の他プロセスや、LAN内他PC)からも接続可能にしています。--debugは任意ですが、付けるとコード変更時に自動リロードしてくれるので便利です。ターミナル上に「Running on http://0.0.0.0:5001」等と表示されていれば成功です。このターミナルはAPIサーバー用としてそのまま開いておきます。
  3. ワーカーサービスの起動: 引き続き、Celeryワーカーを起動します。別のターミナル(またはタブ)を開いて、同じdify/apiディレクトリに移動、同じ仮想環境を有効にしてください。ワーカーは先ほどインストールしたCeleryなどのパッケージを利用します。コマンドはLinux/macOSとWindowsで少し異なります。
    • Linux/macOSの場合(geventを使用した並行実行モード): celery -A app.celery worker -P gevent -c 1 --loglevel INFO -Q dataset,generation,mail,ops_trace
    • Windowsの場合(gevent未対応のためsoloモード): celery -A app.celery worker -P solo --without-gossip --without-mingle --loglevel INFO -Q dataset,generation,mail,ops_trace
    以上のいずれかを実行すると、Celeryのワーカーが起動します。ログに「ready.」のような記載が出て、Redisに接続できていれば準備完了です。このワーカーは、データセット(Knowledgeベース)の追加処理や、一定時間ごとのクリーンアップ、メール送信などをバックエンドAPIから指示されて実行します。ワーカーを起動していないと、ナレッジをアップロードしてもいつまでも処理中になったり、ユーザー招待メールが送れないなど不具合が生じますので、忘れず起動しましょう。
  4. フロントエンド(Web)のセットアップと起動: 最後に、ユーザーインターフェースであるフロントエンドアプリを起動します。こちらはNode.js環境で動くので、Node.js(バージョン18以上)とpnpmが必要です。
    • Node.jsをインストールしてください(公式サイトからLTS版をダウンロード、またはnvmでインストール)。バージョン確認はnode -vで行えます。
    • 次にpnpm(パッケージマネージャー)をグローバルインストールします。 npm install -g pnpm pnpmのインストールが終わったら、pnpm -vでバージョン確認を忘れずに。
    • 新しいターミナルを開き、Difyリポジトリのwebディレクトリに移動します。 cd dify/web
    • 必要なパッケージをインストールします。 pnpm install --frozen-lockfile 初回はインターネットから大量のパッケージを取得するため少々時間がかかります。エラーなく完了するまで待ちましょう。
    • フロントエンド用の環境変数設定を行います。webディレクトリ内に.env.exampleがありますのでコピーします。 cp .env.example .env.local .env.localというファイル名にすることで、Next.js(Create React App等でも)はその設定を読み込みます。このファイルを編集しましょう。
      • NEXT_PUBLIC_DEPLOY_ENV: 開発モードで動かす場合はDEVELOPMENTのままにします。実運用ならPRODUCTIONにしますが、ここではデバッグしやすい開発モードで問題ありません。
      • NEXT_PUBLIC_EDITION: SELF_HOSTEDに設定します。これにより、UI上で表示される文言や動作がセルフホスト用になります(おそらくクラウド版との差異を吸収するためのフラグです)。
      • NEXT_PUBLIC_API_PREFIX および NEXT_PUBLIC_PUBLIC_API_PREFIX: フロントエンドがアクセスするバックエンドAPIのURLを指定します。デフォルトではhttp://localhost:5001/console/apihttp://localhost:5001/apiになっているでしょう。これはDocker版と同じエンドポイントです。先ほどFlask APIを5001番で起動したので、「localhostの5001番にコンソールAPIがある」という指定で合っています。この設定を環境に合わせて確認・修正します。もしDifyを動かしているサーバーが別マシンなら、そのIPアドレスをホスト名に入れてください(例: http://123.45.67.89:5001/console/api)。ローカルで完結するなら変更不要です。
      • NEXT_PUBLIC_SENTRY_DSNなどの項目はエラー監視サービス向けですが、特に使わないなら空のままで構いません。
      設定を終えたら保存します。
    • フロントエンド開発サーバーの起動: pnpm dev これでNext.jsの開発用サーバーが立ち上がります。出力ログに「http://localhost:3000で立ち上がりました」といったメッセージが表示されるはずです。これも別ターミナルで実行したので、そのまま開いておきます。
  5. Difyにアクセス(ソースコードモード): すべてのコンポーネント(バックエンドAPI、ワーカー、フロントエンド、データベース等)が起動したら、ブラウザでDifyを使ってみましょう。フロントエンドのNext.jsがデフォルト3000番で立ち上がっているので、http://localhost:3000にアクセスします。先ほどDocker環境で見たのと同様のDifyログイン/セットアップ画面が出るはずです。 もしDocker版のDBをそのまま使っている場合、既に管理者アカウントが登録済みかもしれません(Docker方法で初期化していれば、同じPostgresを使っている限り情報は共有されています)。今回は別環境として想定し、まだadminがない場合を考えます。/installページにリダイレクトされたら、同じようにメールアドレスとパスワードを設定し、管理者を作成します。 その後、ログインしてDifyのUIが表示されればOKです。Docker版と機能的な違いは無いので、使い方は同じです。ただし、コンソールで起動している分、バックエンドやフロントエンドのログがリアルタイムにターミナルに流れるので、挙動を追いやすい利点があります。例えばチャットで質問すれば、APIターミナルにOpenAIへのリクエストログが出たり、ワーカーターミナルにジョブ処理ログが出るでしょう。
  6. ソースコード版環境の管理:
    • 停止方法: 起動した各プロセスは、立ち上げたターミナルでCtrl+Cすれば停止できます。止める順番は特に厳密ではありませんが、まずフロントエンド(pnpm dev)を停止→APIサーバー(flask run)停止→ワーカー(celery)停止→最後にDockerのミドルウェアを停止、という順序が分かりやすいでしょう。Dockerのミドルウェアを完全に止めるにはdocker compose -f docker-compose.middleware.yaml downを実行します。ただしミドルウェアは起動が少し時間かかるので、開発中は起動しっぱなしでも構いません。
    • 再起動: 環境を再度立ち上げるには、上述の各手順をまた実行する必要があります。開発中なら、先にDockerミドルウェアを起動し(前回downしてなければそのままでOK)、Python仮想環境を有効化→Flask API起動→Celeryワーカー起動→pnpm dev起動、となります。手間ではありますが、開発者にとってはコード変更がすぐ反映されるなどのメリットがあります。
    • コード変更とリロード: フロントエンドはホットリロード対応、バックエンドは--debugによりコード変更検知で再起動するので、ソースコードを書き換えて機能追加・変更をテストしやすくなっています。本番運用時は逆にこれらの開発サーバーを使わず、pnpm buildで静的ビルドしてNginxから配信、バックエンドもGunicorn等のWSGIサーバーで起動、といった構成にするのが一般的です。

以上が、ソースコードから起動する大まかな流れです。初心者の方にはかなり複雑に感じられたかもしれません。しかし、これでDifyの内部構造が少し見えたのではないでしょうか。通常はここまで分解して運用する必要はなく、Docker Compose一発で済みます。したがって、特別な理由がなければDocker Composeによる方法1を使うことを強くおすすめします。

では、セルフホストしたDifyをより便利に使うためのポイントや、今後の学習リソースについて最後にまとめます。

インストール後の設定・活用ポイント

  • モデルプロバイダの設定: Difyを立ち上げた直後は、デフォルトではモデルのAPIキー等は何も設定されていません。このままだと、例えばOpenAIのGPT-4に質問しようとしてもキーが無いので失敗します。まず最初に行うべきは、LLMプロバイダの設定です。UI上で「設定(Settings)」→「Providers(プロバイダ)」のような項目を探してください(UIによっては「Model Provider」として表示されるかもしれません)。そこから「新規プロバイダ追加」的なボタンを押し、提供元を選択します。
    • OpenAIの場合: プロバイダ選択肢からOpenAI (API)を選び、自分のOpenAI APIキーを入力します。組織IDの入力欄もあるかもしれませんが、任意なら空でも動く場合があります。設定を保存すると、Dify上でOpenAIのモデル(GPT-3.5やGPT-4など)が使えるようになります。
    • Azure OpenAIの場合: AzureのエンドポイントURL、デプロイしたモデル名、APIキーなどを入力する必要があります。Azure Portalから取得した情報を正確に入れましょう。
    • その他Anthropic(Claude)やAI21, HuggingFace Hubなど: それぞれ必要なAPIキーやトークン、エンドポイントを設定する項目があります。もしそれらのサービスを使う予定があれば設定してください。ただ、初心者の方はまずOpenAIのAPIで試すのが簡単だと思います。
    プロバイダ設定後、アプリ作成時に利用するモデルとしてそれらが選択できるようになります。例えばOpenAIを登録していれば、「モデル: gpt-3.5-turbo (OpenAI)」のように選択肢に出てきます。
  • メール送信の設定(任意): Difyには、ユーザー招待のメール送信やパスワードリセットメールなどの機能があります。デフォルトでは、送信メールサーバー(SMTP)の設定がされていないため、メール送信機能は働きません。セルフホスト環境でメールを利用したい場合は、SMTP設定を追加しましょう。.envファイルやUIの設定画面に、SMTPホスト、ポート、ユーザー名、パスワード、送信元アドレス等を設定する項目があるはずです。例えばGmailのSMTPを使う場合、ホストはsmtp.gmail.com, ポートは587, Gmailアカウントとアプリパスワード(要2段階認証設定)を入力します。設定後、ユーザー招待を試してみて、ワーカーのログにエラーが出ないか確認します(メール送信が成功すればOK)。メール設定していない場合でも、Difyで「招待」を実行すると、その場で招待リンクが表示されるので、手動で相手に共有すればユーザー登録は可能です。
  • 独自ドメインやHTTPSの導入: 運用するにあたって、URLを自分のドメインにしたりHTTPS対応することは非常に重要です。例えば社内システムとしてdify.company.comのようなドメインを使えば覚えやすくなります。
    • 独自ドメイン: サーバーのグローバルIPに対してDNS設定でAレコードを追加し、ドメインを紐付けます。その上で、Docker環境の場合は.env内の各種URL設定(CONSOLE_WEB_URLなど)にそのドメインを反映させます。また、Nginxコンテナの設定を変更し、サーバーネームにそのドメインを記載する必要があるかもしれません。
    • HTTPS: セキュリティの観点から、通信は暗号化しましょう。Let’s Encryptを利用するなら、Nginxコンテナに証明書を組み込むか、コンテナ外でプロキシを立てる方法があります。簡単な方法としては、Nginx Proxy Managerなどのツールを別途立てて、Dify(コンテナのNginx)の80番にプロキシしつつ自動SSL化する、という手もあります。また、Docker Composeファイルを書き換えて、NginxコンテナでCertbotを走らせる設定を加えることも可能です。これら手順はやや高度なので、このガイドでは詳細を割愛しますが、「Dify セルフホスト HTTPS」などで検索すると先人の知見が見つかるかもしれません。
  • リソース・性能監視: Difyを実際に使い始めると、どの程度のリソースを消費するか気になるでしょう。docker版ならdocker statsで各コンテナのCPU/メモリ使用率が見られます。PostgresやWeaviateはデータ量に応じてメモリ消費が増えますし、フロントエンドもNext.jsなのである程度メモリを食います。4GB環境で辛そうなら8GB以上に増強することを検討してください。また、ユーザー数やリクエスト数が多くなってきたらスケールアウトも視野に入りますが、その場合はKubernetes環境などに移行するのがよいでしょう。
  • Difyの活用ヒント: Difyは単にチャットボットを作るだけでなく、ワークフローを構築できるのが強みです。ぜひ以下のような機能も試してみてください。
    • ワークフローの構築: アプリ作成画面で、ノード(ブロック)を追加して複雑な処理を作れます。例えば、「ユーザーからの質問を受け取る」ノード→「ナレッジベース検索」ノードで関連情報を取得→「言語モデル応答」ノードで回答生成、のように繋げることで、ドキュメントQAボットが作れます。UI上でノードを接続してフロー図を描く操作は、プログラミングのフローチャートを組むような感覚で面白いです。
    • プラグイン機能: DifyはChatGPTプラグインに似た独自プラグインをサポートしつつあります。例えばウェブ検索プラグインや、ユーザーが開発したカスタムツールを組み込める場合があります。マーケットプレイス(Dify Marketplace)が用意されているので、そこからプラグインをインストールできるでしょう。プラグインにより、AIが外部のAPIを叩いたり、計算をしたり、画像を生成したりと、標準機能以上のことが可能になります。ぜひマーケットプレイスもチェックしてみてください。
    • ログ・モニタリング: Difyには、ユーザーのやり取りログやモデルのトークン使用量などを確認する機能もあります(Observability機能)。管理画面で、各会話のログを開き、AIの応答内容や参照したデータをレビューできます。これを活用して、プロンプトを改善したり、不要な応答をフィルタリングするなどの微調整ができます。また、注釈(アノテーション)機能があれば、応答ごとに評価やフィードバックを付け、AIの改善に役立てることも可能です。
  • さらなる学習リソース: 初心者の方がDifyおよびLLMアプリ開発を深めるには、以下のようなリソースもおすすめです。
    • 公式ドキュメント: Dify公式サイトのDocsには、モデルプロバイダの一覧や詳細なチュートリアルが載っています。英語が多いですが、ブラウザの翻訳機能などを使って読むと良いでしょう。「Knowledgeベースの使い方」「ワークフローの例」など実践的な情報があります。
    • コミュニティ: GitHubのissuesやディスカッションで、他のユーザーの質問・回答を見るのも役に立ちます。同じ問題でつまずいた時、誰かが既に解決策を投稿していることが多いです。
    • オンライン講座・動画: Udemyには、チャットボット開発やプロンプトエンジニアリングに関する講座がたくさんあります。例えば「ノーコードでChatGPTボットを作る」といったコースがあれば、Difyと共通する概念を学べるでしょう。またYouTubeでも、「Dify チュートリアル」「Dify install guide」などで検索すると、実際にインストール・設定する様子を解説した動画が見つかる可能性があります。映像で手順を確認すると理解が深まりますので、ぜひ活用してください。
    • Udemyの具体的コース例: (※ここでは具体名は挙げませんが、Udemyで「Docker 初心者」「AIチャットボット 作成」などと検索すると良さそうな講座がヒットします。)これらの講座は有料ですが、定期的にセールで格安になっていることが多いので、興味があれば受講してみるのもよいでしょう。もちろん、無料のブログ記事やQiita記事なども非常に参考になります。
  • 困ったときは: どうしてもうまくいかない場合、焦らず一つ一つチェックしましょう。よくあるトラブルと対策をいくつか挙げます。
    • インストールページが表示されない: コンテナがちゃんと起動しているか確認。Nginxコンテナが落ちているとポート80が応答しません。また、ファイアウォールの設定でポート80/443がブロックされていないかもチェック(特にクラウドVPSではファイアウォール設定が別途ある場合があります)。
    • 管理者登録したのにログインできない: 入力したメールアドレス・パスワードが間違っている可能性があります。公式FAQによると、データベース内のusersテーブルから手動で確認・リセットすることもできますが、まずは再度確実に入力してください。大文字小文字なども正確に。
    • OpenAIエラー: AIに質問しても応答がない場合、APIキーが正しく設定されているかを疑います。Settingで入力したキーに誤りがないか確認しましょう。また、OpenAI側で利用料金未払い等によりAPIが停止されている可能性もあります。その場合はOpenAIダッシュボードを確認してください。
    • 日本語が変に扱われる: Dify自体は多言語対応していますが、モデルの性質上、日本語入力→英語プロンプトに翻訳→応答→日本語翻訳のような処理をしているケースもあります(内部のオーケストレーションによる)。もし意図しない挙動があれば、ワークフロー内でシステムメッセージに「日本語で答えて」と指定する、など調整すると良いでしょう。

おわりに

本記事では、「Difyのセルフホスティング: インストールとセットアップガイド」と題して、Difyの概要から実際の導入手順、運用のポイントまで包括的に解説しました。初心者の方には少し長く感じられたかもしれませんが、その分詳細に書いたつもりですので、順番に進めれば必ずやDifyを動かすことができるはずです。

自分だけのAIアプリ開発基盤を手に入れたことで、これから色々な応用が考えられるでしょう。例えば、社内の問い合わせ対応を自動化するチャットボット、商品データから質問に答えるECサイト向けAI、学習用の対話型チューターなど、Difyを使えばアイデア次第で様々なAIサービスが実現できます。しかも自分の環境で動かしているので、データも守られ安心です。

技術は日進月歩で、Difyも新機能が続々と追加されています。公式ブログやコミュニティをチェックし、最新情報をキャッチアップしてみてください。セルフホスト運用に慣れてきたら、ぜひ自分なりの工夫や改善も加えてみましょう(例えばパフォーマンスチューニングやCI/CD導入など)。それもオープンソースならではの楽しみです。

最後に、AI開発は試行錯誤の連続です。うまくいかないこともあるかもしれませんが、トライ&エラーで学びつつ、自分のペースで進めてください。このガイドが、その一助となれば幸いです。Difyを使って、ぜひ素晴らしいAIアプリケーションを生み出してください!健闘を祈ります。

  • この記事を書いた人
  • 最新記事

morishy

職業:外資系ITサービス企業での技術職 趣味:スポーツ観戦、ゲーム、読書、アニメ/ドラマ/映画鑑賞、プラモなど 自己紹介: IT企業で技術職で働いており、新しいものについて比較的興味を持ちやすい体質です。最近は手芸や美術・芸術などにも興味を持ち始めており、少し勉強したらブログ記事にできたらと思ってます。 趣味は非常に多いのですが、逆に言うと全てについて厚みがないなあと思い始めてきたので、自分の経験や知識をアウトプットするブログ執筆などの活動を通じて、自分の趣味の領域に厚みを持たせて人生を楽しんでいきたいと思ってます。 サイト名「山溜穿石」(さんりゅうせんせき)は少し聞きなれない言葉かもしれませんが、小さな努力を重ねていけば、どんなことも成し遂げることができることのたとえです。ブログを執筆する活動や、上に書いたような自分がやっていきたいことにぴったりの言葉だと思ってます。 よろしくお願いします。

-IT
-,