اگر با فریمورک Laravel کار میکنید، میدانید که این فریمورک قدرتمند PHP به یک بستر میزبانی حرفهای و بهینه نیاز دارد. یک VPS ساده ممکن است جواب دهد، اما برای اجرای بهینه—بهخصوص در محیط Production—باید سرور خود را هوشمندانه انتخاب و تنظیم کنید. در این راهنما، همه چیز را قدمبهقدم توضیح میدهیم.
Laravel روی چه سروری اجرا شود؟
پاسخ کوتاه: یک VPS لینوکسی با حداقل ۲ گیگ RAM. اما ماجرا به این سادگیها هم نیست.
Laravel از نسخه ۸ به بعد نیازمندیهای بیشتری پیدا کرده است. اگر پروژه شما از ویژگیهای مدرنی مثل Eloquent ORM با روابط پیچیده، Queue Jobs، Broadcasting، و caching استفاده میکند—و مطمئناً استفاده میکند—باید منابع کافی در اختیار داشته باشید.
پیشنهاد ما: هاست اشتراکی را فراموش کنید. Laravel روی هاست اشتراکی نه تنها کند است، بلکه بسیاری از قابلیتهای کلیدی—مثل Queue Worker، Horizon، Scheduler و حتی برخی پکیجها—غیرقابل استفاده میشوند. VPS تنها انتخاب منطقی است.
چه CPU و RAM برای Laravel لازم است؟
نیاز سختافزاری به عوامل مختلفی بستگی دارد، اما این راهنمای کلی را در نظر بگیرید:
| محیط | CPU | RAM | فضای ذخیرهسازی |
|---|---|---|---|
| توسعه (Development) | ۱-۲ هسته | ۲ گیگ | ۲۰ گیگ SSD |
| Production — پروژه کوچک | ۲ هسته | ۴ گیگ | ۴۰ گیگ NVMe |
| Production — پروژه متوسط | ۴ هسته | ۶-۸ گیگ | ۶۰ گیگ NVMe |
| Production — پروژه بزرگ / SaaS | ۸+ هسته | ۱۶+ گیگ | ۱۲۰+ گیگ NVMe |
چرا RAM اینقدر مهم است؟ چون PHP-FPM برای هر worker حدود ۵۰-۱۰۰ مگابایت RAM مصرف میکند، Redis برای cache به RAM جداگانه نیاز دارد، MySQL/PostgreSQL هم سهم خودش را میخواهد، و composer dependencies هم حجم قابل توجهی از RAM را در زمان build اشغال میکنند.
قانون طلایی: همیشه ۱ گیگ بیشتر از چیزی که فکر میکنید نیاز دارید، انتخاب کنید. Laravel در لحظات اوج ترافیک—مثلاً وقتی چند Queue Job همزمان پردازش میشوند—میتواند RAM را کاملاً اشغال کند.
تنظیمات PHP-FPM برای Laravel
PHP-FPM قلب تپنده سرور Laravel شماست. تنظیمات پیشفرض برای یک سایت ساده خوب است، اما برای Laravel باید آن را بهینه کنید.
فایل www.conf در مسیر /etc/php/8.3/fpm/pool.d/ را با این مقادیر تنظیم کنید:
pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm.max_requests = 500
نکات کلیدی:
pm.max_childrenرا بر اساس RAM موجود تنظیم کنید. فرمول: (RAM - ۱GB برای سیستم) ÷ ۷۰MBpm.max_requests = 500از memory leak تدریجی جلوگیری میکند—هر worker بعد از ۵۰۰ درخواست ریستارت میشود- همیشه PHP 8.3 را نصب کنید—نسبت به PHP 8.1 حدود ۳۰٪ سریعتر است
Redis — فقط cache نیست
Redis در Laravel فقط برای کش کردن کاربرد ندارد. از Redis استفاده کنید برای:
- Session Driver: جلسات کاربران در Redis به مراتب سریعتر از file driver است
- Queue Driver: صفهای Laravel روی Redis سریع و قابل اعتماد هستند—مخصوصاً با Laravel Horizon
- Cache Driver: کش کردن نتایج کوئریها، partial views و API responses
حداقل ۲۵۶ مگابایت RAM به Redis اختصاص دهید. برای پروژههای متوسط، ۵۱۲ مگابایت تا ۱ گیگابایت.
MySQL یا PostgreSQL؟
هر دو عالی کار میکنند، اما تفاوتهایی دارند:
- MySQL 8.0: سریعتر برای read-heavy applicationها، پشتیبانی گسترده، ابزارهای مدیریتی بیشتر. انتخاب اول اکثر پروژههای Laravel
- PostgreSQL 16: قدرتمندتر برای کوئریهای پیچیده، JSON operations،全文 جستجو و full-text search. اگر کار تحلیلی انجام میدهید، PostgreSQL انتخاب بهتری است
تنظیم innodb_buffer_pool_size (برای MySQL) یا shared_buffers (برای PostgreSQL) را حدود ۷۰٪ از RAM موجود تنظیم کنید.
Queue Worker و Supervisor
بدون Queue Worker، Laravel شما ناقص است. ارسال ایمیل، پردازش فایل، تولید گزارش و همگامسازی با APIهای خارجی—همه باید در صف انجام شوند.
از Supervisor برای مدیریت Queue Workerها استفاده کنید:
[program:laravel-worker]
command=php /var/www/html/artisan queue:work --sleep=3 --tries=3 --max-time=3600
numprocs=2
autostart=true
autorestart=true
چند worker نیاز دارید؟ برای یک پروژه معمولی، ۲-۴ worker کافی است. تعداد را بر اساس حجم jobs تنظیم کنید.
Laravel Horizon
اگر از Redis برای صف استفاده میکنید، Horizon را حتماً نصب کنید. Horizon یک پنل مدیریتی فوقالعاده برای مانیتورینگ صفها، workerها و jobهای failed است.
Horizon خودش یک daemon process است که باید با Supervisor مدیریت شود. مصرف RAM اضافی آن حدود ۵۰-۱۰۰ مگابایت است.
Nginx — تنظیمات ضروری
Nginx انتخاب اول برای Laravel است. Apache هم کار میکند، اما Nginx سریعتر، سبکتر و مدرنتر است.
تنظیمات کلیدی Nginx برای Laravel:
server {
listen 80;
server_name example.com;
root /var/www/html/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
نکته امنیتی مهم: فقط پوشه public باید از وب قابل دسترس باشد. پوشههای storage، vendor و .env هرگز نباید از بیرون دیده شوند.
SSL — چرا و چگونه؟
برای Laravel، SSL فقط یک گزینه نیست—ضرورت است. به این دلایل:
- لاگین کاربران و فرمهای ثبتنام باید روی HTTPS باشند
- CSRF Protection لاراول نیاز به HTTPS دارد (در تنظیمات session)
- مرورگرها سایتهای HTTP را «ناامن» نشان میدهند
از Certbot (Let’s Encrypt) برای دریافت SSL رایگان استفاده کنید. نصب و تنظیم آن روی Ubuntu کمتر از ۵ دقیقه طول میکشد.
جمعبندی: سرور مناسب Laravel شما
برای یک پروژه استاندارد Laravel—یک SaaS، پنل مدیریت یا API—این پیکربندی پیشنهادی ماست:
- CPU: ۴ هسته
- RAM: ۸ گیگابایت
- ذخیرهسازی: ۶۰ گیگابایت NVMe SSD
- سیستمعامل: Ubuntu 22.04 LTS
- PHP: 8.3 با PHP-FPM بهینهشده
- وب سرور: Nginx + SSL رایگان
- دیتابیس: MySQL 8.0 یا PostgreSQL 16
- کش و صف: Redis + Horizon + Supervisor
👈 سرور مناسب برای اجرای Laravel را انتخاب کنید
مقالات مرتبط
- برای سایت من چه سروری لازم است؟ — راهنمای گامبهگام انتخاب سرور
- VPS چیست؟ راهنمای کامل برای مبتدیان — آشنایی با مفهوم سرور مجازی
- راهنمای انتخاب توزیع لینوکس برای VPS — Ubuntu یا AlmaLinux؟