دليل النشر

‎Supabase‎ مقابل ‎Appwrite‎ : مقارنة ‎BaaS‎ مفتوح المصدر

انشر على VPS Cloud ←

مقارنة

مقارنات

‎Supabase‎ مقابل ‎Appwrite‎ : مقارنة ‎BaaS‎ مفتوح المصدر

‎Supabase‎ و‎Appwrite‎ هما أشهر منصتَي ‎BaaS‎ مفتوحتَي المصدر لاستبدال ‎Firebase‎ دون الاعتماد على سحابة احتكارية. كلتاهما تُنشَران بـ‎Docker‎ على خادم ‎VPS‎، لكنهما تختلفان في البنية التقنية ومتطلبات الموارد وحالات الاستخدام المثلى.

14 دقيقةً للقراءةعدد الخطوات: 8
المحتويات· ‏ما هو ‎BaaS‎ ولماذا الاستضافة الذاتية؟1/14
  1. 01‏ما هو ‎BaaS‎ ولماذا الاستضافة الذاتية؟
  2. 02‏‎Supabase‎ مقابل ‎Appwrite‎ — مقارنة بـ 12 معياراً
  3. 03‏نشر ‎Supabase‎ على خادم ‎VPS‎
  4. 04‏نشر ‎Appwrite‎ على خادم ‎VPS‎
  5. 05‏المصادقة — مقارنة مزودي الهوية وضبط ‎OAuth‎
  6. 06‏الدوال البلا خادم — ‎Deno‎ مقابل 30+ بيئة تشغيل
  7. 07الوقت الفعلي وتخزين الملفات
  8. 08‏Appwrite: لوحة التحكم غير متاحة عند أول تشغيل — امنحها الوقت
  9. 09‏‎Supabase‎: خطأ 502 من البوابة عند الإقلاع — سلوك طبيعي
  10. 10‏‎Appwrite 2.0‎: الترحيل من 1.x — الإجراء والتغييرات الجذرية
  11. 11‏‎Supabase 0.8.0‎: من ‎Kong‎ إلى ‎Envoy‎ — التأثير والترحيل
  12. 12‏دليل الاختيار — ‎Supabase‎ أم ‎Appwrite‎ لمشروعك؟
  13. 13الأخطاء الشائعة وحلولها
  14. 14‏الخلاصة : منصتان ممتازتان وفلسفتان مختلفتان

‏ما هو ‎BaaS‎ ولماذا الاستضافة الذاتية؟

‏تجمع خدمة Backend-as-a-Service (BaaS) في منتج واحد كل ما يحتاجه التطبيق الحديث من جهة الخادم: قاعدة بيانات، ومصادقة، وتخزين ملفات، ودوال بلا خادم، وتواصل في الوقت الفعلي. نشرت Firebase هذا النموذج، لكن طبيعتها المغلقة تطرح مشكلات في التكلفة والامتثال لـ RGPD والارتباط بمزوّد واحد.

‏تمنحك الاستضافة الذاتية لـ BaaS مفتوح المصدر على خادم VPS خاص بك سيطرة تامة على بياناتك، وتُلغي الرسوم لكل طلب، وتتيح احترام متطلبات إقامة البيانات. في المقابل تقع على عاتقك إدارة البنية: التحديثات والنسخ الاحتياطية والمراقبة وتحجيم الخادم. ‎Supabase‎ و‎Appwrite‎ هما الحلّان الأكثر نضجًا في هذا المجال.

‏‎Supabase‎ مقابل ‎Appwrite‎ — مقارنة بـ 12 معياراً

مرّر الجدول أفقيًا

