دليل النشر

استضافة Supabase على خادم VPS في 2026

انشر على VPS Cloud ←

دليل عملي

استضافة Supabase على خادم VPS في 2026

قواعد البيانات11 دقيقةً للقراءةعدد الخطوات: 16

‌Supabase هو البديل مفتوح المصدر لـ ‌Firebase المبني على ‌PostgreSQL: قاعدة بيانات، ومصادقة، وتخزين، وedge functions، وواجهة برمجية مُولّدة تلقائيًا. منذ أغسطس 2026، انتقلت الحزمة المُستضافة ذاتيًا من ‌Kong إلى **‌Envoy Gateway** كوكيل ‌API داخلي. استضافته ذاتيًا على خادم ‌VPS تمنحك خلفية كاملة دون حد أقصى للمشاريع ولا فوترة حسب الاستخدام، مع بياناتك في قاعدة ‌Postgres الخاصة بك.

المحتويات· لماذا تستضيف Supabase ذاتيًا على VPS1/14
  1. 01لماذا تستضيف Supabase ذاتيًا على VPS
  2. 02المزايا الملموسة لـ Supabase المستضاف ذاتيًا
  3. 03متطلبات الأجهزة والبرامج
  4. 04نشر Supabase المستضاف ذاتيًا بـ Docker
  5. 05Supabase أم Appwrite: أيّ BaaS مستضاف ذاتيًا تختار؟
  6. 06انشر من المكدس الرسمي لـ Supabase، لا من compose محلي الصنع
  7. 07النسخ الاحتياطي التلقائي لنسختك
  8. 08تخفيف الحزمة: خدمة التحليلات
  9. 09الانتقال من Kong إلى Envoy: ما الذي يتغيّر، ولمن يُعدّ كاسرًا
  10. 10الانتقال إلى Envoy دون كسر بوّابتك
  11. 11Kong وEnvoy نقطة بنقطة
  12. 12CVE-2026-31813: ثغرة OIDC في GoTrue — حدِّث الآن
  13. 13تحديث GoTrue لإصلاح CVE-2026-31813
  14. 14تعطيل Social Auth مؤقتًا إن تعذَّر التحديث فورًا

لماذا تستضيف Supabase ذاتيًا على VPS

Supabase ليس صندوقًا أسود: إنه مجموعة من الخدمات مفتوحة المصدر (PostgreSQL، وGoTrue للمصادقة، وPostgREST للواجهة البرمجية، وRealtime، وStorage، وKong كبوابة) مُنسَّقة معًا. تُفوتر النسخة السحابية لكل مشروع ولكل مستخدم نشط شهريًا، وتوقف المشاريع المجانية الخاملة. باستضافة Supabase ذاتيًا على خادم VPS، تحصل على backend-as-a-service متكامل دون هذه القيود، مع وصول مباشر إلى PostgreSQL للهجرات والإضافات (pgvector، PostGIS) والضبط. مثالي لوكالة تستضيف تطبيقات عدة لعملاء، أو SaaS ناشئ يريد التحكم في التكاليف، أو أي مشروع يستلزم سيادة البيانات. تدير التحديثات والنسخ الاحتياطية بنفسك، مقابل حرية كاملة.

المزايا الملموسة لـ Supabase المستضاف ذاتيًا

  • backend متكامل: Postgres والمصادقة والتخزين وRealtime وواجهة REST/GraphQL في مكدس واحد.
  • وصول مباشر إلى PostgreSQL الأساسي: هجرات SQL وإضافات وسياسات RLS بلا حدود.
  • بلا إيقاف مؤقت أو فوترة لكل مستخدم نشط شهريًا.
  • Studio مضمَّن: واجهة ويب للإدارة لإدارة الجداول والمصادقة والـبuckets.
  • إضافات الذكاء الاصطناعي عبر 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، واسم نطاق يشير إلى الخادم (مثلاً api.myapp.com) لعرض البوابة بصيغة HTTPS، وبروكسي عكسي مثل Caddy أو Traefik أو Nginx لإدارة SSL. خطِّط أيضًا لتوليد أسرار قوية (JWT_SECRET، مفاتيح anon وservice_role).

