سلام! من آرش فدایی هستم و تو این قسمت، که آخرین بخش از سری آموزشی لاراول ۱۲ هست، قراره درباره بهینه‌سازی و استقرار (Deployment) اپلیکیشن لاراول صحبت کنیم. بهینه‌سازی باعث می‌شه اپلیکیشن‌تون سریع‌تر و کارآمدتر کار کنه، و استقرار به شما کمک می‌کنه پروژه‌تون رو روی سرور واقعی بذارید تا همه بتونن ازش استفاده کنن. تو این مقاله، چند تا تکنیک بهینه‌سازی و مراحل استقرار روی یه سرور مثل Forge یا سرور لینوکس رو بررسی می‌کنیم. بریم شروع کنیم!

بهینه‌سازی و استقرار: تجربه شخصی من

اولین باری که خواستم یه اپلیکیشن لاراول رو روی سرور بذارم، فکر می‌کردم فقط کافیه فایل‌ها رو آپلود کنم و تموم! اما خیلی زود با مشکلات عجیبی مثل خطای 500 یا کندی سایت روبه‌رو شدم. بعد از چند تا پروژه، یاد گرفتم که بهینه‌سازی و تنظیم درست سرور چقدر مهمه. یه بار فراموش کردم کش رو فعال کنم و سایت به شدت کند بود! تو لاراول ۱۲، ابزارهای بهینه‌سازی مثل کش پیشرفته و بهبودهای عملکردی کار رو خیلی راحت‌تر کردن. حالا بیاید با چند تا تکنیک عملی پیش بریم!

پیش‌نیازها

قبل از شروع، مطمئن بشید که:

  • پروژه لاراول‌تون کامل و تست‌شده‌ست (مثل چیزی که تو قسمت‌های قبلی ساختیم).

  • یه سرور لینوکس (مثل Ubuntu) یا یه سرویس مثل Laravel Forge دارید.

  • ابزارهایی مثل Composer، NPM و Git روی سیستم‌تون نصبه.

  • یه دیتابیس (مثل MySQL) روی سرور آماده‌ست.

بهینه‌سازی اپلیکیشن لاراول

بیاید چند تا تکنیک کلیدی برای بهینه‌سازی اپلیکیشن‌مون قبل از استقرار بررسی کنیم.

۱. کش کردن تنظیمات و مسیرها

لاراول می‌تونه تنظیمات و مسیرها رو کش کنه تا سرعت لود بالا بره. این دستورات رو اجرا کنید:

php artisan config:cache
php artisan route:cache
  • config:cache فایل‌های تنظیمات (مثل .env) رو تو یه فایل کش می‌کنه.

  • route:cache مسیرها رو کش می‌کنه تا لاراول هر بار اونا رو پارس نکنه.

یه تجربه از خودم: یه بار بعد از تغییر مسیرها، فراموش کردم کش رو پاک کنم (php artisan route:clear) و تغییراتم اعمال نشد. همیشه یادتون باشه بعد از تغییر تنظیمات یا مسیرها، کش رو پاک کنید!

۲. بهینه‌سازی Composer

برای کاهش زمان لود، می‌تونید Composer رو بهینه کنید:

composer install --optimize-autoloader --no-dev

این دستور Autoloader رو بهینه می‌کنه و پکیج‌های فقط-توسعه‌ای (مثل ابزارهای تست) رو حذف می‌کنه. من تو یه پروژه این کار رو نکردم و سایتم کلی کند بود چون پکیج‌های اضافی لود می‌شدن.

۳. فعال کردن کش ویوها

برای سریع‌تر کردن رندر ویوهای Blade، می‌تونید کش ویوها رو فعال کنید. تو فایل .env:

VIEW_COMPILED_PATH=/path/to/storage/framework/views

یا از دستور زیر برای کامپایل ویوها استفاده کنید:

php artisan view:cache

برای پاک کردن کش ویوها:

php artisan view:clear

من تو یه پروژه داشتم یه سایت پرترافیک می‌ساختم و این روش سرعت رندر صفحات رو خیلی بهتر کرد.

۴. استفاده از Lazy Loading و Eager Loading

برای بهینه کردن کوئری‌های دیتابیس، همیشه از Eager Loading برای روابط استفاده کنید (مثل چیزی که تو قسمت ششم گفتیم):

$posts = Post::with('comments')->get();

