لاراول را که انتخاب میکنید، یعنی روی کیفیت حساب باز کردهاید. این فریمورک سالهاست در رتبه اول محبوبیت بین توسعهدهندگان PHP نشسته و بیخود هم نیست: معماری MVC منظم، ORM قدرتمند Eloquent، سیستم صفبندی، مسیریابی هوشمند، ابزارهای امنیتی داخلی و اکوسیستمی که هر روز گستردهتر میشود. اما وقتی نوبت استقرار میرسد، خیلیها تازه میفهمند که لاراول نیازمندیهای خودش را دارد و اگر هاست درستی انتخاب نکنید، با خطاهایی روبرو میشوید که ساعتها وقت میبرد.
این راهنما را نوشتهایم تا همه آنچه باید درباره هاست لاراول بدانید یکجا داشته باشید: از نیازمندیهای فنی تا تنظیمات production، از رایجترین اشتباهات تا بهینهسازیهایی که واقعاً فرق میکنند.
نیازمندیهای فنی لاراول
قبل از هر چیز، بدانید چه میخواهید. هر نسخه لاراول حداقل PHP مشخصی میطلبد:
- لاراول ۱۱: PHP 8.2 یا بالاتر
- لاراول ۱۰: PHP 8.1 یا بالاتر
- لاراول ۹: PHP 8.0 یا بالاتر
- لاراول ۸: PHP 7.3 یا بالاتر
توصیه میکنیم همیشه از جدیدترین نسخه سازگار با پروژهتان استفاده کنید. نسخههای قدیمیتر پچهای امنیتی کمتری دریافت میکنند و یک روز همین بیتوجهی گران تمام میشود.
افزونههای PHP ضروری
لاراول به این افزونهها نیاز دارد. خبر خوب این است که بیشتر هاستهای مناسب همهشان را دارند، اما قبل از خرید چک کنید:
- BCMath، Ctype، cURL، DOM
- Fileinfo، JSON، Mbstring
- OpenSSL، PDO (با درایور دیتابیس مناسب)
- Tokenizer، XML، Zip
Composer و SSH: دو ضرورت
Composer مدیر پکیج PHP است و بدون آن نمیتوانید وابستگیهای لاراول را مدیریت کنید. SSH هم برای اجرای دستورات Artisan، نصب پکیجها، اجرای migration ها و بسیاری کارهای دیگر حیاتی است. هاستی که SSH ندهد برای لاراول عملاً نامناسب است — هر تغییری به یک کار طاقتفرسا تبدیل میشود.
انواع هاست: کدام یکی برای شما؟
هاست اشتراکی
اگر پروژهتان کوچک است، بودجه محدود دارید و Queue Worker دائمی نیاز ندارید، هاست اشتراکی میتواند کافی باشد. شرط اصلی این است که هاست PHP 8.x، Composer و SSH ارائه دهد. محدودیت اصلی این نوع هاست این است که نمیتوانید پروسسهای پسزمینه دائمی داشته باشید. برای سایتهای نمایشگاهی، وبلاگهای ساده یا پروژههای داخلی کافی است.
VPS: بهترین انتخاب برای پروژههای جدی
VPS به شما کنترل کامل میدهد. Nginx یا Apache را هر طور که بخواهید تنظیم میکنید، PHP-FPM را بهینه میکنید، Redis نصب میکنید، Queue Worker راه میاندازید. صباهاست VPS هایی با پیکربندیهای متنوع ارائه میدهد که برای انواع پروژههای لاراول مناسب هستند. اگر پروژهتان جدی است، از همان ابتدا VPS انتخاب کنید.
Laravel Forge
سرویس رسمی لاراول برای مدیریت سرور. به یک VPS نیاز دارید (از DigitalOcean، Linode، AWS یا هر جای دیگر) و Forge همه تنظیمات را انجام میدهد: Nginx، PHP-FPM، MySQL، Redis، SSL با Let's Encrypt و Queue Worker با Supervisor. هزینه ماهانه دارد اما وقت زیادی صرفهجویی میکند. برای تیمهایی که میخواهند روی کد تمرکز کنند و کمتر درگیر DevOps شوند، Forge انتخاب خوبی است.
Laravel Vapor
اجرای serverless لاراول روی AWS Lambda. مقیاسپذیری خودکار دارد و به ازای مصرف پرداخت میکنید. برای اپلیکیشنهایی با ترافیک نوسانی زیاد جذاب است، اما پیچیدگیهای خاص خودش را دارد و نیاز به اکانت AWS و آشنایی با معماری serverless دارد.
تنظیم Document Root: اشتباهترین اشتباه
یکی از رایجترین و خطرناکترین اشتباهات در استقرار لاراول، تنظیم اشتباه Document Root است. این تنظیم باید روی پوشه public پروژه باشد، نه روی ریشه پروژه.
اگر Document Root روی ریشه پروژه باشد چه اتفاقی میافتد؟ فایل .env از مرورگر قابل دسترسی میشود. پوشه vendor در معرض نمایش قرار میگیرد. فایلهای پیکربندی حساس لو میروند. این یک آسیبپذیری جدی امنیتی است، نه فقط یک اشکال فنی.
اگر در هاست اشتراکی نمیتوانید Document Root را تغییر دهید، راهحل این است: فایلهای داخل پوشه public لاراول را به پوشه public_html منتقل کنید و مسیرهای index.php را مطابق آن اصلاح کنید. مسیر autoload و bootstrap باید یک سطح بالاتر رفته باشند تا به ریشه پروژه دسترسی داشته باشند.
تنظیمات ضروری بعد از استقرار
فایل .env
فایل .env تنظیمات محیطی حساس پروژه را نگه میدارد. چند قانون که باید رعایت کنید: هرگز آن را در git commit نکنید (در .gitignore باید باشد). روی هر سرور یک .env مستقل داشته باشید. از .env.example به عنوان template استفاده کنید. برای production حتماً APP_DEBUG=false و APP_ENV=production تنظیم کنید تا خطاهای داخلی برای کاربران نمایش داده نشود.
Permission های پوشهها
پوشههای storage و bootstrap/cache باید توسط وبسرور قابل نوشتن باشند. دستورات مربوطه:
- chmod -R 775 storage bootstrap/cache
- اگر owner مشکل داشت: chown -R www-data:www-data storage bootstrap/cache
پس از استقرار اگر خطای ۵۰۰ گرفتید و لاگ نوشت Permission denied، این دو دستور معمولاً مشکل را حل میکنند.
Queue Worker با Supervisor
اگر از صفهای لاراول (Queue) برای ارسال ایمیل، پردازش تصویر، ارسال اطلاعیه یا هر کار پسزمینهای استفاده میکنید، Queue Worker باید همیشه در حال اجرا باشد. Supervisor این کار را میکند — اگر Worker crash کرد، به صورت خودکار restart میشود. یک فایل پیکربندی ساده در /etc/supervisor/conf.d/laravel-worker.conf بنویسید و Worker را با numprocs=2 یا بیشتر بر اساس بار سرور تنظیم کنید.
بعد از هر deployment هم این دستور را فراموش نکنید تا Worker با کد جدید ریاستارت شود:
- php artisan queue:restart
Task Scheduler
اگر از Scheduler لاراول برای کارهای زمانبندیشده (ارسال ایمیل روزانه، پاکسازی دادههای قدیمی، تولید گزارش) استفاده میکنید، یک cron job اضافه کنید که هر دقیقه اجرا شود:
- * * * * * cd /path/to/project && php artisan schedule:run >> /dev/null 2>&1
بهینهسازی برای محیط Production
Cache کردن تنظیمات و مسیرها
این دستورات اجرای لاراول را به طور محسوس سریعتر میکنند چون فایلهای متعدد PHP را پردازش و یکجا cache میکنند:
- php artisan config:cache — تنظیمات را یکجا میکند
- php artisan route:cache — مسیرها را compile میکند (فقط اگر route های Closure ندارید)
- php artisan view:cache — Blade templates را compile میکند
- php artisan optimize — ترکیب config و route cache
نکته مهم: بعد از هر تغییر در فایلهای config یا route، cache را پاک و دوباره بسازید:
- php artisan optimize:clear && php artisan optimize
OPcache PHP
OPcache کد PHP را compile شده در حافظه نگه میدارد و نیاز به تفسیر مجدد هر درخواست را حذف میکند. این تنظیمات را در php.ini اضافه کنید:
- opcache.enable=1
- opcache.memory_consumption=128
- opcache.max_accelerated_files=10000
- opcache.validate_timestamps=0 (فقط در production — در development باید 1 باشد)
Autoloader Optimization
هنگام نصب وابستگیها برای production از این دستور استفاده کنید:
- composer install --optimize-autoloader --no-dev
پارامتر --no-dev پکیجهای توسعه را نصب نمیکند (مثل Laravel Debugbar یا PHPUnit) و --optimize-autoloader نقشه کلاسها را بهینه میسازد. این قدم ساده از نصب به نصب فراموش میشود اما فرق آن محسوس است.
Redis برای Cache و Session
اگر Redis روی سرور دارید، استفاده از آن به جای file driver برای cache، session و queue به طور قابلتوجهی عملکرد را بهبود میدهد. در .env:
- CACHE_DRIVER=redis
- SESSION_DRIVER=redis
- QUEUE_CONNECTION=redis
عیبیابی مشکلات رایج
خطای ۵۰۰ Internal Server Error
رایجترین مشکل بعد از استقرار. اولین قدم همیشه یک چیز است: لاگ را بخوانید.
- tail -n 50 storage/logs/laravel.log
شایعترین دلایل: Permission اشتباه روی storage یا bootstrap/cache. نبود فایل .env یا مقادیر اشتباه در آن. نسخه PHP ناسازگار با پروژه. فایلهای cache قدیمی که با کد جدید تعارض دارند — با php artisan cache:clear پاک کنید.
کندی غیرعادی سایت
اگر سایت کند است، مرحله به مرحله پیش بروید. ابتدا با php artisan optimize cache ها را فعال کنید. بعد OPcache را چک کنید که روشن باشد. سپس query های N+1 را با Laravel Debugbar یا Laravel Telescope پیدا کنید — این مشکل خیلی رایجتر از چیزی است که فکرش را میکنید. اگر cache و session روی فایل هستند، به Redis بروید.
خطای Memory در Composer
گاهی Composer هنگام نصب پکیجها حافظه کم میآورد. راهحل سریع:
- COMPOSER_MEMORY_LIMIT=-1 composer install
URL هایی که کار نمیکنند
اگر URL های لاراول (غیر از صفحه اصلی) خطای ۴۰۴ میدهند، معمولاً یکی از این سه مشکل است: Document Root روی پوشه public نیست. ماژول mod_rewrite Apache فعال نیست. AllowOverride روی All تنظیم نشده. در Nginx باید این بلوک در پیکربندی سایت باشد:
- try_files $uri $uri/ /index.php?$query_string;
سوالات متداول
آیا لاراول روی هاست اشتراکی هم کار میکند؟
بله، به شرطی که هاست PHP 8.x، SSH و Composer داشته باشد. محدودیت اصلی نداشتن Queue Worker دائمی است. اگر پروژهتان از Queue استفاده نمیکند، هاست اشتراکی کافی است. یک راهحل میانی برای Queue در هاست اشتراکی این است که یک cron job تنظیم کنید که هر چند دقیقه یکبار php artisan queue:work --stop-when-empty اجرا کند.
چطور لاراول را برای production آماده کنم؟
یک checklist کامل: APP_ENV=production و APP_DEBUG=false در .env. اجرای php artisan optimize. تنظیم Permission های storage. اجرای composer install --optimize-autoloader --no-dev. Migration با php artisan migrate --force. فعال کردن SSL. اگر Queue دارید، Supervisor راه بیندازید. اگر Scheduler دارید، cron job اضافه کنید.
Laravel Forge واقعاً ارزش دارد؟
اگر DevOps برایتان دردسرساز است و میخواهید روی کد تمرکز کنید، بله. Forge به صورت خودکار Nginx، PHP-FPM، MySQL، Redis، SSL و Queue Worker را تنظیم میکند و deployment را با یک دستور انجام میدهد. اگر وقت صرفکردن روی تنظیم سرور برایتان ارزش کمتری از هزینه ماهانه Forge دارد، قطعاً ارزش خرید دارد.
چطور لاراول را بدون downtime مستقر کنم؟
روش استاندارد، atomic deployment با symlink است: نسخه جدید در یک دایرکتوری جدید (مثل releases/20240115) مستقر میشود، وقتی همه مراحل (composer install، migrate، optimize) تمام شد، symlink به پوشه جدید اشاره میکند. اگر مشکلی بود، symlink به نسخه قبلی برمیگردد. Deployer.org این pattern را آماده پیاده میکند و رسپیهای اختصاصی لاراول دارد.
جمعبندی
لاراول یک فریمورک حرفهای است و هاست آن هم باید حرفهای باشد. PHP بهروز (8.1+)، SSH، Composer و امکان تنظیم Document Root روی پوشه public — اینها خط قرمزهای انتخاب هاست هستند. برای پروژههای کوچک، هاست اشتراکی با این شرایط کافی است. برای هر چیزی جدیتر، VPS بهترین انتخاب است.
بهینهسازی cache، فعال بودن OPcache، تنظیم درست Permission های storage و راهاندازی Queue Worker قدمهایی هستند که تفاوت بین یک سایت معمولی و یک سایت پرسرعت و پایدار را میسازند. برای پروژههای لاراول که نیاز به محیطی پایدار با PHP جدید و دسترسی SSH کامل دارند، سرورهای صباهاست گزینههای مناسبی هستند.