نشر Supabase المستضاف ذاتيًا بـ Docker

  1. استنساخ المستودع الرسمي وإعداد البيئة

    احصل على مجلد docker من مستودع Supabase، وانسخ .env.example إلى .env، ثم أنشئ أسرارًا فريدة: POSTGRES_PASSWORD، وJWT_SECRET، ومفاتيح ANON_KEY/SERVICE_ROLE_KEY المشتقة من JWT. لا تنشر أبدًا بالقيم الافتراضية.

  2. تهيئة عناوين URL وكلمة مرور Studio

    في .env، عيِّن SITE_URL وAPI_EXTERNAL_URL وSUPABASE_PUBLIC_URL بنطاقك، وحمِّ Supabase Studio بـDASHBOARD_USERNAME وDASHBOARD_PASSWORD: يمنح Studio وصولًا إداريًا كاملًا لمشروعك.

  3. تشغيل المكدس

    ابدأ بـdocker compose up -d، ثم تابع بدء تشغيل الخدمات عبر docker compose ps. تستغرق التهيئة الأولى لـPostgres وتطبيق هجرات داخلية دقيقة إلى دقيقتين؛ تحقق من غياب الأخطاء في docker compose logs.

  4. وضع بروكسي عكسي مع SSL

    ضع Caddy أو Traefik أمام Kong (المنفذ 8000 للبوابة) لعرض واجهتك البرمجية بصيغة HTTPS. يحصل Caddy على شهادات Let's Encrypt ويجدِّدها تلقائيًا: كتلة بسيطة myapp.com { reverse_proxy localhost:8000 } تكفي. لا تكشف Postgres (5432) للعموم أبدًا.

  5. تفعيل سياسات RLS

    اتصل بـStudio، وأنشئ جداولك، ثم فعِّل Row Level Security على كل منها وعرِّف سياساتك. بدون RLS، يكشف مفتاحك anon جميع بياناتك: هذا الإعداد الواجب قبل عرض أي شيء.

  6. نسخ Postgres والتخزين احتياطيًا

    جدوِل pg_dump يوميًا لقاعدة البيانات، وأرشف حجم التخزين (مجلدات الملفات) إلى تخزين خارجي. اختبر الاستعادة الكاملة على VPS تجريبي قبل الاعتماد عليها في الإنتاج.

Supabase أم Appwrite: أيّ BaaS مستضاف ذاتيًا تختار؟

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

المعيارSupabaseAppwrite
قاعدة البياناتPostgreSQL أصيل، SQL كاملMariaDB داخليًا، واجهة وثيقة/مجموعة
نموذج البياناتعلائقي، RLS Postgresوثائق ومجموعات، صلاحيات بقاعدة
واجهة برمجية تلقائيةREST (PostgREST) + GraphQLREST وGraphQL ومجموعات SDK متعددة
المصادقةGoTrue وOAuth وروابط سحريةمصادقة مدمجة وOAuth وفرق وJWT
بصمة المواردأثقل (~10 حاويات)معتدلة، مكدس أكثر إحكامًا
البحث الشعاعي/الذكاء الاصطناعيأصيل عبر pgvectorغير أصيل، يجب الاستعانة بخارجي
الأنسب لـتطبيقات علائقية، RAG، SQL متقدمتطبيقات جوال/ويب موجَّهة للوثائق
منحنى التعلممريح إن أتقنت SQLسريع لمطوري الواجهة الأمامية/الجوال

حدِّث Supabase بحذر: إذ إن الصور مُرقَّمة في docker-compose.yml، نفِّذ دائمًا pg_dump كاملًا ولقطة للخادم قبل docker compose pull && docker compose up -d. بعض التحديثات تمس مخطط الخدمات الداخلية. للإنتاج، عزل Postgres على حجم مخصص عالي IOPS، وفعِّل pgvector منذ البداية إن خططت للبحث الدلالي: إضافته لاحقًا يستلزم هجرة مخطط.

