前提条件

Docker と Docker Compose のセットアップ

Dify をインストールする前に、マシンが以下の最小システム要件を満たしていることを確認してください:

  • CPU >= 2 コア
  • RAM >= 4 GiB
オペレーティングシステムソフトウェア説明
macOS 10.14 以降Docker DesktopDocker 仮想マシン(VM)が最低 2 つの仮想 CPU(vCPU)と 8 GB の初期メモリを使用するように設定してください。そうしないと、インストールが失敗する可能性があります。詳細については、Mac 用 Docker Desktop インストールガイドを参照してください。
Linux プラットフォームDocker 19.03 以降 Docker Compose 1.25.1 以降Docker と Docker Compose のインストール方法については、それぞれDocker インストールガイドDocker Compose インストールガイドを参照してください。
WSL 2 が有効な WindowsDocker DesktopLinux コンテナにバインドされるソースコードやその他のデータは、Windows ファイルシステムではなく Linux ファイルシステムに保存することをお勧めします。詳細については、Windows での WSL 2 バックエンドを使用した Docker Desktop インストールガイドを参照してください。

OpenAI TTS を使用する必要がある場合は、正常に機能するためにシステムに FFmpeg がインストールされている必要があります。詳細については、リンクを参照してください。

Dify リポジトリのクローン

git コマンドを実行して Dify リポジトリ をクローンします。

git clone https://github.com/langgenius/dify.git

Docker Compose でミドルウェアを起動する

ストレージ用(PostgreSQL / Redis / Weaviate(ローカルで利用できない場合))や拡張機能用(Dify の sandboxplugin-daemon サービスなど)の一連のミドルウェアが Dify バックエンドサービスで必要です。次のコマンドを実行して Docker Compose でミドルウェアを起動します:

cd docker
cp middleware.env.example middleware.env
docker compose -f docker-compose.middleware.yaml up -d

バックエンドサービスのセットアップ

バックエンドサービスには以下が含まれます:

  1. API サービス:フロントエンドサービスと API アクセス用の API リクエストを提供
  2. Worker サービス:データセット処理、ワークスペース、クリーンアップなどの非同期タスクを提供

環境の準備

Python 3.12 が必要です。Python 環境をすばやくインストールするには pyenv の使用をお勧めします。

追加の Python バージョンをインストールするには、pyenv install を使用します。

pyenv install 3.12

「3.12」Python 環境に切り替えるには、次のコマンドを使用します:

pyenv global 3.12

API サービスの起動

  1. api ディレクトリに移動します:

    cd api
    
  2. 環境変数設定ファイルを準備します

    cp .env.example .env
    
  3. ランダムな秘密鍵を生成し、.env ファイルの SECRET_KEY の値を置き換えます

    awk -v key="$(openssl rand -base64 42)" '/^SECRET_KEY=/ {sub(/=.*/, "=" key)} 1' .env > temp_env && mv temp_env .env
    
  4. 依存関係のインストール

    依存関係の管理には uv を使用します。 uv で必要な依存関係をインストールするには、次のコマンドを実行します:

    uv sync
    

    macOS の場合:brew install libmagic で libmagic をインストールしてください。

  5. データベースの移行を実行する

    データベースを最新バージョンに移行します:

    uv run flask db upgrade
    
  6. API サービスを起動する

    uv run flask run --host 0.0.0.0 --port=5001 --debug
    

    期待される出力:

    * Debug mode: on
    INFO:werkzeug:WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
     * Running on all addresses (0.0.0.0)
     * Running on http://127.0.0.1:5001
    INFO:werkzeug:Press CTRL+C to quit
    INFO:werkzeug: * Restarting with stat
    WARNING:werkzeug: * Debugger is active!
    INFO:werkzeug: * Debugger PIN: 695-801-919
    

Worker サービスの起動

