はじめに
ComfyUIのノードにキーロガーが含まれていたというタイトルを見て(記事の中身は見てない)、コンテナで提供されるアプリのサプライチェーン怖いよなーと思いつつ、ブラックボックスノードで実行されてしまう事は防ぎようがないんだけど、何でもかんでもrootで動かしちゃだめだよなぁ...と思い立ったので、今流行りのDifyをrootlessで動かしてみた。
Difyインストール
今回はAlmaLinux9のminimalをベースにインストール ※一般ユーザーで実施
# SELinuxオフ
sudo grubby --update-kernel ALL --args selinux=0
sudo reboot
# dnf update
sudo dnf update -y
# Dockerインストール
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# rootless実行設定
sudo dnf install -y iptables
sudo modprobe ip_tables
curl -fsSL https://get.docker.com/rootless | sh
sudo loginctl enable-linger $USER
# 特権ポート許可
sudo setcap cap_net_bind_service=ep $(which rootlesskit)
systemctl --user restart docker
# Gitインストール
sudo dnf install -y git
# 80ポート開放
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload
# Difyインストール
cd
mkdir container
cd container
git clone https://github.com/langgenius/dify.git
cd dify/docker
docker compose up -d
Dify LLM設定
今回はLLMにGeminiを利用します。
また、今回私が構築したAlmaLinuxが192.168.56.113なので、http://192.168.56.113 へアクセスし、メールアドレス、パスワードを登録してログイン
今回はGeminiを利用しようと思います。モデルプロバイダーを押下し、Geminiのセットアップボタンを押下
「Get your API Key from Google」を押下し、Geminiにログインする
画面上部の「Gemini API」タブを押下し、「Google AI StudioでAPIキーを取得する」ボタンを押下する
「キー 新しいプロジェクトでAPIキーを作成」ボタンを押下する
Difyに戻り、コピーしたAPIキーを貼り付け、「保存」ボタンを押下する
Notion 連携シークレット取得
次に、Notion側でDifyからアクセスを許容する設定を行います。
また、NotionにはDifyというページにDifyの説明と本記事上部にあるインストール手順を乗せたページを用意しました。
https://www.notion.so/my-integrations にアクセスし、接続するためのシークレットキーを生成します。
「+ 新しいインテグレーション」ボタンを押下
ここで、一旦Difyを停止(docker compose down)し、docker-dompose.yamlのパラメタを修正 ※2カ所あるので、2ヵ所とも修正
修正後、docker compose up -dで起動
NOTION_INTEGRATION_TYPE: public
NOTION_INTERNAL_SECRET: you-internal-secret
↓
NOTION_INTEGRATION_TYPE: internal
NOTION_INTERNAL_SECRET: コピーしたシークレット値
Difyナレッジ登録
Difyが参照するナレッジを登録します。
ナレッジから「知識を作成」ボタンを押下
「+ Add workspace」ボタンを押下
ところが、バグなのか何も起きません。何も起きませんが、ちゃんと動いている様子
元の画面に戻ると、Notionが登録されています。しかし、どのページも読み込まれていません。
Notion コネクタ設定
Notionのページに戻り、Difyに読み込ませたいページの設定から、接続先にシークレット作成時の名前を選択
Dify データソース同期
元のページに戻ると、読み込まれたページが表示されているので、チェックして「次へ」ボタンを押下
Dify チャットボット作成
Difyのトップページに戻り、「テンプレートから作成」ボタンを押下
「Knowledge Retreival + Chatbot」の「+ このテンプレートを使用する」ボタンを押下
「Knowledge Retreival」ブロックを選択し、「N-to-1リトリーバル」のシステム推論モデルをGeminiに変更する
知識の「+」を押下し、Notionから読み込んだナレッジを選択後「追加」ボタンを押下する
コンテキストに「result」を設定する。以上終了
※resultはナレッジからのアウトプット。これを設定しないとボットはナレッジを検索してくれない
動作確認
「Difyとは何ですか?」と質問すると、Notionに記載したDifyの説明を表示してくれる
「Difyに必要なpkgをリストアップして」と言うと、Notionに記載されている手順から必要なpkgをリストアップしてくれる
あとは前段にSSLオフロードする機構を入れればいいかなと思います。
参考