Nutanix Enterprise AI(NAI)2.6 の推論エンドポイントを利用して、Dify でチャットボットを作成してみます。今回は、Dify を構築します。
今回の内容です。
- 今回の環境
- 1. Docker ホストの用意
- 2. Dify の構築ダウンロード
- 3. 環境変数ファイルの作成
- 4. NAI 証明書の設置
- 5. Dify コンテナの起動
- 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 -cOr 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」に、証明書ファイルのパスを指定します。
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
つづく。
