7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Difyをローカルで起動した際404になって困った話

Posted at

改めてはじめまして!花王株式会社の @masa-asa と申します。
少し前から個人的に記事を投稿していましたが、今回から「Kaoエンジニアコミュニティβ」のメンバーとしても参加します。よろしくお願いします!

本記事の本題ですが、DifyというOSSがあります。

DifyはAIアプリ開発のためのOSSです。Difyを用いるとGUIでAIチャットボットやエージェント、ワークフローの作成が可能で、OpenAIやGemini、Amazon Bedrockなどをはじめとして、多くのモデルを利用可能です。
さらに、Dockerを用いてローカルで動作することができるので、個人でAIについて学んだり、触ってみたいときにも簡単に使うことができる非常に便利なOSSです。

今回、Difyをローカルで使おうとしたところ、起動時に404エラーがでてしまう問題にあたってしまったので対策として共有します。
環境は以下の通りです。

  • Difyへのアクセス環境:Windows11のブラウザ(Edge,Google Chrome)
  • Difyの実行環境:wsl2上のDockerで起動

Difyのローカルでの実行方法

Difyをローカルで使えるようにするための作業は非常に簡単です。以下のリンクを参考に実施できます。

  • githubリポジトリのクローン
    git clone https://github.com/langgenius/dify.git

  • 所定のディレクトリに移動
    cd dify/docker

  • 環境変数ファイルのコピー
    cp .env.example .env

  • dockerの起動
    docker compose up -d

dockerコンテナ群がすべて正常に立ち上がったら準備完了です!
ブラウザからhttp://localhost/installにアクセスするとDifyの初期画面に遷移します!
正常に起動すると↓のような画面になります。
image.png

404になった...

wsl2でdocker compose up -dコマンドを打ってみます
12個のコンテナが正常に起動しました!それではブラウザでアクセスしてみます。
image.png

図のように404になってしまいます。コンテナは正常に起動しているのに...
image.png

原因

docker ps | grep nginxコマンドで確認してみます。nginxは正常に起動していそうです。

image.png

またcurl -I http://localhost/curl -I http://localhost/appsを実行した結果です。
image.png

wsl2内でnginxは正常に起動して動作も問題なさそうです。
では、Windows側を確認してみます。「コマンドプロンプト」を起動して次のコマンド
netstat -ano | findstr :80を実行します。
image.png

実行結果を見ると、Windows側でPID 4(System)が80番ポートを占有しています。このため、Docker(WSL2)のnginxが80番ポートで待ち受けできず、アクセスしてもDocker側に届いていないことがわかります。

対策

クローンしたリポジトリのdify/dockerディレクトリ構成を見てみるとこのようになっています。

.
..
.env
.env.example
README.md
certbot
couchbase-server
docker-compose-template.yaml
docker-compose.middleware.yaml
docker-compose.png
docker-compose.yaml
elasticsearch
generate_docker_compose
middleware.env.example
nginx
pgvector
ssrf_proxy
startupscripts
tidb
volumes

.envファイルを開き、「nginx」などで検索するとポートを指定している箇所があります。
「EXPOSE_NGINX_PORT」の部分はデフォルトで80になっているかと思います。
こちらをwindows側で使用していないポートに変更します。下の例では8888になっています。

------------------------------中略------------------------------
# ------------------------------
# Docker Compose Service Expose Host Port Configurations
# ------------------------------
EXPOSE_NGINX_PORT=8888
EXPOSE_NGINX_SSL_PORT=443
------------------------------中略------------------------------

確認のため、Windows側でnetstat -ano | findstr :8888を実行します。8888番ポートは使われていないので使えそうです。
image.png

それでは、もう一度dockerコンテナを再作成します。念のため強制的にコンテナを再作成するオプションを付けてdocker compose up -d --force-recreateを実行します。
改めてdocker ps | grep nginxコマンドを実行すると、ポートのマッピングが8888番に変更されていることがわかります。

image.png

Windows側もwsl2のDocker側と接続できているようです。
image.png

それでは、もう一度ブラウザからDifyにアクセスしてみます。http://localhost:8888/installで8888ポートを指定します。
image.png

出ました!ここからは通常通り進めていけば、ローカルでDifyを動作させることができます。

おわりに

今回の原因は、Windows側で80番ポートが占有されていたことでした。
修正箇所は1か所で単純ですが、私は原因の特定にハマってしまい時間がかかってしまったので、同じ症状の方の助けになればと思います。
DifyはLLMを使いこなす上で便利なツールですので、活用していきたいです!

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?