المعيار‎Supabase‎‎Appwrite‎
قاعدة البيانات‎PostgreSQL‎PostgreSQL افتراضيًا منذ 2.0 (مع إتاحة MariaDB وMongoDB)
الذاكرة الدنيا4 ‏جيجابايت4 ‏جيجابايت (+ 2 جيجابايت swap)
الذاكرة الموصى بها للإنتاج8 ‏جيجابايت أو أكثرغير منشورة (4 جيجابايت حدًّا أدنى)
عدد الحاويات~11 (13 مع Logflare وVector)~18
المنفذ الرئيسي‏8000 (‎Envoy‎ منذ 0.8.0، ‎Kong‎ قبله)‏80 / 443 (‎Traefik‎)
منفذ الإدارة‏8000 (Studio عبر البوابة، بمصادقة أساسية)‏80 / لوحة تحكم (‎Traefik‎)
الخدمات المدمجة‏‎Auth, PostgREST, Realtime, Storage, Edge Functions, Studio‎‏‎Auth, Databases, Storage, Functions, Messaging, Realtime‎
‏مزودو ‎Auth‎‏15+ مزود‏30+ مزود
بيئة تشغيل الدوال‎Deno‎ ‏فقط‏30+ بيئة تشغيل (‎Node, Python, PHP, Go, Dart, Ruby, Bun…‎)
‏حزم ‎SDK‎ للعميل‏‎JS, Python, Swift, Kotlin, Flutter, C#‎‏‎JS, iOS, Android, Flutter, React Native, Web‎
الوقت الفعلي‏‎WebSocket‎ عبر خدمة ‎Realtime‎‏‎WebSocket‎ عبر ‎Appwrite Realtime‎
الرخصة‎Apache 2.0‎‎BSD 3-Clause‎

‏نشر ‎Supabase‎ على خادم ‎VPS‎

  1. ‏الخطوة 1 — متطلبات الخادم

    ‏جهّز خادم VPS بما لا يقل عن 4 جيجابايت ذاكرة عشوائية (8 جيجابايت في الإنتاج)، مع Docker وDocker Compose. لا تكشف المنفذ 8000 للبوابة، الذي يخدم الواجهة البرمجية وStudio معًا، عبر HTTP على الإنترنت: ضع أمامه وسيطًا عكسيًا بـ HTTPS (Caddy أو Nginx) على المنفذ 443، وانشر البوابة على العنوان المحلي (API_GW_HTTP_PORT=127.0.0.1:8000 في .env) لأن Docker يتجاوز قواعد ufw. يفتح مُجمِّع Supavisor أيضًا المنفذين 5432 و6543: إن لم تحتج اتصالات خارجية فأضف قبلهما 127.0.0.1: في docker-compose.yml.

  2. ‏الخطوة 2 — استنساخ المستودع وضبط الإعدادات

    ‏استنسخ المستودع بـ git clone --depth 1 https://github.com/supabase/supabase، انسخ محتوى supabase/docker إلى مجلد مشروع وانسخ .env.example إلى .env. لا تُشغّل أبدًا بالقيم النموذجية: ولّد الأسرار والمفاتيح بـ sh utils/generate-keys.sh ثم sh utils/add-new-auth-keys.sh، وتحقق على الأقل من POSTGRES_PASSWORD وJWT_SECRET (32 حرفًا على الأقل) وANON_KEY وSERVICE_ROLE_KEY وDASHBOARD_PASSWORD (الدخول إلى Studio) والعناوين العامة (SUPABASE_PUBLIC_URL وAPI_EXTERNAL_URL وSITE_URL).

  3. ‏الخطوة 3 — تشغيل المنظومة

    ‏نفّذ docker compose up -d (أو sh run.sh start، المكافئ لـ docker compose up -d --wait). مع ‎Supabase 0.8.0+‎، يخدم ‎Envoy‎ (وليس ‎Kong‎) المنفذ 8000. انتظر حتى تكون جميع الحاويات في حالة healthy.

  4. ‏الخطوة 4 — التحقق

    ‏ادخل إلى Studio عبر البوابة على http://IP_VPS:8000 (أو نطاقك بـ HTTPS خلف الوسيط العكسي) باسم المستخدم DASHBOARD_USERNAME وكلمة المرور DASHBOARD_PASSWORD. اختبر استدعاء API بسيطًا بـ curl http://IP_VPS:8000/functions/v1/hello -H "apikey: YOUR_PUBLISHABLE_KEY": استجابة الدالة النموذجية تؤكد أن البوابة توجّه الطلبات بشكل صحيح.

