مستندات n8n
74+ نود

سوپابیس

Supabase

جایگزین open-source Firebase - دیتابیس PostgreSQL، Auth، Storage و Real-time

دیتابیس
متوسط
۰ بازدید
n8n 1.0+

نمای کلی

نود Supabase چیست؟

نود Supabase امکان اتصال و مدیریت کامل backend اپلیکیشن‌ها را از طریق n8n فراهم می‌کند. Supabase یک پلتفرم open-source است که اغلب به عنوان "جایگزین Firebase" شناخته می‌شود.

اجزای Supabase:

  • PostgreSQL Database: دیتابیس PostgreSQL واقعی با Row Level Security (RLS)
  • Auth: سیستم احراز هویت (Email, OAuth, Magic Link, Phone)
  • Storage: ذخیره و مدیریت فایل‌ها با access control
  • Realtime: دریافت تغییرات real-time از دیتابیس
  • Edge Functions: اجرای کد serverless (Deno)
  • Auto API: API خودکار REST و GraphQL از روی schema

قابلیت‌های کلیدی در n8n:

  • Row Operations: ایجاد، خواندن، ویرایش و حذف ردیف‌ها
  • Filtering: فیلتر پیشرفته با عملگرهای PostgreSQL
  • RPC Functions: فراخوانی stored functions
  • Upsert: ایجاد یا ویرایش خودکار
  • Bulk Operations: عملیات انبوه
  • Storage: آپلود و مدیریت فایل‌ها
  • Realtime Trigger: دریافت event‌های تغییر داده

مقایسه Supabase vs Firebase:

| ویژگی | Supabase | Firebase | |--------|----------|----------| | دیتابیس | PostgreSQL (SQL) | Firestore (NoSQL) | | Open Source | بله | خیر | | Self-hosted | بله | خیر | | دسترسی ایران | بله (self-hosted) | نیاز به VPN | | SQL Support | کامل | محدود | | Pricing | سخاوتمند (رایگان تا ۵۰۰MB) | محدودتر |

محدودیت‌های API:

  • Free Tier: ۵۰۰MB دیتابیس، ۱GB storage، ۵۰,۰۰۰ monthly active users
  • Rate Limit: بستگی به plan دارد
  • Self-hosted: بدون محدودیت

احراز هویت

احراز هویت Supabase

دریافت API Keys

  1. 1به Supabase Dashboard بروید (app.supabase.com)
  2. 2پروژه خود را انتخاب کنید
  3. 3به Settings > API بروید
  4. 4دو کلید مهم:

Project URL:

code
https://your-project-id.supabase.co

API Keys:

  • anon key (public): برای عملیات‌هایی که RLS اعمال می‌شود
  • service_role key (secret): دسترسی کامل، RLS را bypass می‌کند

⚠️ هشدار امنیتی: هرگز service_role key را در client-side استفاده نکنید.

