0
0

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オフラインキット作成

0
Posted at

はじめに

閉域環境に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を構築するため、インターネットへ接続できる作成用サーバーで、以下のファイルを作成しました。

  1. DockerのRPMパッケージとDocker Compose
  2. Difyで使用するDockerイメージ
  3. 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
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?