‏نشر ‎Appwrite‎ على خادم ‎VPS‎

  1. ‏الخطوة 1 — متطلبات الخادم

    ‏تتطلب Appwrite على الأقل نواتين و4 جيجابايت ذاكرة و2 جيجابايت swap. حاوياتها الـ 18 تقريبًا (الإعداد الافتراضي) تتضمن Traefik كوسيط عكسي. افتح المنفذين 80 و443.

  2. ‏الخطوة 2 — تشغيل المُثبِّت التفاعلي

    ‏نفّذ docker run -it --rm --publish 20080:20080 --volume /var/run/docker.sock:/var/run/docker.sock --volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw --entrypoint="install" appwrite/appwrite:2.7.1 مع تثبيت الإصدار المنشور بدل latest. يفتح المعالج في المتصفح على المنفذ 20080: يطلب النطاق ويولّد المفاتيح وملف docker-compose.yml وينشئ حساب المسؤول. أغلق المنفذ 20080 بعد انتهاء التثبيت.

  3. ‏الخطوة 3 — انتظار اكتمال الإقلاع

    ‏عند أول إقلاع، قد تحتاج الحاويات بضع دقائق لتصبح جاهزة، وقد تُعيد لوحة التحكم خطأً في الأثناء. تابع بـ docker compose ps وdocker compose logs -f appwrite. أما الترحيلات فلا تخص إلا ترقية نسخة قائمة، وتُشغَّل يدويًا بـ docker compose exec appwrite migrate.

  4. ‏الخطوة 4 — الدخول إلى لوحة التحكم

    ‏بعد انتهاء التثبيت، افتح نطاقك (أو عنوان IP الخادم) في المتصفح وادخل إلى لوحة التحكم بحساب المسؤول الذي أنشأه المعالج، ثم أنشئ أول مشروع.

‏المصادقة — مقارنة مزودي الهوية وضبط ‎OAuth‎

‏تدعم كلتا المنصتَين المصادقة بالبريد الإلكتروني/كلمة المرور ورقم الهاتف. تدعم ‎Appwrite‎ أكثر من 30 مزود ‎OAuth2‎ مقابل 15+ لـ‎Supabase‎.

‏ملاحظة مهمة لـ‎Appwrite 2.0‎: أفادت المشكلة رقم #13547، المفتوحة في سبتمبر 2026، بأن إعادة تعيين كلمة المرور والدعوات عبر البريد الإلكتروني لا تعمل في نسخ Appwrite 2.0 المستضافة ذاتيًا. وأُغلقت دون إصدار تصحيحي مُسمّى، إذ لم يتمكن الفريق من إعادة إنتاج المشكلة. اختبر هذه المسارات في بيئة اختبار قبل ترحيل إنتاجك.

‏الدوال البلا خادم — ‎Deno‎ مقابل 30+ بيئة تشغيل

‏تعمل دوال ‎Supabase Edge Functions‎ حصرياً على ‎Deno‎. تدعم دوال ‎Appwrite‎ أكثر من 30 بيئة تشغيل: ‎Node.js‎ و‎Python‎ و‎PHP‎ و‎Ruby‎ و‎Go‎ و‎Dart‎ والمزيد. هذه المرونة ميزة كبيرة للفرق المتعددة اللغات.

‏ملاحظة ‎Appwrite 2.0‎: منذ الإصدار 2.1.0 لم يعد المتغيران _APP_LOGGING_PROVIDER و_APP_LOGGING_CONFIG_REALTIME يُقرآن، ويمر تسجيل الأخطاء عبر _APP_LOGGING_CONFIG وحده، الذي لا يقبل إلا DSN خاصًا بـ Sentry: يُرفض عند الإقلاع أي DSN لـ LogOwl أو Raygun أو AppSignal. احذف المتغيرين القديمين من .env وتحقق من هذا الـ DSN قبل الترقية.

الوقت الفعلي وتخزين الملفات

‏الوقت الفعلي. تستخدم كلتا المنصتين WebSockets. تكشف Supabase تغييرات PostgreSQL في الوقت الفعلي عبر خدمة Realtime، التي تشترك في إشعارات قاعدة البيانات (logical replication). أما Appwrite Realtime فيغطي أحداث المستندات والملفات والفرق، وهو أقل ارتباطًا بقاعدة البيانات الأساسية وبالتالي أكثر قابلية للنقل.

