VPSで「認証つきDify環境」を作る③:Supabaseの事前設定
💡 この記事はシリーズ③です。
前回はXserver VPS上にDifyをセットアップし、動作確認まで行いました。
今回は、ChatbotUIの認証とDify設定を管理するための Supabase を整えます。
③Supabaseの事前設定
ChatbotUIの認証機能と、Difyアプリ設定の保管先として Supabase を使います。
ここでは以下の流れで進めます👇
- プロジェクト作成
- API情報の確認とメモ
- 認証(Auth)の設定とテストユーザー登録
- Dify接続情報テーブルの作成
1. プロジェクトを作成
まずは Supabase公式サイト にアクセスし、サインインします。

続いて、新しいプロジェクトを作成します。

| 項目 | 内容 |
|---|---|
| プロジェクト名 | 任意(例:dify-chatbot) |
| データベースパスワード | 強固なパスワードを設定(重要!) |
| 地域 | 近いロケーションを選択(今回は Tokyo) |
2. API情報をメモしておく
後ほどChatbotUI側の.env設定で使うので、SupabaseのAPI情報を控えておきましょう。
左下の歯車アイコン 「Project Settings」 をクリックします。
🔹 Project URL
「Project Settings → Data API」から
Project URL をコピーしてメモします。

🔹 API Keys
次に「Project Settings → API Keys」を開き、
以下の2つをコピーします。👇
※あとで貼りやすいように、テキストエディタにまとめておくと便利です。
| キー名 | 用途 | 注意点 |
|---|---|---|
anon key |
クライアント用(公開OK) | ChatbotUIのフロントで使用 |
service_role key |
サーバー専用(非公開) |
.env にのみ設定、絶対に漏らさない |

3. 認証(Auth)の準備とユーザー登録
続いて、Supabaseの認証設定を有効化します。
🔸 サインアップ制御
左メニューから
Authentication → Sign In / Providers を開き、「User Signups」の項目にある 「Allow new users to sign up」 を 無効化(OFF) にします。

Difyを社内利用する前提なので、
招待制(管理者が作るユーザーのみ)とします。
🔸 Emailログイン設定
同じページ下部の Auth Providers → Email を開き、Enabled にチェックを入れます。

さらに、Email OTP Expiration を 900秒(15分) に設定します。

これで、メールリンクによるログイン認証が有効になります。
🔸 リダイレクトURL設定
次に左メニューから Authentication → URL Configuration を開きます。

「Site URL」に、ChatbotUIを公開する予定のサブドメインを入力します。
例:https://chat.example.com
ここで設定したURLがログイン後の遷移先になります。
あとでドメインを変更した場合は、この設定も必ず更新してください。
🔸 テストユーザーを作成
試験運用用にユーザーを1件登録しておきましょう。
左メニューから Authentication → Users → Create new user をクリックして作成します👇

これで、ChatbotUIからの認証テストができるようになります。
4. Dify接続情報テーブルを作成
DifyアプリのAPIキーや表示名、初期入力値などを管理するために、
public.dify_apps テーブルを作成します。
⚙️ このテーブルは「サーバー(service_role)」だけが参照する想定です。
作成後にRLSで**“全拒否”ポリシー**を適用し、ブラウザ側(anon key)からは読めないようにします。
🔹 テーブル作成SQL
Supabaseの左メニューから 「SQL Editor」 を開き、
以下のスクリプトを貼り付けて実行します。

create table public.dify_apps (
id uuid primary key default gen_random_uuid(),
slug text unique not null, -- 例: 'support-bot'
display_name text not null, -- UIに表示する名前
api_key text not null, -- DifyのApp APIキー(app-xxxx)
base_url text not null default 'https://example.com',
default_inputs jsonb not null default '{}'::jsonb, -- 初期inputs(UIで上書き可)
is_active boolean not null default true,
created_at timestamptz default now()
);
-- 行レベルセキュリティを有効化し、安全側に倒す
alter table public.dify_apps enable row level security;
create policy "deny all" on public.dify_apps for all using (false) with check (false);
これでテーブルは完成。
一応、動作確認用のレコードを1件入れておきましょう。下記をコピペして Run(Ctrl+Enter)します。
insert into public.dify_apps (slug, display_name, api_key, default_inputs)
values ('support-bot', 'Support Bot', 'app-ここにDifyのキー', '{"lang":"ja"}'::jsonb);
api_key には、前章で作ったDifyのテストフローのApp APIキー を入れます。
ここまで入っていれば、サーバー側(service_role)からSELECTできる状態です。
逆に、anonキーでは一切読めない(RLSの「deny all」)ので安全です。
🚀 まとめ
ここまでで、VPSの準備とDifyの初期動作確認が完了しました。
次回は、Supabaseで認証まわりを整えるパートに進みます。
Discussion