تنظیم در n8n:

  1. 1به Credentials بروید
  2. 2Supabase API را انتخاب کنید
  3. 3وارد کنید:
  • **Host**: URL پروژه (مثلاً https://abc123.supabase.co)
  • API Key: service_role key (برای دسترسی کامل در n8n)

روش‌های احراز هویت Supabase:

  • Email/Password: ثبت‌نام و ورود با ایمیل
  • Magic Link: ورود بدون رمز با لینک ایمیلی
  • OAuth: Google, GitHub, Discord, etc.
  • Phone/OTP: ورود با شماره موبایل
  • Custom JWT: توکن سفارشی

Self-Hosted Supabase:

bash
# Clone Supabase
git clone --depth 1 https://github.com/supabase/supabase
cd supabase/docker

# تنظیم env
cp .env.example .env
# ویرایش .env و تغییر JWT_SECRET, POSTGRES_PASSWORD, etc.

# اجرا
docker compose up -d

Row Level Security (RLS):

Supabase از RLS برای امنیت استفاده می‌کند:

sql
-- فعال‌سازی RLS
ALTER TABLE my_table ENABLE ROW LEVEL SECURITY;

-- Policy: هر کاربر فقط داده خودش را ببیند
CREATE POLICY "Users see own data" ON my_table
  FOR SELECT USING (auth.uid() = user_id);

⚠️ در n8n با service_role key، RLS bypass می‌شود.

عملیات‌های موجود

1

row-create

ایجاد ردیف جدید در جدول

2

row-get

دریافت یک ردیف با فیلتر

3

row-list

دریافت لیست ردیف‌ها با فیلتر و مرتب‌سازی

4

row-update

ویرایش ردیف‌های موجود

5

row-delete

حذف ردیف‌ها با فیلتر

6

row-upsert

ایجاد یا ویرایش ردیف (بر اساس unique constraint)

7

rpc

اجرای PostgreSQL function از طریق RPC

8

storage-upload

آپلود فایل به Supabase Storage

9

storage-download

دانلود فایل از Supabase Storage

10

storage-list

دریافت لیست فایل‌های یک bucket/folder

11

storage-delete

حذف فایل از Storage

12

storage-url

دریافت URL عمومی یا signed URL

کاربردهای متداول

کاربردهای رایج

۱. Backend برای فرم‌های وب

فرم‌های وب‌سایت را مستقیم به Supabase متصل کنید و پردازش خودکار انجام دهید.

code
Webhook (فرم) → Supabase (ایجاد ردیف) → Email (تأیید) → Telegram (اطلاع تیم)

۲. User Management Automation

خودکارسازی فرآیندهای مربوط به کاربران: خوش‌آمدگویی، onboarding، و reminder.

code
Supabase Trigger (کاربر جدید) → Email (خوش‌آمدگویی) → Wait (3 روز) → Email (آموزش) → Supabase (update onboarded)

۳. E-commerce Backend

مدیریت محصولات، سفارش‌ها و موجودی با Supabase به عنوان backend.

code
Webhook (سفارش جدید) → Supabase (ایجاد order) → Supabase (کاهش stock) → Payment → Supabase (update status) → Email

۴. Content Management

مدیریت محتوای سایت (blog, products, FAQ) و انتشار خودکار.

code
Supabase (مقاله status=published) → Code (generate HTML) → Webflow (انتشار) → Twitter (share)

۵. File Processing Pipeline

فایل‌های آپلود شده را خودکار پردازش کنید.

code
Supabase Storage (فایل جدید) → IF (تصویر?) → Code (resize) → Supabase Storage (ذخیره thumbnail) → Supabase (update record)

۶. Analytics Dashboard

جمع‌آوری و تجمیع داده‌ها برای داشبورد تحلیلی.

code
Schedule (هر ساعت) → Supabase RPC (aggregate function) → Google Sheets (update dashboard)

۷. Notification System

سیستم اعلان بر اساس تغییرات دیتابیس.

code
Supabase Trigger (سفارش status تغییر کرد) → Switch (status) →
  pending: Email (تأیید)
  shipped: SMS (اطلاع‌رسانی)
  delivered: Email (نظرسنجی)

۸. Data Migration

انتقال داده از سرویس‌های دیگر به Supabase.

code
Airtable/Google Sheets → Code (transform) → Supabase (bulk upsert) → Log

۹. Scheduled Reports

گزارش‌های دوره‌ای از داده‌های Supabase.

code
Schedule (هفتگی) → Supabase RPC (sales_report) → Code (format) → Email (ارسال PDF)

۱۰. API Gateway

Supabase را به عنوان backend برای API عمومی استفاده کنید.

code
Webhook (GET /api/products) → Supabase (لیست محصولات) → Response (JSON)

نکات حرفه‌ای

نکات حرفه‌ای

۱. از service_role Key استفاده کنید

در n8n همیشه از service_role key استفاده کنید. این key دسترسی کامل دارد و RLS را bypass می‌کند.

۲. Select فقط ستون‌های مورد نیاز

بجای *، فقط ستون‌های لازم را select کنید. سرعت بالاتر و traffic کمتر.

۳. Upsert بجای Check + Insert

بجای بررسی وجود و سپس insert، مستقیماً از upsert استفاده کنید:

code
Supabase Upsert → onConflict: email → داده‌ها

۴. RPC Functions برای Logic پیچیده

کوئری‌های پیچیده و aggregation را در PostgreSQL function بنویسید و از RPC فراخوانی کنید. بسیار سریع‌تر از چندین API call.

۵. Realtime Triggers

از Supabase Database Webhooks (pg_notify) بجای polling استفاده کنید.

۶. Storage Policies

برای Storage هم مثل tables، RLS policies بسازید تا دسترسی فایل‌ها کنترل شود.

۷. Foreign Key Joins

Supabase از auto-join پشتیبانی می‌کند:

code
select: *, author:users(name, avatar)

بدون نیاز به JOIN دستی.

۸. Full-Text Search

از PostgreSQL full-text search استفاده کنید:

sql
CREATE INDEX idx_fts ON posts USING gin(to_tsvector('simple', title || ' ' || body));

۹. Edge Functions

برای logic سمت سرور از Edge Functions (Deno) استفاده کنید. از n8n می‌توانید آن‌ها را invoke کنید.

۱۰. Batch Operations

چندین insert/update/delete را در یک request ارسال کنید. از HTTP Request node با Supabase REST API.

۱۱. Database Migrations

از Supabase CLI برای مدیریت migrations استفاده کنید. schema تغییرات را version control کنید.

۱۲. Self-hosted برای ایران

Supabase self-hosted روی سرور ایران: بدون VPN، سرعت بالا، و بدون محدودیت pricing.

۱۳. Signed URLs برای فایل‌های خصوصی

از signed URLs با TTL برای دسترسی موقت به فایل‌های خصوصی استفاده کنید.

۱۴. Row Count بهینه

بجای دریافت همه ردیف‌ها و شمارش، از header Prefer: count=exact استفاده کنید.

۱۵. Error Handling

برای workflow‌های حساس، از Error Trigger و retry logic استفاده کنید. Supabase ممکن است temporarily unavailable باشد.

رفع مشکلات

رفع مشکلات رایج

❌ خطای 401 Unauthorized

علت: API Key نامعتبر

راه‌حل

  • مطمئن شوید از service_role key (نه anon key) استفاده می‌کنید
  • Key را از Settings > API کپی کنید
  • URL پروژه صحیح باشد

❌ خطای "relation does not exist"

علت: جدول وجود ندارد

راه‌حل

  • نام جدول را exact بررسی کنید (case-sensitive)
  • مطمئن شوید جدول در public schema است
  • اگر در schema دیگری است: schema_name.table_name

❌ خطای RLS (Row Level Security)

علت: policy اجازه دسترسی نمی‌دهد

راه‌حل

  • در n8n از service_role key استفاده کنید (RLS bypass)
  • یا policy مناسب بسازید
  • برای debug، موقتاً RLS را غیرفعال کنید: ALTER TABLE t DISABLE ROW LEVEL SECURITY

❌ خطای "duplicate key value violates unique constraint"

علت: مقدار تکراری برای ستون unique

راه‌حل

  • از upsert بجای insert استفاده کنید
  • onConflict column را مشخص کنید
  • مقدار unique بودن را قبل از insert بررسی کنید

❌ خطای "null value in column violates not-null constraint"

علت: ستون NOT NULL مقدار ندارد

راه‌حل

  • همه ستون‌های NOT NULL را مقدار بدهید
  • یا default value در schema تنظیم کنید

❌ فایل‌ها آپلود نمی‌شوند

علت: تنظیمات Storage نادرست

راه‌حل

  • مطمئن شوید bucket وجود دارد و public/private تنظیم شده
  • سایز فایل از limit تجاوز نکند
  • MIME type مجاز باشد
  • RLS policies برای storage بررسی شود

❌ RPC Function اجرا نمی‌شود

علت: Function وجود ندارد یا پارامترها نادرست

راه‌حل

  • نام function exact باشد
  • پارامترها مطابق definition ارسال شود
  • Function در public schema باشد (یا schema مشخص شود)

❌ Performance ضعیف

علت: کوئری‌های بهینه نشده

راه‌حل

  • Index بسازید برای ستون‌های پرکاربرد
  • از select برای انتخاب ستون‌های خاص استفاده کنید
  • از limit استفاده کنید
  • از RPC functions برای کوئری‌های پیچیده استفاده کنید
اشتراک‌گذاری:

آیا این مستندات مفید بود؟