‏نقطة انتباه مع Supabase: قد تبدأ خدمة Realtime أحيانًا قبل أن تصبح PostgreSQL جاهزة تمامًا، فيظهر الخطأ could not connect to the database. إعادة تشغيل الحاوية realtime تحل المشكلة عادةً.

‏التخزين. تعتمد Supabase Storage على واجهة برمجية متوافقة مع S3، وتتيح تعريف سياسات وصول RLS مباشرة من PostgreSQL. وتقدم Appwrite Storage نظام أذونات حسب الفريق والمستخدم، أبسط في الإعداد.

‏Appwrite: لوحة التحكم غير متاحة عند أول تشغيل — امنحها الوقت

‏إذا أظهرت لوحة تحكم Appwrite خطأً أو بقيت غير متاحة في الدقائق الأولى، لا تُعد تشغيل الحاويات عشوائيًا: قد يستغرق الإقلاع الأول بضع دقائق. تابع التقدم بـ docker compose ps وdocker compose logs -f appwrite. أما عند الترقية فلا شيء يُرحَّل تلقائيًا: بعد النسخ الاحتياطي، نفّذ docker compose exec appwrite migrate ودعه يكتمل.

‏‎Supabase‎: خطأ 502 من البوابة عند الإقلاع — سلوك طبيعي

‏قد تُعيد بوابة ‎API‎ (‎Kong‎ حتى 0.7.x، ‎Envoy‎ منذ 0.8.0) أخطاء 502 خلال العشرات الأولى من الثواني بعد docker compose up -d. هذا سلوك طبيعي ومؤقت. انتظر حتى يُظهر docker compose ps جميع الحاويات في حالة healthy، وإن استمر الخطأ فراجع docker compose logs rest وdocker compose logs api-gw (اسم الخدمة kong قبل 0.8.0).

‏‎Appwrite 2.0‎: الترحيل من 1.x — الإجراء والتغييرات الجذرية

