لماذا تستضيف Supabase ذاتيًا على خادم VPS
ليس Supabase صندوقًا أسود: بل هو مجموعة من الخدمات مفتوحة المصدر (PostgreSQL، وGoTrue للمصادقة، وPostgREST للواجهة البرمجية، وRealtime، وStorage، وKong كبوابة) منسّقة معًا. تفرض النسخة السحابية الفوترة لكل مشروع ولكل مستخدم نشط، وتوقف المشاريع المجانية غير النشطة مؤقتًا. باستضافتها ذاتيًا على خادم VPS، تحصل على خلفية كخدمة (backend-as-a-service) كاملة دون هذه القيود، مع وصول مباشر إلى PostgreSQL لإجراء الترحيلات والإضافات (pgvector وPostGIS) والضبط. وهذا مثالي لوكالة تستضيف عدة تطبيقات لعملاء، أو منتج SaaS ناشئ يريد التحكم في تكاليفه، أو أي مشروع يتطلب سيادة البيانات. تتولى بنفسك التحديثات والنسخ الاحتياطي، مقابل حرية كاملة.
الفوائد الملموسة لـ Supabase مُستضاف ذاتيًا
- خلفية كاملة: قاعدة بيانات Postgres وAuth وStorage وRealtime وواجهة REST/GraphQL في حزمة واحدة.
- وصول مباشر إلى PostgreSQL الأساسي: ترحيلات SQL، وإضافات، وسياسات RLS دون حدود.
- لا إيقاف مؤقت ولا فوترة لكل مستخدم نشط شهريًا.
- Studio مضمّن: واجهة إدارة عبر الويب لإدارة الجداول والمصادقة وحاويات التخزين (buckets).
- إضافات الذكاء الاصطناعي عبر
pgvectorلـ RAG والبحث الدلالي، مُفعّلة بحرية. - مشاريع متعددة على خادم VPS واحد: عملي لوكالة أو استوديو تطوير.
المتطلبات المادية والبرمجية
يُطلق Supabase المُستضاف ذاتيًا نحو عشرة حاويات (Postgres وKong وGoTrue وPostgREST وRealtime وStorage وStudio وMeta وImgproxy...)، لذا فهو حزمة أكثر استهلاكًا للموارد من قاعدة بيانات بسيطة. احسب حدًا أدنى من معالجين افتراضيين (2 vCPU) و4 غيغابايت من RAM لبيئة اختبار، والأفضل 4 vCPU مع 8 غيغابايت من RAM و80 غيغابايت من SSD للإنتاج. على الصعيد البرمجي: Ubuntu 22.04/24.04 LTS، وDocker وDocker Compose v2، واسم نطاق يشير إلى خادم VPS (مثل: api.mysaas.com) لكشف البوابة عبر HTTPS، ووكيل عكسي مثل Caddy أو Traefik أو Nginx لإدارة SSL. خطّط أيضًا لتوليد أسرار قوية (JWT_SECRET، ومفتاحا anon وservice_role).
نشر Supabase مُستضاف ذاتيًا باستخدام Docker
استنساخ المستودع الرسمي وتهيئة البيئة
احصل على مجلد docker من مستودع Supabase، وانسخ .env.example إلى .env، ثم ولّد أسرارًا فريدة: POSTGRES_PASSWORD وJWT_SECRET، والمفتاحين ANON_KEY / SERVICE_ROLE_KEY المشتقين من JWT. لا تنشر أبدًا بالقيم النموذجية.
تهيئة عناوين URL وكلمة مرور Studio
في .env، عيّن SITE_URL وAPI_EXTERNAL_URL وSUPABASE_PUBLIC_URL بنطاقك، واحمِ Supabase Studio بـ DASHBOARD_USERNAME وDASHBOARD_PASSWORD: فإن Studio يمنح وصولاً إداريًا كاملاً إلى مشروعك.
إطلاق الحزمة
ابدأ بـ docker compose up -d، ثم تابع بدء تشغيل الخدمات عبر docker compose ps. تستغرق التهيئة الأولى لـ Postgres وتطبيق الترحيلات الداخلية دقيقة إلى دقيقتين؛ تحقق من عدم وجود أخطاء في docker compose logs.
وضع وكيل عكسي مع SSL
ضع Caddy أو Traefik أمام Kong (المنفذ 8000 للبوابة) لكشف واجهتك البرمجية عبر HTTPS. يحصل Caddy على شهادات Let's Encrypt ويجدّدها تلقائيًا: يكفي كتلة بسيطة mysaas.com { reverse_proxy localhost:8000 }. لا تكشف Postgres (5432) للعموم أبدًا.
تفعيل سياسات RLS
سجّل الدخول إلى Studio، وأنشئ جداولك، ثم فعّل Row Level Security على كل منها وحدّد سياساتك. بدون RLS، يكشف مفتاح anon جميع بياناتك: وهذه هي النقطة الأمنية الأولى في Supabase مُستضاف ذاتيًا.
النسخ الاحتياطي لـ Postgres والتخزين
جدوِل pg_dump يوميًا لقاعدة البيانات وأرشف وحدة التخزين Storage (حاويات الملفات) إلى تخزين خارجي. اختبر الاستعادة الكاملة على خادم VPS للتجهيز (staging) قبل الاعتماد عليها في الإنتاج.
Supabase مقابل Appwrite: أي BaaS مُستضاف ذاتيًا تختار؟
| المعيار | Supabase | Appwrite |
|---|---|---|
| قاعدة البيانات | PostgreSQL أصلي، SQL كامل | MariaDB داخليًا، واجهة برمجية للمستندات/المجموعات |
| نموذج البيانات | علائقي، RLS في Postgres | مستندات ومجموعات، صلاحيات حسب القواعد |
| واجهة برمجية مُولّدة تلقائيًا | REST (PostgREST) + GraphQL | REST وGraphQL وحزم SDK متعددة |
| المصادقة | GoTrue وOAuth وروابط سحرية (magic links) | مصادقة مدمجة، وOAuth، وفرق، وJWT |
| بصمة الموارد | أثقل (~10 حاويات) | معتدلة، حزمة أكثر إحكامًا |
| البحث الشعاعي / الذكاء الاصطناعي | أصلي عبر pgvector | غير أصلي، يجب توفيره خارجيًا |
| مثالي لـ | التطبيقات العلائقية، وRAG، وSQL المتقدم | تطبيقات الجوال/الويب الموجّهة للمستندات |
| منحنى التعلّم | مريح إذا كنت تعرف SQL | سريع لمطوّري الواجهة الأمامية/الجوال |
حدّث Supabase بحذر: بما أن الصور موسومة بالإصدارات في ملف docker-compose.yml، خذ دائمًا pg_dump كاملاً ولقطة للخادم VPS قبل تنفيذ docker compose pull && docker compose up -d. تمسّ بعض ترقيات الإصدارات المخطط الداخلي للخدمات. للإنتاج، اعزل Postgres على وحدة تخزين مخصصة عالية IOPS وفعّل pgvector منذ البداية إذا كنت تخطط للبحث الدلالي: فإضافته لاحقًا تفرض ترحيلاً للمخطط.