دليل النشر

نشر تطبيق Strapi على خادم VPS

انشر على VPS Cloud →

التطوير8 دقيقة قراءة

نشر تطبيق Strapi على خادم VPS

يُعدّ Strapi نظام إدارة المحتوى headless مفتوح المصدر المرجعي بلغة Node.js. وتمنحك استضافته ذاتيًا على خادم VPS الملكية الكاملة لمحتواك وقاعدة بياناتك وملفّاتك المرفوعة، دون الاعتماد على Strapi Cloud. إليك كيفية نقله إلى بيئة الإنتاج مع PostgreSQL وDocker ووكيل عكسي.

لماذا الاستضافة الذاتية لـ Strapi على خادم VPS

صُمّم Strapi ليُستضاف ذاتيًا: فهو تطبيق Node.js يعرض واجهة API من نوع REST أو GraphQL ولوحة إدارة بلغة React. ونشره على خادم VPS خاص بك، بدلًا من Strapi Cloud، يعني أنّ بياناتك ووسائطك المرفوعة وقاعدتك تبقى تحت سيطرتك الحصرية، وهو ما يُعدّ في الغالب متطلّبًا لمشاريع العملاء أو لقيود توطين البيانات. تختار قاعدتك (يُنصح بـ PostgreSQL في بيئة الإنتاج بدلًا من SQLite)، وتخزين وسائطك (قرص محلّي أو S3)، ولست مقيّدًا بحصص المُدخلات أو مستخدمي الإدارة في العروض المُدارة. كما يتيح لك خادم VPS تشغيل Strapi وواجهته الأمامية المستهلِكة على البنية التحتية نفسها.

الفوائد الملموسة

  • ملكية كاملة للمحتوى وقاعدة بيانات PostgreSQL والوسائط المرفوعة
  • اختيار حرّ لقاعدة البيانات والتخزين (قرص محلّي أو حاوية S3 متوافقة)
  • لا حصّة للمُدخلات أو أنواع المحتوى أو المستخدمين الإداريين
  • واجهتا REST وGraphQL مكشوفتان على نطاقك، دون وسيط ولا حدّ معدّل مفروض
  • إضافات المجتمع قابلة للتثبيت بحرّية، دون مصادقة من منصّة
  • توطين البيانات تحت السيطرة، مفيد للامتثال ومتطلّبات العملاء

المتطلّبات العتادية والبرمجية

يستهلك Strapi موارد أكثر من أطر الواجهة الأمامية لأنّ بناء لوحة إدارة React ثقيل. استهدف خادم VPS بمعالجين افتراضيين (2 vCPU) و4 جيجابايت من الذاكرة كحدّ أدنى: قد يستهلك بناء واجهة الإدارة أكثر من 2 جيجابايت من الذاكرة وحده، ومن الشائع أن يفشل البناء بسبب نفاد الذاكرة (OOM) على خادم أقلّ من اللازم. أمّا في بيئة الإنتاج المستقرّة، فيعمل التطبيق بعد ذلك بارتياح. ثبّت Docker وDocker Compose، وهيّئ قاعدة بيانات PostgreSQL 16 (يُفضّل في حاويتها الخاصة). وجّه cms.mydomain.com نحو عنوان IP الخاص بخادم VPS. جهّز 15 جيجابايت من القرص لـ node_modules والملفّات المرفوعة والنسخ الاحتياطية.

النشر خطوة بخطوة

01

إعداد قاعدة بيانات الإنتاج

تخلَّ عن SQLite في بيئة الإنتاج. في config/database.js، اضبط عميل postgres واقرأ بيانات الاعتماد من البيئة (DATABASE_HOST وDATABASE_NAME وDATABASE_USERNAME وDATABASE_PASSWORD). يُعدّ PostgreSQL أكثر متانةً بكثير تحت الحمل المتزامن.

02

تعريف أسرار الإنتاج

يتطلّب Strapi عدّة مفاتيح: APP_KEYS وAPI_TOKEN_SALT وADMIN_JWT_SECRET وJWT_SECRET وTRANSFER_TOKEN_SALT. أنشئها عشوائيًا وضعها في ملفّ .env لا يُودَع (commit) أبدًا. دون هذه المفاتيح، سترفض لوحة الإدارة البدء في وضع الإنتاج.

03

بناء واجهة الإدارة

شغّل NODE_ENV=production npm run build لتصريف لوحة إدارة React. إذا نفدت ذاكرة البناء، فزِد مؤقّتًا مساحة التبديل (swap) لخادم VPS أو ابنِ صورة Docker على آلة أقوى قبل دفعها.

04

التنسيق باستخدام Docker Compose

صرّح عن خدمة strapi (مبنيّة على node:20) وخدمة db (postgres:16) في docker-compose.yml، مربوطتين بشبكة داخلية. ركّب وحدة تخزين لـ public/uploads كي تبقى الوسائط بعد عمليات إعادة النشر. ابدأ بـ docker compose up -d.

05

وضع Nginx كوكيل عكسي

اضبط مضيفًا افتراضيًا نحو http://127.0.0.1:1337 (المنفذ الافتراضي لـ Strapi). ارفع client_max_body_size إلى 50M أو أكثر للسماح برفع وسائط كبيرة، وإلّا ستفشل عمليات الرفع بخطأ 413.

06

تفعيل HTTPS وتحديد عنوان URL العام

شغّل certbot --nginx -d cms.mydomain.com، ثمّ أدخِل URL=https://cms.mydomain.com في إعداد خادم Strapi. هذا العنوان لا غنى عنه كي تعمل روابط الوسائط ولوحة الإدارة بشكل صحيح خلف الوكيل.

أفرغ تخزين الوسائط إلى حاوية S3 متوافقة بفضل مزوّد الرفع @strapi/provider-upload-aws-s3: لم تعُد ملفّاتك المرفوعة تُضخّم قرص خادم VPS وتبقى بعد أيّ إعادة إنشاء للحاوية، دون وحدة تخزين لنسخها احتياطيًا. أمّا لقاعدة البيانات، فأتمِت pg_dump يوميًا عبر مهمّة cron على خادم VPS وانسخ النسخة خارج الخادم. وأخيرًا، شغّل Strapi بـ NODE_ENV=production حتمًا: يُعيد وضع التطوير تصريف لوحة الإدارة أثناء التشغيل ويكشف Content-Type Builder، وهو أمر يجب تجنّبه في بيئة الإنتاج.

استضف نظام Strapi الخاص بك باستقلالية تامّة

يوفّر خادم VPS Cloud من ServOrbit الذاكرة اللازمة لبناء لوحة إدارة Strapi وبيئة Docker + PostgreSQL جاهزة للاستخدام، للحفاظ على الملكية الكاملة لمحتواك وبياناتك.

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

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