‏أُعلن عن Appwrite 2.0 للاستضافة الذاتية في 7 سبتمبر 2026 (المصدر: https://appwrite.io/changelog/entry/2026-09-07). يُعدّ تحديثًا رئيسيًا: تصبح PostgreSQL قاعدة البيانات الافتراضية للتثبيتات الجديدة، مع بقاء MariaDB وMongoDB متاحتين. أما النسخة القائمة على MariaDB فتبقى على MariaDB بعد الترقية: لا يحوّل الإصدار 2.0 بياناتك إلى PostgreSQL.

مسار الترحيل الإلزامي. يجب ترقية أي نسخة أقدم من 1.9.6 إلى 1.9.6 أولًا (من 1.8.x عبر 1.9.5 وترحيلها)؛ وابتداءً من 1.9.6 تكون الترقية إلى أحدث 2.x مباشرة. الإجراء الرسمي:
1. خذ نسخة احتياطية كاملة: docker compose down ثم انسخ مجلد appwrite (docker-compose.yml و.env) وكذلك أحجام Docker المسمّاة التي تحمل القاعدة والملفات.
2. عند الحاجة رقّ إلى 1.9.6 أولًا: من المجلد الأب لـ appwrite أعد تشغيل أمر التثبيت مع --entrypoint="upgrade" والصورة appwrite/appwrite:1.9.6.
3. من مجلد appwrite نفّذ الترحيل: docker compose exec appwrite migrate.
4. رقّ إلى 2.x: أعد أمر upgrade بصورة أحدث إصدار منشور (appwrite/appwrite:2.7.1 في نوفمبر 2026).
5. نفّذ docker compose exec appwrite migrate مجددًا — لا تُوقف الحاويات أثناء العملية — ثم تحقق بـ docker ps | grep appwrite/appwrite من أن جميع الحاويات بالإصدار نفسه.

التغييرات الجذرية. أفادت المشكلة #13547، التي أُغلقت في سبتمبر 2026 دون تصحيح مُسمّى، بتعطل إعادة تعيين كلمة المرور والدعوات في الإصدار 2.0 المستضاف ذاتيًا. اختبر هذه المسارات في بيئة اختبار قبل الترحيل. في 2.1.0 لم يعد _APP_LOGGING_PROVIDER و_APP_LOGGING_CONFIG_REALTIME يُقرآن، ولا يقبل _APP_LOGGING_CONFIG إلا DSN خاصًا بـ Sentry. لا يوجد إجراء موثق للتراجع: وحدها الاستعادة الكاملة من النسخة الاحتياطية تتيح العودة إلى 1.x.

‏‎Supabase 0.8.0‎: من ‎Kong‎ إلى ‎Envoy‎ — التأثير والترحيل

‏صدر ‎Supabase docker-compose 0.8.0‎ في 11 أغسطس 2026 (‏المصدر: https://github.com/supabase/supabase/blob/master/docker/CHANGELOG.md)، ويستبدل ‎Kong‎ بـ‎Envoy‎ كبوابة ‎API‎ افتراضية (يبقى Kong متاحًا اختياريًا عبر sh run.sh config add kong). هذا التغيير شفاف لمعظم عمليات النشر، لكنه يُزيل مستمع ‎TLS‎ على المنفذ 8443.

ما الذي يتغير. إذا كان الوسيط العكسي أو سكربتات التحقق من الصحة تُنفّذ طلبات ‎HTTPS‎ مباشرة إلى https://ip:8443، فستفشل هذه الطلبات بعد الترقية. يجب إسناد إنهاء ‎TLS‎ حصراً إلى الوسيط العكسي الأمامي.

خطوات الترحيل. ابحث عن أي مرجع للمنفذ 8443 في سكربتات النشر وفحوص الصحة وقواعد جدار الحماية. استبدلها باستدعاءات على المنفذ 8000 عبر ‎HTTP‎ من الشبكة الداخلية. رقّ بالإجراء الرسمي (sh update.sh ثم sh run.sh pull && sh run.sh recreate): لا يكفي docker compose pull وحده لأن ملف docker-compose.yml نفسه يتغير. ثم تحقق من أن docker compose ps يُظهر الخدمة api-gw (الحاوية supabase-envoy)، التي حلّت محل خدمة kong، في حالة healthy.

‏دليل الاختيار — ‎Supabase‎ أم ‎Appwrite‎ لمشروعك؟

‏يتوقف الاختيار بين المنصتين أساسًا على نوع تطبيقك وكفاءات فريقك.

‏اختر Supabase إذا: كان تطبيقك موجّهًا للويب أولًا، أو كان فريقك يُتقن PostgreSQL، أو كنت تنتقل من Firebase وتريد الحفاظ على قاعدة علائقية متينة، أو تحتاج واجهة REST تتولد تلقائيًا من مخطط قاعدة بياناتك (PostgREST).

‏اختر Appwrite إذا: كنت تطوّر تطبيقًا محمولًا (iOS/Android) بحاجات متعددة المنصات، أو كان فريقك يعمل بلغات عدة ويريد اختيار بيئة تشغيل دواله، أو تفضّل واجهة إدارة أسهل دون معرفة عميقة بـ SQL.

‏على خادم VPS بذاكرة 4 جيجابايت، أنت عند الحد الأدنى الموثق للمنصتين (4 جيجابايت لـ Supabase، و4 جيجابايت مع 2 جيجابايت swap لـ Appwrite)؛ وتوصي Supabase بـ 8 جيجابايت أو أكثر في الإنتاج.

‏في 2026، المنصتان في تحوّل متسارع. تجعل Appwrite 2.0 من PostgreSQL القاعدة الافتراضية للتثبيتات الجديدة — مما يقلّص الميزة التاريخية لـ Supabase في هذه النقطة — بينما تحدّث Supabase بوابتها بـ Envoy. إن كنت تخطط لتثبيت جديد، فالمنصتان متكافئتان في مسألة قاعدة البيانات. وإن كنت ترحّل تثبيتًا قائمًا (يبقى على MariaDB من جهة Appwrite)، فخصّص نافذة صيانة واختبر المسارات الحرجة (المصادقة والبريد والدوال) قبل أي تحديث رئيسي.

الأخطاء الشائعة وحلولها

  • ‏‎Supabase‎ — 502 ‎Bad Gateway‎: انتظر حتى تصبح جميع الخدمات healthy. إذا استمر: docker compose restart api-gw ‏(0.8.0+) أو docker compose restart kong ‏(إصدارات أقدم).
  • ‏‎Supabase‎ — ‎Realtime could not connect to the database‎: docker compose restart realtime.
  • ‏‎Supabase‎ — ‎JWT‎ غير صالح: تحقق أن ANON_KEY وSERVICE_ROLE_KEY موقّعان بنفس JWT_SECRET في .env.
  • ‏‎Supabase 0.8.0‎ — المنفذ 8443 غير متاح: مستمع ‎Kong TLS‎ حُذف مع ‎Envoy‎. احذف الاستدعاءات المباشرة للمنفذ 8443 وأسند ‎TLS‎ إلى الوسيط العكسي الأمامي.
  • ‏Appwrite — لوحة التحكم غير متاحة عند الإقلاع: قد يستغرق الإقلاع الأول بضع دقائق. راجع docker compose ps والسجلات قبل إعادة تشغيل أي شيء.
  • ‏‎Appwrite‎ — docker compose down -v: خطر — يحذف جميع البيانات. لا تشغّله في الإنتاج.
  • ‏‎Appwrite‎ — timeout الدوال: ‎cold start‎ لبيئة غير مُستخدمة قد يتجاوز الحد الافتراضي. ارفع الحد في إعدادات الدالة (Settings > Timeout، بحد أقصى 900 ثانية).
  • ‏Appwrite 2.x — ترحيل متعثر: يجب أن تمر أي نسخة أقدم من 1.9.6 بالإصدار 1.9.6 أولًا، مع تنفيذ docker compose exec appwrite migrate في كل مرحلة. تخطي هذه الخطوة يعرّض الترحيل للفشل: استعد نسختك الاحتياطية وابدأ من جديد.
  • ‏Appwrite 2.0 — إعادة تعيين كلمة المرور/الدعوات: المشكلة #13547 أُبلغ عنها في الاستضافة الذاتية وأُغلقت دون تصحيح مُسمّى. اختبر هذه المسارات قبل الإنتاج.
  • ‏Appwrite 2.1.0 — متغيرات متروكة: لم يعد _APP_LOGGING_PROVIDER و_APP_LOGGING_CONFIG_REALTIME يُقرآن؛ احذفهما من .env واترك في _APP_LOGGING_CONFIG DSN خاصًا بـ Sentry فقط، فهو الوحيد المقبول عند الإقلاع.

‏الخلاصة : منصتان ممتازتان وفلسفتان مختلفتان

‏تُعدّ ‎Supabase‎ و‎Appwrite‎ كلتاهما خيارات قوية لاستضافة ‎BaaS‎ مفتوح المصدر على خادم ‎VPS‎. تتألق ‎Supabase‎ بعمقها في ‎PostgreSQL‎ وواجهة ‎API‎ التلقائية ولوحة ‎Studio‎ المتطورة. تتميز ‎Appwrite‎ بتنوع بيئات تشغيل الدوال وجودة حزم تطوير التطبيقات المحمولة.

‏شهدت المنصتان في 2026 تحديثات هيكلية: تجعل Appwrite 2.0 (سبتمبر 2026) من PostgreSQL القاعدة الافتراضية للتثبيتات الجديدة، وتنتقل Supabase 0.8.0 (أغسطس 2026) من Kong إلى Envoy. خطّط لعمليات الترحيل بنسخ احتياطية كاملة وبيئات اختبار والتحقق من المسارات الحرجة — لا سيما مصادقة البريد الإلكتروني لـ‎Appwrite 2.0‎. ‏تبدأ الخطط من 99 درهم/شهر على ‏ServOrbit.

استضف منصة ‎BaaS‎ الخاصة بك على ‎VPS‎ تتحكم فيه

سواء اخترت ‎Supabase‎ أو ‎Appwrite‎، كلتا المنصتَين تستحقان خادم ‎VPS‎ سريعاً ومستقراً مع نسخ احتياطية منتظمة. تبدأ خطط ‎VPS‎ السحابية لدينا من 4 جيجابايت ذاكرة عشوائية مع لقطات عند الطلب.