データセットファイルのインポートやデータセットドキュメントの更新などのキューからの非同期タスクを処理するには、以下の手順に従って Worker サービスを起動します

  • macOS または Linux の場合

    uv run celery -A app.celery worker -P gevent -c 1 --loglevel INFO -Q dataset,generation,mail,ops_trace
    

    Windows システムで Worker サービスを起動する場合は、代わりに次のコマンドを使用してください:

  • Windows の場合

    uv run celery -A app.celery worker -P solo --without-gossip --without-mingle -Q dataset,generation,mail,ops_trace --loglevel INFO
    

    期待される出力:

    -------------- celery@bwdeMacBook-Pro-2.local v5.4.0 (opalescent)
    --- ***** -----
    -- ******* ---- macOS-15.4.1-arm64-arm-64bit 2025-04-28 17:07:14
    - *** --- * ---
    - ** ---------- [config]
    - ** ---------- .> app:         app_factory:0x1439e8590
    - ** ---------- .> transport:   redis://:**@localhost:6379/1
    - ** ---------- .> results:     postgresql://postgres:**@localhost:5432/dify
    - *** --- * --- .> concurrency: 1 (gevent)
      -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
      --- ***** -----
      -------------- [queues]
      .> dataset          exchange=dataset(direct) key=dataset
      .> generation       exchange=generation(direct) key=generation
      .> mail             exchange=mail(direct) key=mail
      .> ops_trace        exchange=ops_trace(direct) key=ops_trace
    
    [tasks]
    . schedule.clean_embedding_cache_task.clean_embedding_cache_task
    . schedule.clean_messages.clean_messages
    . schedule.clean_unused_datasets_task.clean_unused_datasets_task
    . schedule.create_tidb_serverless_task.create_tidb_serverless_task
    . schedule.mail_clean_document_notify_task.mail_clean_document_notify_task
    . schedule.update_tidb_serverless_status_task.update_tidb_serverless_status_task
    . tasks.add_document_to_index_task.add_document_to_index_task
    . tasks.annotation.add_annotation_to_index_task.add_annotation_to_index_task
    . tasks.annotation.batch_import_annotations_task.batch_import_annotations_task
    . tasks.annotation.delete_annotation_index_task.delete_annotation_index_task
    . tasks.annotation.disable_annotation_reply_task.disable_annotation_reply_task
    . tasks.annotation.enable_annotation_reply_task.enable_annotation_reply_task
    . tasks.annotation.update_annotation_to_index_task.update_annotation_to_index_task
    . tasks.batch_clean_document_task.batch_clean_document_task
    . tasks.batch_create_segment_to_index_task.batch_create_segment_to_index_task
    . tasks.clean_dataset_task.clean_dataset_task
    . tasks.clean_document_task.clean_document_task
    . tasks.clean_notion_document_task.clean_notion_document_task
    . tasks.deal_dataset_vector_index_task.deal_dataset_vector_index_task
    . tasks.delete_account_task.delete_account_task
    . tasks.delete_segment_from_index_task.delete_segment_from_index_task
    . tasks.disable_segment_from_index_task.disable_segment_from_index_task
    . tasks.disable_segments_from_index_task.disable_segments_from_index_task
    . tasks.document_indexing_sync_task.document_indexing_sync_task
    . tasks.document_indexing_task.document_indexing_task
    . tasks.document_indexing_update_task.document_indexing_update_task
    . tasks.duplicate_document_indexing_task.duplicate_document_indexing_task
    . tasks.enable_segments_to_index_task.enable_segments_to_index_task
    . tasks.mail_account_deletion_task.send_account_deletion_verification_code
    . tasks.mail_account_deletion_task.send_deletion_success_task
    . tasks.mail_email_code_login.send_email_code_login_mail_task
    . tasks.mail_invite_member_task.send_invite_member_mail_task
    . tasks.mail_reset_password_task.send_reset_password_mail_task
    . tasks.ops_trace_task.process_trace_tasks
    . tasks.recover_document_indexing_task.recover_document_indexing_task
    . tasks.remove_app_and_related_data_task.remove_app_and_related_data_task
    . tasks.remove_document_from_index_task.remove_document_from_index_task
    . tasks.retry_document_indexing_task.retry_document_indexing_task
    . tasks.sync_website_document_indexing_task.sync_website_document_indexing_task
    
    2025-04-28 17:07:14,681 INFO [connection.py:22]  Connected to redis://:**@localhost:6379/1
    2025-04-28 17:07:14,684 INFO [mingle.py:40]  mingle: searching for neighbors
    2025-04-28 17:07:15,704 INFO [mingle.py:49]  mingle: all alone
    2025-04-28 17:07:15,733 INFO [worker.py:175]  celery@bwdeMacBook-Pro-2.local ready.
    2025-04-28 17:07:15,742 INFO [pidbox.py:111]  pidbox: Connected to redis://:**@localhost:6379/1.
    

Web サービスのセットアップ

フロントエンドページ用の Web サービスを起動します。

環境の準備

Web フロントエンドサービスを起動するには、Node.js v22 (LTS)PNPM v10 が必要です。

  • NodeJS のインストール

    https://nodejs.org/en/download にアクセスし、v18.x 以上のお使いのオペレーティングシステム用のインストールパッケージを選択してください。一般的な使用には LTS バージョンをお勧めします。

  • PNPM のインストール

    インストールガイド に従って PNPM をインストールします。または、以下のコマンドで npm を使用して pnpm をインストールできます。

    npm i -g pnpm
    

Web サービスの起動

  1. web ディレクトリに移動します

    cd web
    
  2. 依存関係をインストールします

    pnpm install --frozen-lockfile
    
  3. 環境変数設定ファイルを準備します

    現在のディレクトリに .env.local というファイルを作成し、.env.example の内容をコピーします。必要に応じてこれらの環境変数の値を変更します:

    # For production release, change this to PRODUCTION
    NEXT_PUBLIC_DEPLOY_ENV=DEVELOPMENT
    # The deployment edition, SELF_HOSTED or CLOUD
    NEXT_PUBLIC_EDITION=SELF_HOSTED
    # The base URL of console application, refers to the Console base URL of WEB service if console domain is
    # different from api or web app domain.
    # example: http://cloud.dify.ai/console/api
    NEXT_PUBLIC_API_PREFIX=http://localhost:5001/console/api
    # The URL for Web APP, refers to the Web App base URL of WEB service if web app domain is different from
    # console or api domain.
    # example: http://udify.app/api
    NEXT_PUBLIC_PUBLIC_API_PREFIX=http://localhost:5001/api
    
    # SENTRY
    NEXT_PUBLIC_SENTRY_DSN=
    NEXT_PUBLIC_SENTRY_ORG=
    NEXT_PUBLIC_SENTRY_PROJECT=
    
  4. Web サービスをビルドします

    pnpm build
    
  5. Web サービスを起動します

    pnpm start
    

    期待される出力:

       ▲ Next.js 15
       - Local:        http://localhost:3000
       - Network:      http://0.0.0.0:3000
    
     ✓ Starting...
     ✓ Ready in 73ms
    

Dify にアクセスする

ブラウザで http://127.0.0.1:3000 にアクセスして、Dify のすべての機能をお楽しみください。

乾杯!🍻