Dify にコントリビューションする機会があり、その時に調べたデバッグモードで起動する方法を記事に残す。
結論
公式リポジトリの /api フォルダと、 /web フォルダ内にある README.md の内容を参考にして、デバッグモードで起動する。(少し前に公式ドキュメントにも書いてあった気がするが、見当たらなくなってしまった)
2回目以降の起動手順
環境変数ファイルのセットアップを省いたもの。初回で既に各種セットアップが完了していることが前提。
cd dify
# middleware
cd docker
docker compose -f docker-compose.middleware.yaml --profile weaviate -p dify up -d
# backend
cd ../api
uv sync --dev
uv run flask db upgrade
uv run flask run --host 0.0.0.0 --port=5001 --debug
# (任意) async worker
uv run celery -A app.celery worker -P gevent -c 1 --loglevel INFO -Q dataset,generation,mail,ops_trace,app_deletion
# frontend
cd ../web
pnpm install
pnpm run dev
# http://localhost:3000/
起動手順
Dify はバックエンドとフロントエンドに分かれているため、それぞれを別々に起動する。
バックエンドの起動手順
参考:https://github.com/langgenius/dify/blob/main/api/README.md
middleware の起動
バックエンドは各種ミドルウェア(PostgreSQL, Redis, Weaviate, ...)に依存しているため、まずはミドルウェアを起動する。
cd dify
# 環境変数の設定
cd docker
cp -b middleware.env.example middleware.env
# ミドルウェアの起動
docker compose -f docker-compose.middleware.yaml --profile weaviate -p dify up -d
backend の環境変数を設定
まずはデフォルトの環境変数から、デバッグ用の環境変数を作り出す。
cd ../api
cp .env.example .env
セッションや、データベース暗号化用の SECRET_KEY を発行する。sed コマンドの動作が若干 OS によって違うので、Linux と Mac ユーザはここで読み替える。
セッションクッキーを安全に署名し、データベース上の機密情報を暗号化するためのキー。
https://docs.dify.ai/ja-jp/getting-started/install-self-hosted/environments#secret-key
Linux
sed -i "/^SECRET_KEY=/c\SECRET_KEY=$(openssl rand -base64 42)" .env
macOS
secret_key=$(openssl rand -base64 42)
sed -i '' "/^SECRET_KEY=/c\\
SECRET_KEY=${secret_key}" .env
backend の仮想環境を構築
backend を起動するために、uv を使って仮想環境を作っておく。
(初回のみ)uv をインストール
curl -LsSf https://astral.sh/uv/install.sh | sh
pyproject.toml から依存パッケージをインストールする
uv sync --dev
データベースのマイグレーションを行う。
uv run flask db upgrade
コードを読むと、api/migrations 配下のデータが使われて Flask-Migrate が DB をマイグレートしていることが分かる
backend を起動
backend を起動する。
uv run flask run --host 0.0.0.0 --port=5001 --debug
続けてフロントエンドの起動を行う。
(任意)ナレッジベース等の非同期機能を使いたい場合
データセット読み込みや、ドキュメントのインデックスなどの非同期機能を使いたい場合は、worker サービスも起動する
uv run celery -A app.celery worker -P gevent -c 1 --loglevel INFO -Q dataset,generation,mail,ops_trace,app_deletion
フロンエンドの起動手順
参考:https://github.com/langgenius/dify/blob/main/web/README.md
前提条件
依存パッケージのインストール
pnpm install
環境変数の設定
まずはデフォルトの環境変数から、デバッグ用の環境変数を作り出す。
cp .env.example .env.local
必要に応じて .env.local を編集し、環境変数を適用する。
# コンソールアプリの Base URL
NEXT_PUBLIC_API_PREFIX=http://localhost:5001/console/api
# Web APP の Base URL
NEXT_PUBLIC_PUBLIC_API_PREFIX=http://localhost:5001/api
# SENTRY
NEXT_PUBLIC_SENTRY_DSN=
フロントエンドを起動
フロントエンドのコンポーネントを起動する。
pnpm run dev
Dify には http://localhost:3000 でアクセスできる。ホットリロードに対応しているので、/app 配下を修正すると即時反映される。