انشر من المكدس الرسمي لـ Supabase، لا من compose محلي الصنع

قد يبدو إغراؤك في كتابة docker-compose مُختزَل بالخدمات التي تحتاجها وحسب. في الواقع، هذا يتعطّل: تنفِّذ صورة supabase/postgres نصها الخاص للهجرة (migrate.sh) الذي يُنشئ الأدوار الأساسية (supabase_admin، authenticator، supabase_auth_admin...) ومخطط المصادقة بالكامل، وتتوقع وجود ملفات SQL لتهيئة Supabase مرفوعة كملفات مع توسيع المتغيرات وقت التشغيل. لا يمكن لـcompose داخلي مستقل استنساخ ذلك (يُفسِّر Docker Compose المتغيرات داخل الإعدادات الداخلية، تاركًا مخطط المصادقة نصف مهاجَر وGoTrue يفشل بـ'must be owner of function auth.uid()'). المقاربة الصلبة — تلك التي يستخدمها ServOrbit — هي نشر ملفات Docker الرسمية لـSupabase، مثبَّتة على إصدار محدد، وترك migrate.sh يُشغِّل الإقلاع تمامًا كما يتوقعه upstream.

النسخ الاحتياطي التلقائي لنسختك

لا ينشئ نشر ‌Supabase عبر ‌Docker أي نسخة احتياطية من تلقاء نفسه، وهذه أكثر ثغرة يبلّغ عنها من يستضيفونه ذاتيًا. تتكامل آليتان. الأولى، pg_dump، تنتج نسخة منطقية كاملة: شغّلها من المضيف عبر ‌cron، واكتبها إلى وحدة تخزين منفصلة عن وحدة قاعدة البيانات، واحتفظ بعدة أجيال منها. والثانية، أرشفة ‌WAL، تسجّل كل معاملة وتتيح الرجوع إلى لحظة محددة بدل الرجوع إلى آخر نسخة. الأولى تكفي معظم المشاريع، والثانية تصبح ضرورية حين يكون فقدان يوم من الكتابات غير مقبول. وفي الحالتين، لا تساوي النسخة الاحتياطية شيئًا قبل أن تثبت الاستعادة صحتها: أنشئ نسخة فارغة وأعد تشغيل ملف النسخ داخلها قبل أن تحتاج إليها فعلًا.

تخفيف الحزمة: خدمة التحليلات

يتضمّن ملف ‌Docker الرسمي خدمة ‌Logflare للتحليلات الداخلية في ‌Supabase باسم analytics. وهي ليست ضرورية لواجهة البرمجة ولا للمصادقة ولا للتخزين، بل هي أداة مراقبة. على خادم افتراضي محدود الموارد، كثيرًا ما تظهر بحالة unhealthy دون أن يتأثر بقية المكوّنات، وينتهي كثير من المستضيفين ذاتيًا إلى تعطيلها في ملف docker-compose.yml. قِس استهلاكها الفعلي لديك عبر docker stats قبل أن تقرر: إن كانت مراقبتك تمرّ أصلًا عبر أداة خارجية فلن تخسر شيئًا، وإن كنت تعتمد على سجلّاتها فلا تعطّلها إلا بعد توصيل بديل.

الانتقال من Kong إلى Envoy: ما الذي يتغيّر، ولمن يُعدّ كاسرًا

في أسبوع 9 أغسطس 2026 جعلت Supabase من Envoy بوّابة الـ API الافتراضية للتنصيبات المستضافة ذاتيًا، وانتقل Kong إلى طبقة اختيارية. كان Envoy متاحًا منذ عدّة إصدارات عبر docker-compose.envoy.yml — الذي تغيّر هو الافتراضي.

في docker-compose.yml صارت الخدمة تُسمّى api-gw والحاوية supabase-envoy، لكن الاسم الشبكي البديل kong باقٍ: الخدمات التي تنادي البوّابة بهذا الاسم تستمر في العمل. ويبقى منفذ HTTP هو 8000، ويُضبط عبر API_GW_HTTP_PORT، فلا يحتاج وسيطك العكسي Caddy أو Nginx إلى أي تعديل.

