NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

Nutanix Enterprise AI 2.6 を利用してみる。Part-01:Dify の構築

Nutanix Enterprise AI(NAI)2.6 の推論エンドポイントを利用して、Dify でチャットボットを作成してみます。今回は、Dify を構築します。

今回の内容です。

 

NAI については、こちらの投稿もどぞ。

 

今回の環境

NAI は、下記の一連の投稿で構築した環境を利用します。

 

Dify は、ノーコードで LLM を利用したチャットボットや AI エージェントを開発できるソフトウェアです。今回は、Ubuntu 24.04 の Linux マシンで、Docker コンテナとして起動します。

 

1. Docker ホストの用意

まず、Ubuntu のパッケージをアップデートしておきます。

nutanix@lab-dify-01:~$ sudo apt update
nutanix@lab-dify-01:~$ sudo apt upgrade -y

 

Docker と Docker Compose をインストールします。

nutanix@lab-dify-01:~$ apt install docker.io docker-compose-v2 -y

 

Dify を起動するユーザー(今回は nutanix ユーザー)を、docker グループに追加します。

nutanix@lab-dify-01:~/dify/docker$ sudo usermod -aG docker nutanix

 

Ubuntu を再起動して、nutanix ユーザーで再ログインします。

nutanix@lab-dify-01:~$ sudo reboot

 

2. Dify の構築ダウンロード

GitHub から、Dify のコードを入手します。

nutanix@lab-dify-01:~$ git clone -b 1.14.0 https://github.com/langgenius/dify.git
Cloning into 'dify'...
remote: Enumerating objects: 407003, done.
remote: Counting objects: 100% (1495/1495), done.
remote: Compressing objects: 100% (986/986), done.
remote: Total 407003 (delta 935), reused 561 (delta 504), pack-reused 405508 (from 4)
Receiving objects: 100% (407003/407003), 355.88 MiB | 28.54 MiB/s, done.
Resolving deltas: 100% (297174/297174), done.
Note: switching to '6fafeec41502152ec3552d1851aaeb3c22db1f02'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c 

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

nutanix@lab-dify-01:~$

Docker Compose の YAML ファイルが配置ディレクトリに移動します。

nutanix@lab-dify-01:~$ cd dify/docker/
nutanix@lab-dify-01:~/dify/docker$

 

3. 環境変数ファイルの作成

Dify の環境変数を設定する、.env ファイルを作成します。

nutanix@lab-dify-01:~/dify/docker$ cp .env.example .env

 

ファイルが作成されました。

nutanix@lab-dify-01:~/dify/docker$ ls -l .env*
-rw-rw-r-- 1 nutanix nutanix 59291 May 11 12:15 .env
-rw-rw-r-- 1 nutanix nutanix 59291 May 11 11:43 .env.example

 

4. NAI 証明書の設置

NAI から証明書を取得して、Dify のコンテナに設置します。

 

4-1. NAI 証明書のダウンロード

このラボ環境では、NAI の推論エイドポイントで、 HTTPS 接続で自己署名証明書を使用しているます。そこで、エンドポイントと連携するコンテナに NAI の証明書を配置します。

NAI UI から、curl で証明書を入手します。NAI UI:10.1.7.122、保存するファイル名:nai.crt

nutanix@lab-dify-01:~/dify/docker$ openssl s_client -connect 10.1.7.122:443 -showcerts </dev/null | openssl x509 -outform PEM > nai.crt
Can't use SSL_get_servername
depth=0 CN = nai.10.1.7.122.nip.io
verify error:num=18:self-signed certificate
verify return:1
depth=0 CN = nai.10.1.7.122.nip.io
verify return:1
DONE

 

ダウンロードした証明書の内容を確認しておきます。ここでは、証明書の Subject Alternative Name に設定されている IP アドレスが、NAI UI のアドレスと一致することを確認します。

nutanix@lab-dify-01:~/dify/docker$ openssl x509 -text -noout -in nai.crt | grep "Subject Alternative Name:" -A1
            X509v3 Subject Alternative Name:
                DNS:nai.10.1.7.122.nip.io, IP Address:10.1.7.122

 

4-2. NAI 証明書の設置

Docker Compose の定義をオーバーライドする YAML ファイルを作成します。このファイルは、docker-compose.yaml ファイルと同じディレクトリに保存します。

 

docker-compose.override.yaml

  • L2、L9、L14:証明書を配置するのは、plugin_daemon、api、worker サービスのコンテナです。
  • L4-L5、L10-L11、L15-L16:証明書ファイルは、コンテナ内の /usr/local/share/ca-certificates/nai.crt としてマウントします。
  • L7-L8、L13、L18:環境変数「REQUESTS_CA_BUNDLE」と「SSL_CERT_FILE」に、証明書ファイルのパスを指定します。

