はじめに
インターネットにつながらない(インターネットから隔離された)環境にDifyを構築するメモです。
DifyからOllamaのLLM(Elyza-JP-8B)とEmbeddingモデル(mxbai-embed-large)を使用できる状態にします。
構成
インターネットにつながった(インターネットへ接続された)環境(Windows 10)にDify、Ollamaが動作する環境を構築します。
次にインターネットにつながらない(インターネットから隔離された)環境(CentOS 7.9)にファイル(Docker packageやimage)を持ち込んで構築します。
準備
Windows 10 環境
以下をインストールします。
コマンドプロンプトから操作します。
Dify
git clone https://github.com/langgenius/dify.git
cd dify
cd docker
cp .env.example .env
docker compose up -d
Ollama
ollama run huggingface.co/elyza/Llama-3-ELYZA-JP-8B-GGUF
ollama pull mxbai-embed-large
¥¥Users¥ユーザー名¥.ollama ディレクトリにモデルファイルが保存されます。
持ち込むイメージファイルの作成
¥¥Users¥ユーザー名 ディレクトリで作業を行う前提で説明します。
difyのgitレポジトリをファイル保存します。
tar cvf dify.tar dify
zip dify.tar
difyのdockerイメージをファイル保存します。
dockerイメージをファイル保存する時のポイントは、IMAGE IDではなく、REPOSITORY:TAGを指定します。
(dockerイメージをロードしたときにREPOSITORYとTAGがになります)
cd dify
cd docker
docker compose down
docker save -o dify_docker_image.tar langgenius/dify-web:0.13.1 langgenius/dify-api:0.13.1 nginx:latest postgres:15-alpine langgenius/dify-sandbox:0.2.10 redis:6-alpine ubuntu/squid:latest semitechnologies/weaviate:1.19.0
zip dify_docker_image.tar
ollamaのモデルをファイル保存します。
tar cvf ollama_model.tar .ollama
zip ollama_model.tar
ollamaのdockerイメージをファイル保存します。
docker save -o ollama_docker_image.tar ollama/ollama:latest
zip ollama_docker_image.tar
Docker Engine(Linux用)のパッケージファイル
以下のパッケージファイルをダウンロードします。
- containerd.io-1.6.33-3.1.el7.x86_64.rpm
- docker-buildx-plugin-0.14.1-1.el7.x86_64.rpm
- docker-ce-26.1.4-1.el7.x86_64.rpm
- docker-ce-cli-26.1.4-1.el7.x86_64.rpm
- docker-ce-rootless-extras-26.1.4-1.el7.x86_64.rpm
- docker-compose-plugin-2.27.1-1.el7.x86_64.rpm
CentOS 7.9 環境
Windows環境からCentOS環境へファイルをすべて転送します。
Docker環境の構築
Docker Engineをインストールします。
sudo yum install ./containerd.io-1.6.33-3.1.el7.x86_64.rpm ./docker-buildx-plugin-0.14.1-1.el7.x86_64.rpm ./docker-ce-26.1.4-1.el7.x86_64.rpm ./docker-ce-cli-26.1.4-1.el7.x86_64.rpm ./docker-ce-rootless-extras-26.1.4-1.el7.x86_64.rpm ./docker-compose-plugin-2.27.1-1.el7.x86_64.rpm
dockerのイメージデータを保存するディレクトリを変更する場合など、/etc/docker/daemon.jsonファイルを作成します。
{
"data-root": "/mnt/docker-data",
"log-drive": "json-file",
"log-opts": {
"max-size": "1g",
"max-file": "5"
}
}
dockerを起動します。
sudo systemctl start docker
dify
difyのgitレポジトリを展開します。
tar xvzf dify.tar.gz
difyのdockerイメージをロードします。
sudo docker load < dify_docker_image.tar.gz
difyを起動します。
cd dify
cd docker
sudo docker compose up -d
ollama
ollamaのモデルを展開します。
tar xvzf ollama_model.tar.gz
ollamaのdockerイメージをロードします。
sudo docker load < ollama_docker_image.tar.gz
ollamaを起動します。
difyからollamaへアクセス可能とするため、difyと同じdockerネットワーク(docker_default)を指定します。
また、展開したollamaのモデルを参照可能とするため、ホストのパス(/home/ユーザー名/.ollama)をコンテナのパス(/root/.ollama)にマウントします。
sudo docker run -d -v /home/ユーザー名/.ollama:/root/.ollama -p 11434:11434 --net=docker_default --name ollama ollama/ollama
dockerコマンドでコンテナの起動状態(コンテナが起動しているか)とdockerネットワークの内容(同じネットワーク内にコンテナが存在するか)を確認します。
sudo docker ps
sudo docker network inspect docker_default
参考(トラブルシューティング)
dockerイメージ(REPOSITORYとTAGが登録されているか)を確認します。
sudo docker images
ollamaのコンテナからホストのモデルを参照できるか確認します。
sudo docker exec -it ollama bash
ollama list
difyとollamaが通信できない場合(ollamaの起動時にdockerネットワークを指定しないとdifyと異なるdockerネットワーク(bridge)に接続されます)、一時的にiptablesを停止して問題を解消します。
sudo systemctl stop iptables
iptablesを停止(再起動)すると、dockerの設定がリセットされるため、dockerを再起動します。
sudo systemctl restart docker
Difyの動作確認
ブラウザからDifyにアクセスしてログイン画面が表示されることを確認します。