دليل النشر

نشر تطبيق Symfony على VPS

انشر على VPS Cloud →

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

نشر تطبيق Symfony على VPS

Symfony هو إطار عمل PHP للتطبيقات المؤسسية الصعبة، المبني حول مكوّنات قابلة لإعادة الاستخدام وحاوية خدمات قوية. ونشره على VPS يمنحك التحكم في PHP-FPM وOPcache وقاعدة البيانات والتخزين المؤقت، لتحقيق أداء لا تتيحه سوى قلّة من خدمات الاستضافة المشتركة.

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

يتطلب Symfony إعداد PHP دقيقًا: الامتدادات (intl وopcache وpdo)، وإصدار PHP، وإعدادات الذاكرة، والصلاحيات على مجلدي var/cache وvar/log. وغالبًا ما تفرض الاستضافة المشتركة إصدارات مجمّدة وتعطّل امتدادات أساسية، في حين تُخفي منصة PaaS طبقة PHP-FPM. على VPS، تختار PHP 8.2/8.3، وتفعّل وتضبط OPcache وpreloading لتحقيق مكاسب أداء كبيرة، وتضبط PHP-FPM (عدد العمليات، pm.max_children) وفق حِملك. كما تتحكم في MySQL أو PostgreSQL وفي ذاكرة Redis المؤقتة للجلسات ولـDoctrine. ولتطبيق Symfony في الإنتاج، يحدّد هذا المستوى من التحكم زمن الاستجابة بشكل مباشر.

فوائد ملموسة لاستضافة Symfony ذاتيًا

  • اختيار إصدار PHP وجميع الامتدادات المطلوبة دون قيود.
  • تفعيل OPcache وpreloading في Symfony لتقليل أزمنة الاستجابة بشكل ملحوظ.
  • ضبط دقيق لـPHP-FPM (pm.max_children، workers) وفق ذاكرة RAM المتاحة.
  • قاعدة بيانات MySQL/PostgreSQL وذاكرة Redis المؤقتة تحت سيطرتك، مع نسخ احتياطية مجدولة.
  • تنفيذ أوامر console ومكوّن Messenger (workers) بشكل متواصل عبر systemd أو Supervisor.
  • عمليات نشر ذرّية (atomic) باستخدام روابط رمزية، دون انقطاع الخدمة.

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

يعمل تطبيق Symfony مع قاعدة بيانات بأريحية على 2 vCPU و2 غيغابايت من ذاكرة RAM؛ وارتفع إلى 4 غيغابايت إذا أضفت Redis أو Elasticsearch أو workers الخاصة بـMessenger. ثبّت PHP 8.2+ مع FPM والامتدادات intl وopcache وpdo_mysql وmbstring وxml، إضافةً إلى Composer 2. يعمل Nginx كواجهة أمامية، وMySQL 8 أو PostgreSQL كقاعدة بيانات. ويمكنك تعبئة كل شيء في حاويات باستخدام Docker (صورة php:8.3-fpm) أو التثبيت الأصلي. يلزم نطاق مُوجَّه نحو VPS لأجل TLS. جهّز بيئة APP_ENV=prod وتوليد الأصول عبر AssetMapper أو Webpack Encore.

نشر Symfony خطوة بخطوة

01

تجهيز الخادم والشيفرة

عبر SSH، ثبّت PHP-FPM 8.3 والامتدادات وComposer (أو Docker). استنسخ المستودع وأنشئ .env.local مع APP_ENV=prod وAPP_SECRET وDATABASE_URL. نفّذ composer install --no-dev --optimize-autoloader.

02

تصريف الذاكرة المؤقتة والأصول

نفّذ php bin/console cache:clear --env=prod ثم cache:warmup. صرِّف الأصول باستخدام php bin/console asset-map:compile (AssetMapper) أو npm run build (Encore). تحقّق من الصلاحيات على var/.

03

ترحيل قاعدة البيانات

نفّذ php bin/console doctrine:migrations:migrate --no-interaction لتطبيق المخطط (schema). واضبط اتصال Redis للجلسات ولذاكرة Doctrine المؤقتة إذا كان تطبيقك بحاجة إلى ذلك.

04

إعداد Nginx وPHP-FPM

وجّه جذر Nginx نحو public/، ووجّه جميع الطلبات إلى index.php عبر try_files، ومرّر ملفات .php إلى مقبس PHP-FPM باستخدام fastcgi_pass. اضبط pm.max_children وفق ذاكرة RAM وفعّل OPcache في php.ini.

05

التأمين بشهادة SSL

احصل على شهادة Let's Encrypt عبر Certbot لـyourdomain.com، وافرض HTTPS وفعّل التجديد التلقائي. واحظر الوصول المباشر إلى مجلدات config/ وsrc/ وvar/ على مستوى Nginx.

06

الإشراف على workers الخاصة بـMessenger

إذا كنت تستخدم مكوّن Messenger، فعرّف خدمة systemd أو Supervisor تنفّذ php bin/console messenger:consume async بشكل متواصل، مع إعادة تشغيل تلقائية. وجدْوِل مهمة cron لـmessenger:stop-workers بعد النشر من أجل إعادة تحميل الشيفرة الجديدة.

فعّل preloading في Symfony بتوجيه opcache.preload نحو var/cache/prod/App_KernelProdContainer.preload.php في ملف php.ini الخاص بك. عندئذٍ تُحمَّل حاوية الخدمات وأصناف إطار العمل مرة واحدة في الذاكرة عند بدء تشغيل PHP-FPM، ما يزيل جزءًا كبيرًا من تكلفة الـautoloading في كل طلب ويقلّل زمن الاستجابة في الإنتاج بشكل ملحوظ.

ضع تطبيق Symfony الخاص بك في الإنتاج

يوفّر VPS السحابي من ServOrbit قالبًا مع PHP-FPM وNginx وقاعدة بيانات وشهادات SSL تلقائية، جاهزًا لاستضافة تطبيقات Symfony المُحسَّنة بـOPcache.

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

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