gist.github.com

 

5. Dify コンテナの起動

docker conpose up -d コマンドで、Dify コンテナ一式を起動します。「docker-init_permissions-1」コンテナのみ停止状態(Exited)ですが、これは問題ありません。

nutanix@lab-dify-01:~/dify/docker$ docker compose up -d

 

軌道に成功すると、下記のようになります。

nutanix@lab-dify-01:~/dify/docker$ docker compose ps -a
NAME                        IMAGE                                       COMMAND                   SERVICE            CREATED          STATUS                             PORTS
docker-api-1                langgenius/dify-api:1.14.0                  "/bin/bash /entrypoi…"    api                25 seconds ago   Up 21 seconds (health: starting)   5001/tcp
docker-db_postgres-1        postgres:15-alpine                          "docker-entrypoint.s…"    db_postgres        25 seconds ago   Up 25 seconds (healthy)            5432/tcp
docker-init_permissions-1   busybox:latest                              "sh -c 'FLAG_FILE=\"/…"   init_permissions   25 seconds ago   Exited (0) 24 seconds ago
docker-nginx-1              nginx:latest                                "sh -c 'cp /docker-e…"    nginx              25 seconds ago   Up 18 seconds                      0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp
docker-plugin_daemon-1      langgenius/dify-plugin-daemon:0.6.0-local   "/usr/bin/tini -g --…"    plugin_daemon      25 seconds ago   Up 22 seconds                      0.0.0.0:5003->5003/tcp, [::]:5003->5003/tcp
docker-redis-1              redis:6-alpine                              "docker-entrypoint.s…"    redis              25 seconds ago   Up 25 seconds (health: starting)   6379/tcp
docker-sandbox-1            langgenius/dify-sandbox:0.2.15              "/entrypoint.sh"          sandbox            25 seconds ago   Up 25 seconds (health: starting)
docker-ssrf_proxy-1         ubuntu/squid:latest                         "sh -c 'cp /docker-e…"    ssrf_proxy         25 seconds ago   Up 25 seconds                      3128/tcp
docker-weaviate-1           semitechnologies/weaviate:1.27.0            "/bin/weaviate --hos…"    weaviate           25 seconds ago   Up 25 seconds
docker-web-1                langgenius/dify-web:1.14.0                  "/bin/sh ./entrypoin…"    web                25 seconds ago   Up 25 seconds                      3000/tcp
docker-worker-1             langgenius/dify-api:1.14.0                  "/bin/bash /entrypoi…"    worker             25 seconds ago   Up 21 seconds                      5001/tcp
docker-worker_beat-1        langgenius/dify-api:1.14.0                  "/bin/bash /entrypoi…"    worker_beat        25 seconds ago   Up 21 seconds                      5001/tcp

 

証明書を配置したコンテナのひとつである、docker-plugin_daemon-1 に、証明書ファイルが配置されたことを確認しておきます。

nutanix@lab-dify-01:~/dify/docker$ docker exec docker-plugin_daemon-1 ls -l /usr/local/share/ca-certificates/nai.crt
-rw-rw-r-- 1 ubuntu ubuntu 1127 May 11 16:48 /usr/local/share/ca-certificates/nai.crt

 

コンテナに、CA 証明書(の代替である自己署名証明書)を指定する環境変数が設定されていることを確認します。

nutanix@lab-dify-01:~/dify/docker$ docker exec docker-plugin_daemon-1 env | grep REQUESTS_CA_BUNDLE
REQUESTS_CA_BUNDLE=/usr/local/share/ca-certificates/nai.crt

 

6. Dify の初期設定

Web ブラウザから Docker ホストの IP アドレスにアクセスすると、Dify の管理者アカウント設定画面が表示されます。

今回の Docker ホストの IP アドレスは下記です。今回は検証環境なので HTTP で起動しています。

  • Linux マシン(Docker ホスト)の IP アドレス:10.1.7.226

 

下記を入力して「セットアップ」をクリックします。

  • メールアドレス:demo@example.com
  • ユーザー名:demo
  • パスワード:設定するパスワード

 

これで、検証用の Dify が構築できました。

 

参考:Dify の再起動

Docker Compose の YAML ファイルを編集したり、トラブルシュートなどで Dify のコンテナを停止・起動したい場合は下記のようにコマンドを実行します。

なお、docker compose コマンドは、Dify の dify/docker ディレクトリに移動して実行します。

 

停止

$ docker compose down

 

起動

$ docker compose up -d

 

再起動(停止 → 起動)

$ docker compose down && docker compose up -d

 

つづく。

 

©2026 gowatana
クリエイティブ・コモンズ・ライセンスこの 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。