👨‍🎓

[Dify] 1. DockerでDifyを立ち上げる

に公開

執筆日

2025/07/19
2025/08/05 追記

概要

今更Dify?と思われるかもしれませんが、僕もそう思います。色々思うところあってオープンソースは便利だけど開発が活発過ぎて大変そう、廃れたときにそれ使い続けるのどうなんだろう、というダブスタな忌避をしていたため、ちょっと触ってなるほどね~くらいにとどめていました。LLM開発も色々と経験してやっぱりPoC段階でどんな運用か固まっていなかったり、LLM性能を試したいだけの時は簡単に試せる環境の提供方法としてDify便利だなあという気持ちになったので今後しばらく簡単な使い方のまとめブログを書いていきたいと思います。

というわけで初回は立ち上げです。ブログに書くほどのことじゃなさすぎる。

前提

  • 執筆時 Dify Version latest 1.7.1
  • GitとDockerが使えること
  • デフォルト設定で、CPU 2 Core以上、RAM 4 GiB 以上が必要になります。

準備

# Difyリポジトリをクローン
git clone https://github.com/langgenius/dify.git
cd ./dify/docker
# デフォルトのenv設定をコピー
cp .env.example .env
# コンテナの立ち上げ(初回はビルドが走ります)
docker compose up -d

アクセス

docker compose up -dで各サービスが立ち上がったことを確認したら、ブラウザでhttp://localhost/installにアクセスします。ここで管理者アカウントの設定をします。完了するとhttp://localhost/signinに移動しますので作成した管理者アカウントでサインインしましょう。
こんな感じでページが表示されます。

感想

久しぶりに立ち上げてアクセスしたら機能が増えててちょっとひるみました。
次回はナレッジベースの作成について。
https://zenn.dev/headwaters/articles/e2cc40a31cdd11

Tips

あまりにも立ち上げるだけだと意味なしなので少しくらいは補足情報を……。

アカウント追加

ローカルで触るだけの場合や特にアカウントによって権限をいじる必要がない場合は1アカウントで問題ありませんが、ナレッジベースの管理をしたり、複数人でスタジオをいじったりする場合はアカウントを追加する必要があります。
ページ右上のユーザーアイコンから[設定]を選択すると以下のようなポップアップが出るので[招待]を押してメンバーを招待しましょう。生成される招待リンクから承認するとユーザーが追加されます。

メンバーは以下のユーザーロールを設定できます。

  • 通常ユーザー: アプリの使用のみ可能
  • エディター: アプリの構築が可能
  • 管理者: アプリの構築及びチーム設定の管理が可能

.envの編集

環境変数設定によって様々なオプション機能を使えます。特に注目したいのは様々な検索プラットフォームに対応しているところでしょうか(残念ながらAzure AI Searchを検索に使う設定はない)。検索詳細は以下
https://docs.dify.ai/ja-jp/getting-started/install-self-hosted/environments
クラウドデプロイの場合はVMでなければそれぞれコンテナアプリにデプロイしたりDBサービスを利用したりすることになるので結構大変そうです。

2025/08/05 追記 デフォルト設定の場合立ち上がるコンテナ

コンテナ名 主な役割 備考・依存関係
web フロントエンド http://localhost/install で初回アクセス
api バックエンド LLM呼び出し、チャット処理、ナレッジ管理など
worker Celery Worker(非同期タスク処理) チャンク化、埋め込み、ツール呼び出しなど
plugin-daemon プラグイン実行ランタイム(LLMツール処理) ツールノードや外部APIを扱う際に使用
sandbox ユーザー入力を安全に処理するための実行サンドボックス ツールやコード評価時のセーフガード
ssrf_proxy SSRF対策用プロキシ(外部HTTPリクエストの制限) plugin/sandbox からの外部リクエストを中継
nginx リバースプロキシ兼静的ファイルサーバー ポート80で webapi を仲介
weaviate ベクトル検索エンジン(Vector DB) ナレッジベースの類似検索に使用
redis キュー・キャッシュ・セッションストア Celery(worker)のタスク中継にも使用
db データベース(PostgreSQL) アプリ・ユーザー・ドキュメントなどの保存先

詳しいデータベース構造を確認するためにローカルからDB viewerアプリを使う場合、composeのデフォルトではポートが解放されていないので設定を追加してからupしてください。

docker-compose.yaml
# ~略~
  db:
    ports:
      - "5432:5432"
# ~略~

クラウド上へのデプロイ

上記で環境変数をいじくってデプロイしていくのが大変という人の場合は各クラウドへのデプロイのためのTerraformを作成してくれている人がいます。Azureであれば以下のリポジトリが使えます。(その他はREADME参照)
https://github.com/nikawang/dify-azure-terraform

2025/08/05 追記

こちらのterraformがあまりアップデートされていないためDifyの新しいバージョンに対応していなかったりするためこちらを参考にした方が良さそうです。(こちらはbicep)
https://github.com/himanago/dify-azure-bicep

フロントエンドとバックエンドで使われるリソースは以下の構成(それ以外にもVNETやストレージなども作成されます)。基本的にコンテナアプリ上にそれぞれのDockerコンテナがデプロイされますが、データベースとキャッシュは専用のサービスでデプロイされる感じですね。

  • フロントエンド
    • nginx: Azure Container Apps
  • バックエンド
    • web: Azure Container Apps
    • api: Azure Container Apps
    • worker: Azure Container Apps (minimum of 1 instance)
    • sandbox: Azure Container Apps
    • ssrf_proxy: Azure Container Apps
    • db: Azure Database for PostgreSQL
    • vectordb: Azure Database for PostgreSQL
    • redis: Azure Cache for Redis

参考

https://github.com/langgenius/dify/tree/main#
https://docs.dify.ai/ja-jp/introduction

ヘッドウォータース

Discussion