Dify Community版を使うときのTips

Difyを知ったのが9月、そこから Community 版(OSS版)を使い始めて、それほどたってませんが、ここまでで知ったTipsをいくつか紹介します。


- [アップロードサイズを50MBにする](#アップロードサイズを50mbにする)
- [ローカルPC上に構築したDifyをインターネット上に公開する](#ローカル環境内に構築したdifyをインターネット上に公開する)
- [Difyの管理者用アカウントを初期化する](#difyの管理者用アカウントを初期化する)
- [Firecrawlをローカル環境内で使用する](#firecrawlをローカル環境内で使用する)
- [ReRankモデルをローカル環境内で使用する](#rerankモデルをローカル環境内で使用する)
- [Dify Community版をAWS上に構築する](#difycommunity版をaws上に構築する)



## アップロードサイズを50mbにする

この方法は、比較的いろんなサイトとでもしょうかいされている、比較的有名なTipsです。

Docker Composeを使ってDify Community版を立ち上げている方は`.env`ファイルの以下の箇所の設定を変更します。

```bash
UPLOAD_FILE_SIZE_LIMIT=50
```

Difyの環境変数は[公式ドキュメント](https://docs.dify.ai/ja-jp/getting-started/install-self-hosted/environments)にも紹介されていますが、0.11.0の場合は50以上にしても反映されないようです。ただ、上限はドキュメントにはありませんので、今後変更されるのかもしれません。

> 2025/4/21 追記
> 
> Dify FAQにアップロードサイズ変更の項目があり、`NGINX_CLIENT_MAX_BODY_SIZE`の変更も併せて変更するように指示が追加されています。

## ローカル環境内に構築したdifyをインターネット上に公開する

実は[Difyの公式ドキュメントにも紹介](https://docs.dify.ai/ja-jp/guides/extension/api-based-extension)があるのですが（今記事を書いている最中に知りました..）[ngrok](https://ngrok.com)を使います。

ngrokはこのhttp://localhost/をHTTPSによる暗号化されたトンネルを作成して、インターネット上に公開します。

Dify Community版を使っている人の多くはDocker Composeを使っていると思います。そういったばあい、ローカルPCのポート80番がexposeされているとおもいます。そういう人は、Dockerコンテナによる起動が手っ取り早いです。

[ngrok](https://ngrok.com)サイトでアカウントを登録しログイン後、[Dockerによるセットアップ](https://dashboard.ngrok.com/get-started/setup/docker)サイトのDeploy your app online というセクションにある`docker run`コマンドをコピーして、Dify Community版がどうさしているDockerホスト上で別コンテナとして実行します。

![docker_ngrok.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213774/f41e7a9a-3d0b-990a-501f-019ffc99608a.png)

`-it`オプションが付いているのでコマンドラインに以下のようなメッセージが表示されたら、Forwardingに指定されたURLを開くことで、Dify画面が表示されるようになります。

![ngrok_docker.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213774/960e95df-3778-e8f5-17ad-c8c56d4769a7.png)

これで、ローカルPC上のDifyでは外部からWebUIやAPI経由でDifyアプリが使えるようになります。
よくあるGASからDifyアプリをAPI経由でアクセスするサンプルなどがCommunity版でも動くようになります。

## difyの管理者用アカウントを初期化する

Difyの管理者アカウントのパスワードを忘れた場合は、ログイン画面にあるパスワードリセットを行えばいいのですが、Community版を使っている人は、`.env`でメールサーバ設定をしていないことがおおく、結局コンテナを最初から作り直している人が少なくありません。

ですが、Difyの管理者パスワードはflask`docker compose`コマンドでリセットすることができます。

```bash
cd dify/docker
docker compose exec -it api flask reset-password
```

上記コマンドを入力すると管理者アカウントをCUIで再作成することができます。

実はこの方法も[Dify公式ドキュメント](https://docs.dify.ai/getting-started/install-self-hosted/faqs)にのっていました。

## firecrawlをローカル環境内で使用する

Dify0.11.0ではURLを指定したサイトからナレッジを作成する場合jina readerかfirecrawlのどちらかを選択します。

firecrawlは[OSS版](https://github.com/mendableai/firecrawl)がありDockerコンテナとして動かすこともできます。

Difyが動作しているDockerホスト上で以下のコマンドを実行することでコンテナを起動させることができます。ただし`docker pull`に結構時間がかかります。

以下のコマンドは、firecrawlのAPIキーを`fc-hogehoge`にした場合の実行例です。

```bash
git clone https://github.com/mendableai/firecrawl.git
cd firecrawl
cp ./apps/api/.env.example ./.env
sed -i 's/^USE_DB_AUTHENTICATION=true$/USE_DB_AUTHENTICATION=false/' .env
sed -i 's/^TEST_API_KEY=$/TEST_API_KEY=fc-hogehoge/' .env
docker compose up -d"
```

> 実用時には`.env`をもうすこししっかり確認して修正した方が良いと思ます。

上記コマンドでコンテナを起動したら、firecrawlのサイトのベースURLを`http://<プライベートIPアドレス>:3002`、APIキーをコマンドで指定した文字列を設定すれば動作させることができます。

firecrawlはクローリングをおこなうので、使用する場合は相手側のサイトの負荷にも注意してください。

## rerankモデルをローカル環境内で使用する

Difyでrerankモデルを使う場合、外部のAI APIサービスを使うことになりますがCohere（もしくは AWS Bedrock経由で）がほぼ一択なのではないでしょうか（もしあるならごめんなさい）。

（使用頻度はLLMよりは低いですが）モデルの希少性なのか Cohere の rerank モデルの値段はLLMの値段と同じくらい高いです。

なのでローカルでrerankモデルを動かして使用することをかんがえますがollamaにはすぐに`ollama pull`できるrerankモデルがありません。GGUFファイルを変換して..とかやればうごくとはおもいますが、自分のような令和の軟弱エンジニアには厳しい..

Ollamaにはありませんが、XinferenceにはWeb UI操作でrerankモデルを使えるようにできます。
なのでXinferenceをDockerコンテナとして起動させて使用することで Cohere にお金を払わずに使うことができます。

以下のdocker-compose.yamlファイルを作成し、`data`ディレクトリを切った後、`docker compose up -d`することでXinferenceが立ち上がります。

```yaml
services:
  xinference:
    image: xprobe/xinference:latest
    container_name: xinference
    command: xinference-local -H 0.0.0.0
    environment:
      - XINFERENCE_HOME=/data
      - XINFERENCE_LOG_LEVEL=info
    restart: unless-stopped
    ports:
      - "9997:9997"
    volumes:
      - ./data:/data
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
```

ただ..上記の定義のさいごのほうにもあるとおり、GPUがないとXinferenceが起動できないようなのです。何度もCPUのみで上げようとしたのですが、コンテナ起動中にエラーになってしまって..

`docker compose`で立ち上がったXinferenceのWeb UIは、http://localhost:9997/で開くことができます。
Web UIが開いたら上のタブで`RERANK MODELS`左のタブで`LAUNCH MODEL`でモデルを選択してlaunchすればDifyからXinference設定経由で使用することができます。

## difycommunity版をaws上に構築する

ローカルPCを一切汚したくないというひとはAWSなどのクラウド環境で立ち上げようとする人もすくなくないでしょう。

AWSの中のひとが作成した以下のGitHub リポジトリを使用することで立ち上げることができます。

- [Dify on AWS with CDK](https://github.com/aws-samples/dify-self-hosted-on-aws/tree/main)

使い方はトップのREADME.mdの日本語文にあるとおり、リンク先の[note記事](https://note.com/yukkie1114/n/n0d9c5551569f)を読むと良いと思います。

![aws_dify.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213774/979547af-a9bd-50f1-17c5-bd0839ce2992.png)

..実は自分はこの記事を試していません..この記事読む前にCloudFormation化してしまったので..

このリポジトリにあるようにRedisやPostgresをElastic CacheやAuroraで上げてはいませんが、t3.2xlarge ひとつでも十分に動作します。

Dify Community版をつかってみると、公式ドキュメントになさそうな制約（..自分が見つけられないだけかもしれませんが..）がいくつかあって、たとえばワークスペースは１つだけとか、Difyアプリを30個以上つくれないとか..公式に確認はしていませんが..

なので、王道ルートの docker compose でDifyをたちあげようとする人は、基本スケールアップではなくスケールアウトでいくのかな..と。

なら2xlargeくらいのインスタンスで不足したら増やしていくので十分かな..と。

それに、Difyのリポジトリをのぞているとすぐに見つかる docker-compose.middleware.ymlを使ってコンテナをvolume 削除せずに上げ直せばAPIサーバとしてもうごかせるようですし(必要なときにUIのはいったcomposeファイルで上げ直す、とか)。


このあたりは、みなさんがやろうとしていることの非機能要件によるかな..とおもいます。


以上です。


ps

今は Dify はホットですが、[bolt.new](https://bolt.new/)や[Replit Agent](https://docs.replit.com/replitai/agent)が成長して「ほげほげするDifyアプリを作って」に対応できるようになったら..とか、 [Captain Agent](https://arxiv.org/abs/2405.19425) のようなAgentを生成するAgentがでてきたら..とかを考えると..

..生成AI界隈って、勉強するほどアホをみる..のかな?!

以下、ご参考まで。

- [誰でもAIエージェントが作れる開発環境Dify/Llamaの紹介](https://speakerdeck.com/coolerking/llamanoshao-jie)