⚠️ تصف Supabase هذا التغيير بأنه كاسر لجزء من المستضيفين ذاتيًا، وعليك أن تعرف إن كنت منهم. ثلاث حالات: كنت تعتمد على منفذ HTTPS 8443 المدمج في Kong — لم يعد يُشحن افتراضيًا، وإنهاء TLS صار عبر docker-compose.caddy.yml أو docker-compose.nginx.yml؛ كان لديك ملف volumes/api/kong.yml مخصّص — يجب نقل المسارات والإضافات إلى إعدادات Envoy في volumes/api/envoy/؛ أو كانت سكربتاتك تشير إلى البوّابة باسم الخدمة. وفي الحالات الثلاث يمكنك البقاء على Kong: sh run.sh config add kong.

الانتقال إلى Envoy دون كسر بوّابتك

  1. اعرف على أيّ شيء تعمل

    نفّذ docker compose ps. وجود حاوية supabase-kong يعني أنك ما زلت على Kong، وsupabase-envoy يعني أن التحويل تمّ. تحقّق أيضًا مما إذا كان volumes/api/kong.yml مختلفًا عن نسخة المستودع — هذا الملف هو ما يقرّر إن كانت الهجرة ستكلّفك عملًا.

  2. خُذ نسخة احتياطية قبل لمس ملف compose

    نفّذ pg_dump كاملًا، ولقطة للخادم إن أتاحها مزوّدك. تبديل البوّابة لا يمسّ مخطّط PostgreSQL، لكنه يغيّر مسار دخول كل الطلبات: التراجع السريع أفضل من التشخيص تحت الضغط.

  3. قرّر: النقل أم البقاء

    إن كان kong.yml لديك هو ملف المستودع فلا شيء لتنقله. وإن كان يحوي مساراتك أو إضافاتك، فأمامك طريقان: ترجمتها إلى إعدادات Envoy ضمن volumes/api/envoy/، أو البقاء على Kong عبر sh run.sh config add kong ريثما تفعل. البقاء قرار مشروع لا فشل.

  4. اسحب ملف compose الجديد وأعد التشغيل

    اسحب أحدث نسخة من مجلّد docker في مستودع Supabase الرسمي، ثم docker compose down && docker compose up -d. تحقّق من وصول api-gw إلى حالة healthy ومن استجابة الـ API على المنفذ 8000.

  5. أعد TLS إن كنت تعتمد على منفذ 8443 في Kong

    لم يعد منفذ HTTPS المدمج يُشحن. أضف إنهاء TLS عبر docker-compose.caddy.yml أو docker-compose.nginx.yml، أو دع وسيطك العكسي الحالي يتولّاه أمام المنفذ 8000. هذه هي النقطة الأكثر كسرًا، ولا تظهر إلا عند أول نداء HTTPS مباشر.

  6. تحقّق من التخزين والروابط الموقَّعة

    جرّب تنزيلًا من حاوية خاصة عبر رابط موقَّع مسبقًا. إن حصلت على 403 بعد التحويل، فانظر أولًا في إعادة كتابة ترويسة Host وفي قيمة الرابط العام لخدمة التخزين لديك: هناك يقع الفرق بين البوّابتين.

Kong وEnvoy نقطة بنقطة

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

الجانبKong (قبل أغسطس 2026)Envoy (الافتراضي منذ ذلك الحين)
الخدمة في `docker-compose.yml``kong``api-gw` — مع الإبقاء على `kong` كاسم شبكي بديل
الحاوية`supabase-kong``supabase-envoy`
منفذ HTTP80008000 — عبر `API_GW_HTTP_PORT`
منفذ HTTPS المدمج8443**أُزيل** — TLS عبر `docker-compose.caddy.yml` أو `.nginx.yml`
الإعدادات`volumes/api/kong.yml``volumes/api/envoy/` (YAML مُصدَّر بإصدارات)
العودة إلى Kong`sh run.sh config add kong`

CVE-2026-31813: ثغرة OIDC في GoTrue — حدِّث الآن

