Difyの公開アプリをBasic認証で特定の人に公開する方法︎
Difyの弱みは作成したアプリケーションなどの認証の部分にあります。
公開したアプリを特定の人にしか使えないようにしたいなどのニーズがあると思いますが、
DifyのSaaS版などでは対応することが難しく、自社でのホスティングにおいても個別に設定が必要です。
アプリへのアクセス制限の選択肢
Dify SaaS版 Professional | Dify SaaS版 Team | Dify コミュニティ版 +Basic認証 | Dify コミュニティ版 +フロントアプリでの認証 | |
---|---|---|---|---|
アプリ作成者 | 3人 | 無制限 | 無制限 | 無制限 |
アプリの限定公開の対応策 | アプリケーションは公開せず Dify管理画面上から利用する | アプリケーションは公開せず Dify管理画面上から利用する | Basic認証を実装することでアプリ全体に制限を設けることが可能 | フロントのアプリケーションを自作し、認証機能を実装 |
アプリ利用者 | Dify招待者のみ | Dify招待者のみ | Basic認証のパスワードを知っている人は利用可能 | フロントのアプリケーションの認証に依存 |
備考 | ユーザ数の制限があるため 3人までしか利用できない | Dify招待者は利用できる | アプリごとなど細かい認証は不可能 | DifyをAPIサーバーとして利用する 細かいカスタマイズは実装次第で可能 |
ニーズや予算によって適切な運用方法を検討しましょう。
この記事での環境
この記事では、Xserver VPS上にホストされたDifyアプリケーションの設定を前提にしています。具体的には、以下の環境を使用して進めます。
- サーバー環境: Xserver VPS
- Difyバージョン: 0.10.1
Xserver VPSは、仮想プライベートサーバーであり、ユーザーがシステム設定やサーバー管理に柔軟に対応できるホスティングサービスです。Difyは、LLM(大規模言語モデル)を利用したアプリケーション構築プラットフォームで、現在使用しているバージョンは0.10.1
です。このバージョンに基づいて、設定手順を行っていきます。
この記事の注意事項
この記事で紹介している手順は特定の環境を想定していますが、システム環境や構成は利用者によって異なるため、実行前には適切な調整が必要です。特に、ファイルパスやコンテナ名は自分のシステムに合わせて確認してください。また、設定変更やコマンド実行はリスクを伴うため、必ずテスト環境で事前に動作確認を行い、本番環境に適用する際は慎重に進めましょう。
Basic認証のみでは十分なセキュリティ対策とは言えません。インターネット上でサービスを公開する場合は、SSL/TLS(HTTPS)を導入し、通信の暗号化を必ず行うことが推奨されます。NGINXの設定にミスがあるとサービスが停止する可能性があるため、設定変更後は必ずチェックを実施し、問題がないことを確認してからリロードや再起動を行ってください。
※全ての操作は自己責任で行ってください。障害を防ぐためには、設定ファイルやデータのバックアップを忘れずに取り、公式ドキュメントを確認すること、必要であれば専門家に相談することが重要です。
設定手順
手順1:apache2-utilsをインストール
以下のコマンドを実行してapache2-utilsをインストールします。
sudo apt update
sudo apt install apache2-utils
インストールが完了したら、htpasswdコマンドが正しくインストールされているか確認します。
htpasswd -v
このコマンドを実行して、バージョンが表示されればインストールは正常に完了しています。
以上の手順で、Basic認証に必要なhtpasswdコマンドを使用できるようになります。
手順2: docker-compose.yamlファイルを開く
最初に、docker-compose.yamlファイルを開いてNGINXの設定を確認します。以下のコマンドを実行して、ファイルを開きます。
nano /root/dify/docker/docker-compose.yaml
手順3: NGINXセクションを確認する
ファイルを開いたら、nginxセクションを探します。特にvolumesセクションで./nginx/conf.d:/etc/nginx/conf.dのような記述を確認します。以下のような記述が出ると思います。
services:
nginx:
image: nginx:latest
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/nginx.conf.template:/etc/nginx/nginx.conf.template
手順4: htpasswdコマンドを使用してパスワードファイルを作成
次に、htpasswd
コマンドを使ってBasic認証用のパスワードファイルを作成します。
手順4-1: nginx/conf.dディレクトリに移動
以下のコマンドでnginx/conf.dディレクトリに移動します。
cd /root/dify/docker/nginx/conf.d
手順4-2: htpasswdコマンドでパスワードファイルを作成
以下のコマンドを使用して、パスワードファイルを作成します。[username]の部分は実際のユーザー名に置き換えてください。
sudo htpasswd -c ./.htpasswd [ログイン時に使用するユーザーネームを書く]
手順4-3: パスワードの入力
実行後、パスワードの入力を求められるので、2回入力して設定します。
New password: ********
Re-type new password: ********
Adding password for user [username]
手順4-5: ファイルの確認
以下のコマンドでパスワードファイルが正しく作成されたか確認します。
ls -l .htpasswd
手順5: default.conf.templateを編集してBasic認証を追加
次に、default.conf.templateファイルを編集してBasic認証を追加します。
手順5-1: nginx/conf.dディレクトリに移動
再度、nginx/conf.dディレクトリに移動します。
cd /root/dify/docker/nginx/conf.d
手順5-2: default.conf.templateの編集
以下のコマンドでdefault.conf.template
ファイルを開きます。
sudo nano default.conf.template
手順5-3: location /ブロックに認証設定を追加
location /ブロックに以下の2行を追加してBasic認証を設定します。
location / {
auth_basic "Restricted"; # Basic認証を有効にする
auth_basic_user_file /etc/nginx/conf.d/.htpasswd; # .htpasswdのパス
proxy_pass http://web:3000; # リバースプロキシの設定
include proxy.conf;
}
手順5-4: ファイルを保存して終了
編集が終わったら、Ctrl + Oでファイルを保存し、Ctrl + Xでエディタを終了します。
手順5-5: NGINXの設定をリロード
Docker内でNginxを再起動して設定を反映させます。
docker exec -it docker-nginx-1 /bin/sh
nginx -s reload
手順6: Webサーバのコンテナに入って設定を確認
Basic認証が正しく適用されているか確認するため、Webサーバのコンテナに入って設定を確認します。
手順6-1: Webサーバのコンテナに入る
まず、コンテナの名前を確認し、以下のコマンドでWebサーバのコンテナに入ります。
docker exec -it <コンテナ名> /bin/sh
例:
docker exec -it docker-nginx-1 /bin/sh
手順6-2: .htpasswdファイルの確認
次に、.htpasswdファイルが正しく作成されているかを確認します。
cd /etc/nginx/conf.d
ls -la
cat .htpasswd
上記を行うと、ユーザー名:ハッシュ化されたパスワードが表示されればOKです。
手順6-3: default.confファイルの確認
次に、default.confファイルが正しく反映されているかを確認します。
cat default.conf
以下のように、先ほど設定したBasic認証の設定が含まれていることを確認します。
server {
...
location / {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
proxy_pass http://web:3000;
include proxy.conf;
}
...
}
手順6-4: Nginx設定ファイルのテスト
Nginxの設定が正しいかどうかテストします。
docker exec -it docker-nginx-1 /bin/sh
nginx -t
syntax is okやtest is successfulと表示されれば問題ありません。
Difyにアクセスしてみる
きちんと認証できました。
まとめ
今回は、Xserverで立ち上げたDifyにBasic認証をつける方法を解説しました。
皆様の参考になれば幸いです。
弊社では、生成AI使い方がわからない、Dify使ってみたけど思うようにうまくいかない、そんな方にDifyのセットアップやワークフロー構築などの支援が可能です。ご興味をお持ちいただければ問い合わせよりお気軽にご相談お待ちしております。
参考文献
https://note.com/ko_yamazaki/n/nbcd7662923c2
https://note.com/herotaka/n/n8579f4f12911