كيف ترفع مشروع Laravel على سيرفر VPS في 2026: Nginx وPHP-FPM والطوابير والنشر بلا توقف

يعمل Laravel بشكل جيد على الاستضافة المشتركة للمشاريع الصغيرة، لكن بمجرد أن تحتاج إلى الطوابير والمهام المجدولة وRedis والـ WebSockets أو حتى أداء يمكن توقعه، يصبح الـ VPS الخطوة الطبيعية التالية. يعرض هذا الدليل طريقة نظيفة وجاهزة للإنتاج لنشر تطبيق Laravel على سيرفر Linux VPS: مكونات النظام، وإعداد سيرفر الويب، والـ Queue Workers، والجدولة، وطريقة إصدار لا توقف موقعك.
مكونات النظام
نظام التشغيل: Ubuntu 24.04 LTS أو Debian 12.
سيرفر الويب: Nginx أمام PHP-FPM (إصدار PHP 8.3 أو أحدث).
قاعدة البيانات: MySQL 8 أو PostgreSQL 16 على السيرفر نفسه للتطبيقات الصغيرة، أو على سيرفر منفصل مع النمو.
الكاش والطوابير: Redis.
TLS: شهادات Let's Encrypt عبر Certbot، أو Caddy كواجهة أمامية.
لمعظم تطبيقات Laravel تُعد 2 vCPU و4 جيجابايت رام بداية جيدة، وزد الذاكرة أولًا إذا كنت تشغّل الطوابير وقاعدة البيانات على الجهاز نفسه. سيرفر Linux VPS بتخزين NVMe وصلاحيات root كاملة يناسب ذلك تمامًا.
الخطوة 1: تجهيز السيرفر
أنشئ مستخدمًا للنشر، وعطّل الدخول بكلمة المرور عبر SSH، وفعّل جدارًا ناريًا يسمح فقط بـ SSH وHTTP وHTTPS، وثبّت PHP-FPM مع الإضافات التي يحتاجها Laravel: mbstring وxml وcurl وzip وbcmath وintl، إضافة إلى مشغّل قاعدة البيانات وredis. ثم ثبّت Composer على مستوى النظام.
الخطوة 2: إعداد Nginx
يجب أن يشير المجلد الجذر إلى مجلد public في Laravel، لا إلى جذر المشروع، وإلا قد يصبح ملف .env قابلًا للتحميل.
server {
listen 80;
server_name app.example.com;
root /var/www/app/current/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.(?!well-known) {
deny all;
}
}شغّل Certbot لإضافة HTTPS مع تحويل تلقائي من HTTP.
الخطوة 3: استخدم هيكل مجلدات قائمًا على الإصدارات
بدلًا من سحب الكود الجديد داخل المجلد العامل، انشر كل إصدار في مجلد مستقل، وبدّل رابطًا رمزيًا (Symlink) عندما يكون جاهزًا:
/var/www/app/releases/<timestamp>لكل إصدار منشور./var/www/app/sharedلملف.envومجلدstorage، مع ربطهما داخل كل إصدار./var/www/app/currentرابط رمزي إلى الإصدار النشط.
تبديل الرابط الرمزي عملية فورية، فلا يرى الزوار موقعًا نصف منشور، والتراجع لا يتطلب أكثر من توجيه الرابط إلى الإصدار السابق.
الخطوة 4: خطوات النشر
cd /var/www/app/releases/2026-10-03
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache
ln -sfn /var/www/app/releases/2026-10-03 /var/www/app/current
sudo systemctl reload php8.3-fpm
php artisan queue:restartتخزين الإعدادات والمسارات والواجهات مؤقتًا يمنح سرعة ملحوظة في الإنتاج. وتذكّر أنه بعد config:cache لا تعمل الدالة env() إلا داخل ملفات الإعداد، لذا اقرأ الإعدادات في كودك عبر config().
الخطوة 5: شغّل الـ Queue Workers تحت مدير عمليات
الـ Workers عمليات طويلة التشغيل ويجب إعادة تشغيلها تلقائيًا إذا تعطلت. استخدم systemd أو Supervisor لتشغيل php artisan queue:work redis --sleep=3 --tries=3 --max-time=3600. خيار --max-time يجعل كل Worker يخرج ويعاد تشغيله دوريًا، ما يمنع التضخم البطيء في الذاكرة. وبعد كل نشر، يطلب الأمر php artisan queue:restart من الـ Workers إنهاء المهمة الحالية وتحميل الكود الجديد.
الخطوة 6: فعّل الجدولة
تحتاج جدولة Laravel إلى سطر cron واحد لمستخدم النشر:
* * * * * cd /var/www/app/current && php artisan schedule:run >> /dev/null 2>&1الخطوة 7: الصلاحيات
يحتاج مستخدم سيرفر الويب صلاحية الكتابة على storage وbootstrap/cache فقط. كل ما عدا ذلك يجب أن يملكه مستخدم النشر ويكون للقراءة فقط بالنسبة لـ PHP-FPM، ما يحد من الضرر إذا استُغلت ثغرة يومًا ما.
الخطوة 8: إعدادات الإنتاج المهمة
APP_ENV=productionوAPP_DEBUG=false، فوضع التصحيح في الإنتاج يكشف الإعدادات وتفاصيل الأخطاء.فعّل OPcache في PHP للحصول على مكسب كبير في الأداء.
استخدم Redis للكاش والجلسات والطوابير بدلًا من مشغّلات الملفات أو قاعدة البيانات.
أرسل السجلات إلى ملف يومي مع التدوير، أو إلى خدمة سجلات خارجية.
الخطوة 9: النسخ الاحتياطي والمراقبة
انسخ قاعدة البيانات يوميًا عبر mysqldump أو pg_dump، ومعها مجلد storage/app إذا كان المستخدمون يرفعون ملفات، واحفظ النسخ خارج السيرفر. راقب رابطًا حقيقيًا في التطبيق من الخارج، ونبّه عند فشل المهام وطول الطابور، لا عند توقف السيرفر فقط. وإذا كنت تستضيف على Cloud VPS من IM HOST، فالنسخة الاحتياطية التلقائية المجانية للسيرفر كل 72 ساعة تضيف طبقة حماية ثانية فوق نسخك الخاصة.
استضافة مشتركة أم VPS لـ Laravel؟
الاستضافة المشتركة مناسبة لمواقع Laravel الصغيرة التي لا تستخدم طوابير. أما عندما تحتاج إلى Workers في الخلفية أو Redis أو إعدادات PHP مخصصة أو نشر عبر SSH، فانتقل إلى VPS. توفر IM HOST الخيارين، مع نقل مجاني إذا كنت قادمًا من مزود آخر. قارن خطط Linux VPS وCloud VPS، أو ابدأ على الاستضافة المشتركة ثم قم بالترقية عند الحاجة.
المزيد من مدونتنا
اكتشف المزيد من الأدلة العملية ورؤى الخدمات من فريق IM Host.
عرض كل المقالات