این کار مشکل N+1 رو حل می‌کنه. یه بار من اینو نادیده گرفتم و برای یه لیست بزرگ از پست‌ها، سایتم به شدت کند شد!

استقرار روی سرور لینوکس

حالا بیاید اپلیکیشن‌مون رو روی یه سرور لینوکس (مثل Ubuntu) مستقر کنیم. مراحل زیر رو دنبال کنید:

۱. آماده‌سازی سرور

مطمئن شید سرور این پیش‌نیازها رو داره:

  • PHP ۸.۳ یا بالاتر

  • Composer

  • Nginx یا Apache

  • MySQL یا یه دیتابیس دیگه

  • Git

برای نصب پیش‌نیازها روی Ubuntu، می‌تونید این دستورات رو اجرا کنید:

sudo apt update
sudo apt install php php-cli php-fpm php-mysql php-xml php-mbstring unzip git nginx
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

۲. آپلود پروژه با Git

یه مخزن Git روی سرور بسازید و پروژه رو آپلود کنید. اول یه مخزن خالی بسازید:

mkdir /var/www/laravel-app
cd /var/www/laravel-app
git init --bare

تو سیستم محلی‌تون، پروژه رو به سرور push کنید:

git remote add production ssh://user@your-server-ip/var/www/laravel-app
git push production main

حالا روی سرور، کد رو به یه پوشه کاری بکشید:

git clone /var/www/laravel-app /var/www/laravel-app-live
cd /var/www/laravel-app-live

یه تجربه از خودم: یه بار فراموش کردم دسترسی‌های SSH رو درست تنظیم کنم و کلی خطای دسترسی گرفتم. همیشه مطمئن شید کلید SSH درست تنظیم شده!

۳. تنظیم سرور وب (Nginx)

یه فایل تنظیمات Nginx بسازید (/etc/nginx/sites-available/laravel):

server {
    listen 80;
    server_name your-domain.com;
    root /var/www/laravel-app-live/public;

    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

لینک سمبلیک بسازید و Nginx رو ریست کنید:

sudo ln -s /etc/nginx/sites-available/laravel /etc/nginx/sites-enabled/
sudo systemctl reload nginx

۴. نصب وابستگی‌ها و تنظیمات

تو پوشه پروژه روی سرور:

composer install --optimize-autoloader --no-dev
npm install && npm run build

فایل .env رو بسازید و تنظیمات دیتابیس و APP_KEY رو وارد کنید:

php artisan key:generate

Migrationها رو اجرا کنید:

php artisan migrate --force

۵. تنظیم دسترسی‌ها

دسترسی‌های پوشه‌ها رو درست کنید:

sudo chown -R www-data:www-data /var/www/laravel-app-live
sudo chmod -R 755 /var/www/laravel-app-live/storage
sudo chmod -R 755 /var/www/laravel-app-live/bootstrap/cache

من یه بار دسترسی‌های storage رو اشتباه تنظیم کردم و خطای 500 گرفتم. همیشه دسترسی‌ها رو چک کنید!

استفاده از Laravel Forge (اختیاری)

اگه نمی‌خواید سرور رو دستی تنظیم کنید، Laravel Forge یه ابزار عالیه که همه‌چیز رو خودکار می‌کنه. کافیه:

  • تو Forge یه سرور جدید بسازید.

  • پروژه‌تون رو از GitHub یا Bitbucket لینک کنید.

  • دیتابیس و تنظیمات محیطی رو تو رابط کاربری Forge وارد کنید.

من تو یه پروژه از Forge استفاده کردم و تو چند دقیقه سایتم رو سرور بود!

نکات تکمیلی

  • کش پیشرفته: از Redis یا Memcached برای کش کردن داده‌ها استفاده کنید. تو فایل .env:

CACHE_DRIVER=redis
  • مانیتورینگ: از ابزارهایی مثل New Relic یا Laravel Telescope برای مانیتورینگ عملکرد استفاده کنید.

  • لاراول ۱۲ و بهبودها: تو نسخه ۱۲، ابزارهای بهینه‌سازی مثل کش پیشرفته‌تر و پشتیبانی از CDN بهتر شدن.

اینجا به پایان سری آموزشی لاراول ۱۲ رسیدیم! اگه سوالی دارید یا جایی گیر کردید، تو کامنت‌ها بپرسید. من همیشه از بازخوردهای شما کلی چیز جدید یاد می‌گیرم!

موفق باشید و به کدنویسی ادامه بدید!