はじめに
Difyをローカル環境にインストールする手順です。Difyはwebで動くようになっているため、Dockerでnginxを動かす環境をローカルに構築して、webで接続することになります。
環境
Ubuntu20.4 (Windows10 + Vagrant)
公式サイトの手順
手順
Difyのソースコードをローカルにクローンします。
$git clone https://github.com/langgenius/dify.git
ディレクトリに移動します。
$cd dify/docker
環境ファイルを作成します。
$cp .env.example .env
Docker composeがインストールされているか確認します。インストールされている場合、バージョンも確認します。
$docker compose -v
$docker compose version
Docker Compose version v2.32.4
Docker Compose を起動します。この後、多少時間がかかります。
※自分の環境は、Docker Compose V2なので、次のコマンドで起動しますが、Docker Compose Vの場合はコマンドが若干異なります。
$docker compose up -d
最後にこのようにコンテナの状態が表示されます。
[+] Running 10/11
✔ Network docker_ssrf_proxy_network Created 1.4s
✔ Network docker_default Created 0.2s
✔ Container docker-redis-1 Started 11.5s
✔ Container docker-web-1 Started 11.5s
✔ Container docker-weaviate-1 Started 11.6s
✔ Container docker-sandbox-1 Started 11.5s
✔ Container docker-db-1 Started 11.5s
✔ Container docker-ssrf_proxy-1 Started 11.7s
✔ Container docker-api-1 Started 9.7s
✔ Container docker-worker-1 Started 9.6s
⠼ Container docker-nginx-1 Starting
Docker composeで動作するプロセスをすべて表示して、正常に動作していることを確認します。
$docker compose ps
api / worker / web の3つがビジネスサービスで、weaviate / db / redis / nginx の4つが基礎コンポーネントとなります。
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
docker-api-1 langgenius/dify-api:0.15.2 "/bin/bash /entrypoi…" api 2 minutes ago Up 2 minutes 5001/tcp
docker-db-1 postgres:15-alpine "docker-entrypoint.s…" db 3 minutes ago Up 2 minutes (healthy) 5432/tcp
docker-redis-1 redis:6-alpine "docker-entrypoint.s…" redis 3 minutes ago Up 2 minutes (healthy) 6379/tcp
docker-sandbox-1 langgenius/dify-sandbox:0.2.10 "/main" sandbox 3 minutes ago Up 2 minutes (healthy)
docker-ssrf_proxy-1 ubuntu/squid:latest "sh -c 'cp /docker-e…" ssrf_proxy 3 minutes ago Up 2 minutes 3128/tcp
docker-weaviate-1 semitechnologies/weaviate:1.19.0 "/bin/weaviate --hos…" weaviate 3 minutes ago Up 2 minutes
docker-web-1 langgenius/dify-web:0.15.2 "/bin/sh ./entrypoin…" web 3 minutes ago Up 2 minutes 3000/tcp
docker-worker-1 langgenius/dify-api:0.15.2 "/bin/bash /entrypoi…" worker 2 minutes ago Up 2 minutes 5001/tcp
ここで更に、Difyのソースコードをgitでpullします。
$cd dify/docker
$git pull origin main
downコマンドを実行してupされているDockerイメージを削除します。pullコマンドでDocker HubからDockerイメージを取得します。そして、upコマンドで再びDockerイメージを作成して起動します。
$docker compose down
$docker compose pull
$docker compose up -d
公式サイトにこのような記述があります。
「えーっ!なにー!」と仰天しながら自分の環境を確認してみると、上記のコマンドを実行しても、初回に「git clone https://github.com/langgenius/dify.git」 したときから、「.env.example」のタイムスタンプは変わっていませんでした。
ブラウザでURLにこのように指定するとローカルのDifyが起動します。
http://your_server_ip/install
http://192.168.33.10:8080/install
このような画面が起動すればOKです。
トラブルシュート
Dockerの起動でNginxの起動がエラーになったためそのトラブルシュートです。
$docker compose up -d
上記のコマンドを実行すると、つぎのエラーが出ました。
nginxを起動しようとしたが、ポート80番が既に使われていますといった内容です。
Error response from daemon
: driver failed programming external connectivity on endpoint docker-nginx-1
: failed to bind port 0.0.0.0:80/tcp
: Error starting userland proxy
: listen tcp4 0.0.0.0:80
: bind: address already in use
80番を握っているサービスを調べたところ、案の定、Apache2が握っていました。
$lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 1127 root 4u IPv6 27713 0t0 TCP *:http (LISTEN)
apache2 1147 www-data 4u IPv6 27713 0t0 TCP *:http (LISTEN)
apache2 1148 www-data 4u IPv6 27713 0t0 TCP *:http (LISTEN)
nginxのポート番号をデフォルトの80番から別の番号(8080)にカスタマイズします。
ポート番号をカスタマイズするには、dify/docker/docker-compose.yamlを編集します。
ports:
- '8080:80' # この1行を追加
# - '${EXPOSE_NGINX_PORT:-80}:${NGINX_PORT:-80}'
# - '${EXPOSE_NGINX_SSL_PORT:-443}:${NGINX_SSL_PORT:-443}'
編集の内容はこのようになります。
- '変更後ポート番号:変更前ポート番号'
ブラウザから接続するときは、ポート番号を明示的に指定する必要があります。
http://your_server_ip/install # ポート80で接続
http://your_server_ip:8080/install # ポート8080で接続