أُفصح في 2026 عن ثغرة في GoTrue (خدمة المصادقة في Supabase) تحت المرجع CVE-2026-31813. تكمن الثغرة في التحقق من الـclaim iss أثناء مصادقة OIDC: كان JWT موقَّع من مزوِّد هوية خارجي (Apple أو Azure) بـiss مختلف عن المُهيَّأ في GoTrue يُقبَل في ظروف إعداد معينة.

عمليًا، يستطيع مهاجم يتحكم في مزوِّد OIDC مسجَّل في التطبيق العميل إصدار رموز صالحة لمستخدمين عشوائيين على نسخة Supabase الخاصة بك. النطاق الفعلي يعتمد على الإعداد: تتأثر فقط النسخ التي تحتوي على مزوِّد OAuth خارجي مفعَّل واحد على الأقل (Social Auth). النسخ التي تستخدم المصادقة بالبريد الإلكتروني/كلمة المرور أو الروابط السحرية حصرًا غير مكشوفة.

التصحيح مضمَّن في Supabase Auth (GoTrue) 2.185.0. للتحقق من إصدارك: docker compose exec auth gotrue version. إن كان إصدار gotrue أدنى من 2.185.0، حدِّث فورًا.

تحديث GoTrue لإصلاح CVE-2026-31813

  1. تحديد الإصدار الحالي

    من مجلد مكدس Supabase الخاص بك: docker compose exec auth gotrue version. إن أظهرت النتيجة إصدارًا < 2.185.0، فنسختك مكشوفة لـCVE-2026-31813. سجِّل أيضًا إصدار المكدس العام: grep 'SUPABASE_VERSION' .env (إن ثبَّته) أو docker compose images | grep supabase.

  2. النسخ الاحتياطي قبل التحديث

    قبل أي تحديث، انسخ قاعدة البيانات: docker compose exec db pg_dumpall -U postgres > /tmp/supabase-backup-$(date +%F).sql. تحديث GoTrue لا يستلزم هجرة مخطط PostgreSQL، لكن النسخة الاحتياطية المسبقة تبقى قاعدة قبل أي تغيير في إصدار بيئة الإنتاج.

  3. التحديث إلى Supabase Auth 2.185.0 أو أحدث

    في docker-compose.yml، حدِّث علامة صورة supabase/gotrue إلى v2.185.0 أو أحدث، أو إن كنت تتبع المكدس الكامل، اسحب آخر إصدار متوافق: docker compose pull && docker compose up -d auth. تحديث GoTrue وحده لا يستلزم إعادة تشغيل الخدمات الأخرى. تحقق بـdocker compose exec auth gotrue version من تفعيل الإصدار الجديد.

  4. التحقق من مصادقة OIDC

    بعد التحديث، اختبر تدفق مصادقة كاملًا مع كل مزوِّد OIDC مُهيَّأ (Google وGitHub...): تسجيل دخول، خروج، إعادة دخول. تحقق في سجلات GoTrue (docker compose logs auth) من غياب رسائل خطأ متعلقة بالتحقق من iss في ظروف الاستخدام الطبيعي.

تعطيل Social Auth مؤقتًا إن تعذَّر التحديث فورًا

إن تعذَّر التحديث الفوري (نافذة صيانة مطلوبة)، يمكنك تقليص سطح الهجوم بتعطيل مزوِّدي OAuth الخارجيين مؤقتًا في Studio Supabase: Authentication ← Providers، ثم تعطيل كل مزوِّد اجتماعي. تبقى مصادقة البريد الإلكتروني/كلمة المرور تعمل. هذا حل مؤقت: لا يُصلِح الثغرة، يُقلِّص فقط سطح الهجوم ريثما تُعدّ التحديث.

استضِف خلفية ‌Supabase الخاصة بك ذاتيًا

يستضيف خادم ‌ServOrbit Cloud VPS مع قالب ‌Docker المُهيّأ مسبقًا وذاكرة ‌RAM سخية حزمة ‌Supabase بالكامل: Postgres وAuth وStorage وAPI عبر HTTPS.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة