مقاله پیش رو، صفحه ای از مستندات لاراول 10 مربوط به روشهای استقرار یا به زبان ساده تر آپلود پروژه نهایی در سرور (Deployment) برای فریمورک لاراول است.
برای شروع، بهتر است که بدانید که استقرار یک بخش بسیار حیاتی از هر پروژه وب است. در واقع، استقرار به معنی انتقال پروژه شما از محیط توسعه به محیط اجرا برای استفاده واقعی توسط کاربران است. در این راستا، لاراول ابزارهایی را برای استقرار پروژههای شما فراهم میکند که میتوانید از آنها استفاده کنید تا بتوانید پروژه خود را به سرعت و با کیفیت بالا استقرار کنید.
در این مقاله از لاراول کارا، فرایند استقرار (آپلود پروژه لاراول) را با استفاده از ابزارهای مختلفی مانند Git و Envoyer و Deployer شرح داده شده است. همچنین با استفاده از این راهنما میتوانید پروژههای لاراول خود را روی سرویسهای ابری مانند AWS، Google Cloud و … استقرار کنید.
# معرفی (Introduction)
وقتی آماده استقرار برنامه Laravel (آپلود برنامه نوشته شده با لاراول) خود در محیط تولید (سرور نهایی) هستید، چندین چیز مهم وجود دارد که میتوانید انجام دهید تا اطمینان حاصل کنید که برنامه شما با بهترین کارایی اجرا میشود. در این سند، برخی نکات شروع کار بسیار خوب را برای اطمینان از استقرار صحیح برنامه Laravel شما پوشش خواهیم داد.
نکته:
محیط تولید (production environment) به محیطی اطلاق میشود که در آن برنامههای توسعهیافته برای استفاده در محیط واقعی تولید و اجرا میشوند. این محیط شامل سرورها و سیستمهایی است که برای ارائه خدمات به کاربران استفاده میشود. در این محیط، عملکرد و کارایی برنامه بسیار حائز اهمیت است و باید توجه ویژهای به جزئیات فنی مهمتری مانند بهینهسازی، امنیت و قابلیت اطمینان داشته باشیم. به طور کلی، محیط تولید باید برای استفاده در مقیاس بزرگ و در دسترس بودن مداوم برنامهها طراحی شده باشد و باید با معیارهایی مانند عملکرد، پایداری و امنیت مطابقت داشته باشد.
# نیازمندیهای سرور که برای اجرای لاراول لازم است (Server Requirements)
سرور مورد نیاز برای آپلود لاراول، چارچوب کاری لاراول چندین نیازمندی سیستمی دارد. شما باید اطمینان حاصل کنید که وب سرور شما دارای نسخه PHP حداقل و افزونههای زیر است:
- PHP >= 8.1
- Ctype PHP Extension
- cURL PHP Extension
- DOM PHP Extension
- Fileinfo PHP Extension
- Filter PHP Extension
- Hash PHP Extension
- Mbstring PHP Extension
- OpenSSL PHP Extension
- PCRE PHP Extension
- PDO PHP Extension
- Session PHP Extension
- Tokenizer PHP Extension
- XML PHP Extension
# پیکربندی سرور (Server Configuration)
# Nginx
اگر برنامهی خود را بر روی یک سرور اجرا میکنید که Nginx در آن نصب شده است، میتوانید از اطلاعات زیر به عنوان نقطه شروعی برای پیکربندی سرور وب خود استفاده کنید. احتمالاً برای پیکربندی متناسب با تنظیمات سرور خود، این پرونده نیاز به تنظیمات سفارشی دارد. اگر به کمک در مدیریت سرور خود نیاز دارید، در نظر بگیرید از یک سرویس مدیریت و استقرار سرور Laravel مانند Laravel Forge استفاده کنید.
لطفاً اطمینان حاصل کنید که همانند پیکربندی زیر، سرور وب شما همه درخواستها را به پرونده public/index.php برنامهی شما هدایت میکند. شما نباید تلاش کنید که پرونده index.php را به ریشه پروژه خود منتقل کنید، زیرا اجرای برنامه از ریشه پروژه، بسیاری از پروندههای پیکربندی حساس شما را در اینترنت قابل دسترس قرار خواهد داد.
server { listen 80; listen [::]:80; server_name example.com; root /srv/example.com/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 = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ \.php$ { fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } }
# بهینهسازی (Optimization)
# بهینهسازی Autoloader در لاراول (Autoloader Optimization)
هدف از بهینهسازی Autoloader در Laravel، بهبود عملکرد برنامه و کاهش زمان بارگذاری کلاسها است. با بهینهسازی Autoloader، برنامه میتواند با سرعت بیشتری اجرا شود و کاربران نیز تجربه بهتری از استفاده از برنامه خواهند داشت.
هنگام استقرار برنامه در محیط تولید (آپلود در سرور اصلی)، اطمینان حاصل کنید که نگاشت فایلهای کلاس اتولودر Composer بهینهسازی شده است تا Composer بتواند به سرعت فایل مناسب برای بارگذاری کلاس موردنظر را پیدا کند. به این صورت میتوانید عملکرد برنامهی خود را بهبود بخشید و زمان بارگذاری کلاسها را به حداقل برسانید.
composer install --optimize-autoloader --no-dev
# پیکربندی کش (Caching Configuration)
هنگام فرآیند استقرار یا آپلود پروژه خود در سور، باید اطمینان حاصل کنید که در فرآیند استقرار دستور config:cache را اجرا کردهاید. برای این کار، از دستور زیر استفاده کنید:
php artisan config:cache
این دستور تمامی پروندههای پیکربندی Laravel را در یک فایل ترکیب میکند و یک پروندهی کش شده از آنها ایجاد میکند که تعداد قابل توجهی از دسترسیهایی که چارچوب برای بارگذاری مقادیر پیکربندی انجام میدهد را به فایل سیستم کاهش میدهد. این کار باعث بهبود عملکرد سرعت برنامه خواهد شد.
اگر دستور config:cache را در فرآیند استقرار خود اجرا میکنید، باید اطمینان حاصل کنید که تنها از تابع env درون پروندههای پیکربندی خود استفاده میکنید. زمانی که پیکربندی کش شده است، پرونده .env بارگذاری نمیشود و تمام فراخوانیهای تابع env برای متغیرهای .env مقدار null را برمیگردانند.
# کش کردن رویدادها (Caching Events)
اگر برنامهی شما از کشف رویداد (event discovery) استفاده میکند، در فرآیند استقرار (آپلود کد لاراول در سرور) برنامه باید تطابق رویدادهای برنامه با گوش دهندههای آنها (listener) را در یک پرونده کش شده ذخیره کنید. برای انجام این کار، میتوانید از دستور event:cache در Artisan استفاده کنید.
php artisan event:cache
# کش کردن مسیرها (Caching Routes)
ذخیرهسازی مسیرها
اگر یک برنامه بزرگ با تعداد زیادی مسیر در حال ساخت هستید، باید اطمینان حاصل کنید که در هنگام استقرار برنامه، دستور route:cache را اجرا کردهاید:
php artisan route:cache
# کش کردن نمایشها (Caching Views)
هنگام آپلود پروژه لاراول خود در سرور، باید اطمینان حاصل کنید که در فرآیند آپلود دستور view:cache Artisan را اجرا کردهاید:
php artisan view:cache
این دستور تمامی نمایشهای Blade شما را پیشکامپایل میکند، به طوری که هرگز به صورت درخواستی کامپایل نمیشوند و عملکرد هر درخواستی که یک نمایش را برمیگرداند بهبود مییابد.
# فعالسازی حالت اشکالزدایی (Debug Mode)
حالت دیباگ در لاراول، گزینهی debug در پرونده پیکربندی config/app.php تعیین میکند که چه میزان از اطلاعات خطا برای کاربر نمایش داده شود. به طور پیشفرض، این گزینه به مقدار متغیر محیطی APP_DEBUG وابسته است که در پرونده .env برنامهی شما ذخیره شده است.
در محیط سرور نهایی، این مقدار باید همیشه به صورت false باشد. اگر متغیر APP_DEBUG در سرور نهایی شما به مقدار true تنظیم شود، خطر افشای اطلاعات پیکربندی حساس به کاربران نهایی برنامهی شما وجود دارد.
# راهحلهایی برای استقرار ساده با (Easy Deployment With Forge / Vapor)
Laravel Forge
یک ابزار مدیریت سرور است که برای سادهسازی پیکربندی و مدیریت سرورهای اختصاصی برای برنامههای لاراول استفاده میشود. این ابزار از طریق رابط کاربری وب یکپارچه، به کاربران اجازه میدهد تا سرورهای خود را راهاندازی، پیکربندی و مدیریت کنند. لاراول Forge از زیرساختهای ابری مانند AWS، DigitalOcean، Linode و غیره پشتیبانی میکند و به کاربران اجازه میدهد تا سرورهای خود را با تنظیمات پیشفرض راهاندازی کنند و به راحتی از مزایای ابزارهایی مانند Nginx، MySQL، Redis، Memcached، Beanstalk و غیره استفاده کنند.
اگر هنوز آمادگی مدیریت پیکربندی سرور خود را ندارید و یا با پیکربندی تمامی سرویسهای مختلف مورد نیاز برای اجرای یک برنامهی Laravel قوی، راحت نیستید، Laravel Forge یک جایگزین شگفتانگیز است.
Laravel Forge میتواند سرورها را بر روی ارائهدهندگان زیرساختهای مختلف مانند DigitalOcean، Linode، AWS و غیره ایجاد کند. علاوه بر این، Forge تمامی ابزارهای مورد نیاز برای ساخت برنامههای Laravel قوی را نصب و مدیریت میکند، مانند Nginx، MySQL، Redis، Memcached، Beanstalk و غیره.
Laravel Vapor
یک بستر استقرار بدون سرور برای برنامههای لاراول است که توسط شرکت AWS پشتیبانی میشود. این بستر به کاربران اجازه میدهد تا برنامههای Laravel خود را بدون نیاز به مدیریت سرورها و پیکربندیهای پیچیده روی بستر AWS استقرار دهند. لاراول Vapor بر اساس مدل پرداخت برای هر درخواست (pay-per-request) عمل میکند و هزینههای استفاده از آن بر اساس تعداد درخواستهایی است که برنامه دریافت میکند، محاسبه میشود. لاراول Vapor همچنین از ویژگیهایی مانند خودکارسازی مقیاسپذیری، پشتیبانی از چندین محیط استقرار (مانند تست، تولید و …)، پشتیبانی از برنامههای Laravel و Lumen، رمزگذاری دادهها و غیره پشتیبانی میکند.