4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DifyAdvent Calendar 2024

Day 19

インターネットにつながらない環境にDifyを構築するメモ

Last updated at Posted at 2024-12-18

はじめに

インターネットにつながらない(インターネットから隔離された)環境にDifyを構築するメモです。
DifyからOllamaのLLM(Elyza-JP-8B)とEmbeddingモデル(mxbai-embed-large)を使用できる状態にします。

構成

インターネットにつながった(インターネットへ接続された)環境(Windows 10)にDify、Ollamaが動作する環境を構築します。
次にインターネットにつながらない(インターネットから隔離された)環境(CentOS 7.9)にファイル(Docker packageやimage)を持ち込んで構築します。

スクリーンショット 2024-12-17 17.11.19.png

準備

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ファイルを作成します。

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にアクセスしてログイン画面が表示されることを確認します。

スクリーンショット 2024-12-17 19.54.07.png

4
1
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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?