はじめに
閉域環境にDifyを構築する経験があったので記録します。
インターネットへ接続できない閉域環境にDifyを構築するため、インターネットへ接続できるAmazon Linux 2023上で、必要なファイルを事前にダウンロードします。
ここでは、閉域環境への持ち込み用として、以下の3ファイルを作成します。
| ファイル名 | 内容 |
|---|---|
docker-offline.tar.gz |
DockerのRPMパッケージとDocker Compose |
dify-images.tar.gz |
Difyで使用するDockerイメージ |
dify.tar.gz |
Difyのソースコードと設定ファイル |
作成したファイルを閉域環境へ転送することで、インターネットへ接続せずにDockerとDifyを導入できます。今回、転送にはS3を利用します。
今回オフラインキットを作成するインターネット接続可能なサーバーを、作成用サーバーと呼びます。
前提条件
作成用サーバーは、以下の条件を満たしているものとします。
- Amazon Linux 2023を使用している
- インターネットへ接続できる
- S3へファイルをアップロードできる
1. Dockerのオフラインインストール用ファイルを作成する
1-1. ec2-userへ切り替える
次のコマンドでユーザーを切り替えます。
sudo su - ec2-user
1-2. DNFキャッシュを更新する
DNFが使用するパッケージ情報を更新します。
sudo dnf makecache
1-3. 作業用ディレクトリを作成する
DockerのRPMパッケージとDocker Composeを保存するディレクトリを作成します。
mkdir -p ~/docker-offline/{docker-rpms,compose-bin}
作成したディレクトリへ移動します。
cd ~/docker-offline
ディレクトリ構成は、次のようになります。
docker-offline/
├── docker-rpms/
└── compose-bin/
1-4. Docker関連のRPMパッケージをダウンロードする
Docker本体と、Dockerの動作に必要な関連パッケージをダウンロードします。
sudo dnf install --downloadonly \
--downloaddir=./docker-rpms \
docker \
containerd \
runc \
container-selinux \
cni-plugins
--downloadonlyを指定しているため、この時点ではパッケージをインストールせず、RPMファイルのダウンロードだけをおこないます。
1-5. CPUアーキテクチャを確認する
Docker Composeは、サーバーのCPUアーキテクチャに合ったファイルをダウンロードする必要があります。
ARCH=$(uname -m)
echo "${ARCH}"
1-6. Docker Composeをダウンロードする
CPUアーキテクチャに対応したDocker Composeをダウンロードします。
curl -L \
-o compose-bin/docker-compose \
"https://github.com/docker/compose/releases/latest/download/docker-compose-linux-${ARCH}"
ダウンロードしたDocker Composeに実行権限を付与します。
chmod +x compose-bin/docker-compose
ファイルを確認します。
ls -la compose-bin/docker-compose
latestを指定しているため、実行する時期によってダウンロードされるDocker Composeのバージョンが変わります。
検証環境と本番環境で同じバージョンを使用したい場合は、動作確認済みのバージョンを明示的に指定する方法が適しています。
1-7. Docker関連ファイルを圧縮する
ホームディレクトリへ移動します。
cd ~
docker-offlineディレクトリを圧縮します。
sudo tar czf docker-offline.tar.gz docker-offline
圧縮ファイルが作成されたことを確認します。
ls -la ~/docker-offline.tar.gz
これで、閉域環境へDockerをインストールするためのファイルが作成できました。
2. 作成用サーバーへDockerをインストールする
DifyのDockerイメージをダウンロードするため、作成用サーバーへDockerをインストールします。
2-1. Dockerをインストールする
sudo dnf install -y docker
2-2. Dockerを起動する
Dockerを起動し、OS起動時にも自動的に起動するよう設定します。
sudo systemctl enable --now docker
Dockerの状態を確認します。
sudo systemctl status docker
2-3. Docker Composeを配置する
DockerのCLIプラグイン用ディレクトリを作成します。
sudo mkdir -p /usr/local/lib/docker/cli-plugins
先ほどダウンロードしたDocker Composeをコピーします。
sudo cp \
~/docker-offline/compose-bin/docker-compose \
/usr/local/lib/docker/cli-plugins/docker-compose
実行権限を付与します。
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
Docker Composeのバージョンを確認します。
sudo docker compose version
バージョン情報が表示されれば、Docker Composeの準備は完了です。
3. Difyをダウンロードする
3-1. Gitをインストールする
ホームディレクトリへ移動します。
cd ~
Gitをインストールします。
sudo dnf install -y git
インストールされたGitのバージョンを確認します。
git --version
3-2. Difyのバージョンを指定する
閉域環境へ導入するDifyのバージョンを変数に設定します。
DIFY_VERSION=x.xx.x
x.xx.xは、実際に導入するDifyのバージョンへ置き換えてください。
例えば、Dify 1.14.2を使用する場合は、次のように設定します。
DIFY_VERSION=1.14.2
3-3. Difyをクローンする
指定したバージョンのDifyをGitHubからダウンロードします。
git clone \
https://github.com/langgenius/dify.git \
--branch "${DIFY_VERSION}"
バージョンを指定することで、意図しないバージョンのDifyがダウンロードされることを防げます。
ダウンロードしたDifyのディレクトリを確認します。
ls -ld ~/dify
3-4. DifyのDockerディレクトリへ移動する
cd ~/dify/docker
3-5. 環境設定ファイルを作成する
サンプルの環境設定ファイルをコピーし、.envファイルを作成します。
cp .env.example .env
ファイルが作成されたことを確認します。
ls -la .env
この時点ではDockerイメージの取得が目的であるため、必要に応じて最低限の設定のみ行います。
実際に閉域環境でDifyを起動する際は、パスワードやストレージなどの設定を環境に合わせて変更します。
4. DifyのDockerイメージをダウンロードする
Dify本体と、PostgreSQL、Redis、Nginxなどの関連イメージをダウンロードします。
sudo docker compose \
-f docker-compose.yaml \
-f docker-compose.middleware.yaml \
pull
ダウンロードされたDockerイメージを確認します。
sudo docker images
Difyのバージョンによって、Docker Composeファイルの構成やファイル名が変更される可能性があります。
使用するDifyのバージョンに含まれるdify/dockerディレクトリを確認してください。
5. Difyで使用するDockerイメージを確認する
Docker Composeの設定から、Difyで使用するDockerイメージの一覧を表示します。
sudo docker compose \
-f docker-compose.yaml \
-f docker-compose.middleware.yaml \
config --images |
sort -u
各部分の意味は次のとおりです。
| コマンド | 内容 |
|---|---|
docker compose |
Docker Composeを操作する |
-f docker-compose.yaml |
Dify本体のComposeファイルを読み込む |
-f docker-compose.middleware.yaml |
ミドルウェア用のComposeファイルも読み込む |
config --images |
Composeファイル内で使用するイメージ名を表示する |
sort -u |
イメージ名を並べ替え、重複を削除する |
このコマンドは、Dockerイメージの一覧を表示するだけです。
6. DifyのDockerイメージを圧縮する
Docker Composeの設定に記載されているイメージだけを、1つのファイルにまとめて圧縮します。
sudo docker save $(
sudo docker compose \
-f docker-compose.yaml \
-f docker-compose.middleware.yaml \
config --images |
sort -u
) | gzip > dify-images.tar.gz
このコマンドは、次の流れで処理されます。
Composeファイルを読み込む
↓
Difyで使用するDockerイメージ名を取得する
↓
重複するイメージ名を削除する
↓
対象のイメージをdocker saveでまとめる
↓
gzip形式で圧縮する
↓
dify-images.tar.gzとして保存する
作成されたファイルを確認します。
ls -lh dify-images.tar.gz
サーバー内の全イメージを保存する方法との違い
次のコマンドでも、Dockerイメージを保存できます。(AIに最初に提示されたコマンド)
sudo docker save $(
sudo docker images --format '{{.Repository}}:{{.Tag}}' |
grep -v '<none>'
) | gzip > dify-images.tar.gz
ただし、このコマンドはDifyのComposeファイルを参照しません。
作成用サーバー内に存在する、名前とタグが付いたほぼすべてのDockerイメージが保存対象になります。
| 比較項目 | Composeファイルから取得 | docker imagesから取得 |
|---|---|---|
| 対象 | Difyの構成で使用するイメージ | サーバー内に存在するイメージ |
| Dify以外のイメージ | 基本的に含まれない | 含まれる可能性がある |
| 古いDifyイメージ | 現在の構成になければ含まれない | サーバーに残っていれば含まれる |
| オフラインキットの容量 | 不要なイメージが入りにくい | 大きくなる可能性がある |
Dify専用のオフラインキットを作成する場合は、Composeファイルから対象イメージを取得する方法が適しています。
7. 作成したDockerイメージファイルを移動する
ホームディレクトリへ移動します。
cd ~
作成したDockerイメージファイルをホームディレクトリへ移動します。
mv ~/dify/docker/dify-images.tar.gz ~/
移動後のファイルを確認します。
ls -lh ~/dify-images.tar.gz
8. Difyのソースコードを圧縮する
ホームディレクトリへ移動します。
cd ~
Difyのソースコードと設定ファイルをまとめて圧縮します。
tar -zcvf dify.tar.gz dify/
作成されたファイルを確認します。
ls -la ~/dify.tar.gz
9. 作成したオフラインキットを確認する
ホームディレクトリに、次の3ファイルが存在することを確認します。
ls -l \
~/docker-offline.tar.gz \
~/dify-images.tar.gz \
~/dify.tar.gz
それぞれのファイルの用途は次のとおりです。
| ファイル名 | 内容 |
|---|---|
docker-offline.tar.gz |
DockerのRPMパッケージとDocker Compose |
dify-images.tar.gz |
Difyと関連ミドルウェアのDockerイメージ |
dify.tar.gz |
Difyのソースコードと設定ファイル |
以上で、閉域環境へ持ち込むオフラインキットの作成は完了です。
10. 作成したファイルをS3へアップロードする
閉域環境へのファイル転送にS3を使用する場合は、作成した3ファイルを任意のS3バケットへアップロードします。
aws s3 cp \
~/docker-offline.tar.gz \
s3://<任意のS3バケット名>/
aws s3 cp \
~/dify-images.tar.gz \
s3://<任意のS3バケット名>/
aws s3 cp \
~/dify.tar.gz \
s3://<任意のS3バケット名>/
まとめ
閉域環境へDifyを構築するため、インターネットへ接続できる作成用サーバーで、以下のファイルを作成しました。
- DockerのRPMパッケージとDocker Compose
- Difyで使用するDockerイメージ
- Difyのソースコードと設定ファイル
作成されるファイルは次の3つです。
docker-offline.tar.gz
dify-images.tar.gz
dify.tar.gz
閉域環境では、これらのファイルを展開し、Dockerのインストール、Dockerイメージの読み込み、Difyの起動をおこないます。
既存閉域環境のDifyをアップデートする目的であれば、Dockerはすでに存在するため、転送するのは次の2ファイルで問題ありません。
dify-images.tar.gz
dify.tar.gz