ما هو BaaS ولماذا الاستضافة الذاتية؟
Backend-as-a-Service (BaaS) يجمع في منتج واحد كل ما تحتاجه التطبيقات الحديثة: قاعدة بيانات، ومصادقة، وتخزين ملفات، ودوال بلا خادم، وتواصل فوري. Supabase وAppwrite هما الحلّان الأكثر نضجاً في هذا المجال.
Supabase مقابل Appwrite — مقارنة بـ 12 معياراً
| المعيار | Supabase | Appwrite | |
|---|---|---|---|
| قاعدة البيانات | PostgreSQL | MariaDB (≤ 1.8)، PostgreSQL (2.0+) | |
| الذاكرة العشوائية الدنيا | 4 جيجابايت | 2 جيجابايت | |
| الذاكرة الموصى بها للإنتاج | 8 جيجابايت | 4 جيجابايت | |
| عدد الحاويات | ~13 | ~19 | |
| المنفذ الرئيسي | 8000 (Kong API Gateway) | 80 / 443 (Traefik) | |
| بيئة تشغيل الدوال | Deno فقط | 30+ بيئة تشغيل | |
| الرخصة | Apache 2.0 | BSD 3-Clause | |
| Storage | متوافق مع S3 + سياسات RLS | أذونات مرنة للفريق/المستخدم | |
| Realtime | PostgreSQL logical replication | أحداث المستندات والملفات | |
| Auth — مزودو OAuth2 | 15+ مزود | 30+ مزود | |
| Auth — مصادقة الهاتف | نعم (SMS OTP) | نعم (SMS OTP) | |
| دوال بلا خادم | Deno حصرياً | 30+ بيئة تشغيل (Node, Python, PHP…) |
نشر Supabase على خادم VPS
الخطوة 1 — استنساخ المستودع وضبط الإعدادات
git clone --depth 1 https://github.com/supabase/supabase
cd supabase/docker
cp .env.example .envافتح .env وعيّن POSTGRES_PASSWORD وJWT_SECRET وANON_KEY وSERVICE_ROLE_KEY.
الخطوة 2 — تشغيل المنظومة
docker compose up -dيستغرق الإقلاع الكامل 60 إلى 120 ثانية. انتظر حتى تكون جميع الحاويات في حالة healthy.
الخطوة 3 — التحقق
ادخل إلى Studio على http://IP_VPS:3000. اختبر استدعاء API بسيطاً:
curl http://IP_VPS:8000/rest/v1/ -H "apikey: YOUR_ANON_KEY"الخطوة 4 — التحقق من الإقلاع
تحقق أن جميع الخدمات في حالة healthy:
docker compose psاوصل إلى Supabase Studio على http://IP_VPS:3000 وأنشئ مشروعك الأول.
نشر Appwrite على خادم VPS
الخطوة 1 — تشغيل المُثبِّت التفاعلي
docker run -it --rm \
--volume /var/run/docker.sock:/var/run/docker.sock \
--volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \
--entrypoint="install" \
appwrite/appwrite:latestالخطوة 2 — انتظار ترحيلات قاعدة البيانات
عند أول إقلاع، تُنفّذ Appwrite ترحيلات MariaDB. تستغرق 2 إلى 5 دقائق. لا تُعد تشغيل الحاويات.
الخطوة 3 — إنشاء حساب المسؤول
ادخل إلى http://نطاقك/console. أنشئ حساب المسؤول الأول، ثم أول مشروع.
الخطوة 4 — إنشاء حساب المسؤول
اوصل إلى http://نطاقك/console وأنشئ حساب المسؤول الأول، ثم مشروعك الأول. عند أول إقلاع، تُنفّذ Appwrite ترحيلات قاعدة البيانات التي تستغرق 2 إلى 5 دقائق — لا تُعد تشغيل الحاويات.
المصادقة — مقارنة مزودي الهوية وضبط OAuth
تدعم كلتا المنصتَين المصادقة بالبريد الإلكتروني/كلمة المرور ورقم الهاتف. تدعم Appwrite أكثر من 30 مزود OAuth2 مقابل 15+ لـSupabase.
تستخدم Supabase GoTrue كخدمة مصادقة. تُدمج Appwrite خدمة Auth الخاصة بها القابلة للضبط من لوحة التحكم.
الدوال البلا خادم — Deno مقابل 30+ بيئة تشغيل
تعمل دوال Supabase Edge Functions حصرياً على Deno. تدعم دوال Appwrite أكثر من 30 بيئة تشغيل: Node.js وPython وPHP وRuby وGo وDart والمزيد. هذه المرونة ميزة كبيرة للفرق المتعددة اللغات.
الوقت الفعلي وتخزين الملفات
الوقت الفعلي. تستخدم كلتا المنصتَين WebSockets. تكشف Supabase عن تغييرات PostgreSQL في الوقت الفعلي عبر خدمة Realtime (استنساخ منطقي). يغطي Appwrite Realtime أحداث المستندات والملفات والفرق.
التخزين. تستخدم Supabase Storage واجهة برمجية متوافقة مع S3 مع سياسات وصول RLS من PostgreSQL.
Appwrite: خطأ 503 عند أول تشغيل — انتظر اكتمال الترحيلات
إذا أظهرت لوحة تحكم Appwrite خطأ 503، لا تُعد تشغيل الحاويات. تنفّذ Appwrite ترحيلات قاعدة بيانات MariaDB تلقائياً عند أول إقلاع، وتستغرق العملية من 2 إلى 5 دقائق. تابع التقدم بـ docker compose logs -f appwrite.
Supabase: خطأ 502 من Kong عند الإقلاع — سلوك طبيعي
قد يُعيد Kong أخطاء 502 خلال الـ 30-60 ثانية الأولى بعد docker compose up -d. هذا سلوك طبيعي ومؤقت. انتظر حتى يُظهر docker compose ps جميع الحاويات في حالة healthy.
دليل الاختيار — Supabase أم Appwrite لمشروعك؟
اختر Supabase إذا: تطبيقك موجّه للويب أولاً، فريقك يُتقن PostgreSQL، أو تحتاج واجهة REST API تتولد تلقائياً من مخطط قاعدة البيانات.
اختر Appwrite إذا: تبني تطبيقاً محمولاً عبر منصات متعددة، أو فريقك يعمل بلغات متعددة ويريد اختيار بيئة تشغيل الدوال.
الأخطاء الشائعة وحلولها
- Supabase — 502 Bad Gateway (Kong): انتظر 30-60 ثانية. إذا استمر:
docker compose restart kong. - Supabase — Realtime
could not connect to the database:docker compose restart realtime. - Appwrite — 503 عند الإقلاع: الترحيلات جارية (2-5 دقائق). لا تُعد تشغيل الحاويات.
- Appwrite —
docker compose down -v: خطر — يحذف جميع البيانات. لا تشغّله في الإنتاج. - Supabase — PostgREST
relation not found: شغّلdocker compose exec meta pgrst-reloadلإعادة تحميل ذاكرة التخزين المؤقت للمخطط. - Appwrite —
SMTP_HOSTغير مضبوط: أضف_APP_SMTP_HOSTفي.envوأعد التشغيل.
الخلاصة : منصتان ممتازتان وفلسفتان مختلفتان
تُعدّ Supabase وAppwrite كلتاهما خيارات قوية لاستضافة BaaS مفتوح المصدر على خادم VPS. تتألق Supabase بعمقها في PostgreSQL وواجهة API التلقائية ولوحة Studio المتطورة. تتميز Appwrite بخفة وزنها النسبية وتنوع بيئات تشغيل الدوال وجودة حزم تطوير التطبيقات المحمولة.