Розгортання

Вступ

Коли ви готові розгорнути ваш Laravel застосунок у продакшн, є кілька важливих речей, які ви можете зробити, щоб переконатися, що ваш застосунок працює якомога ефективніше. У цьому документі ми розглянемо кілька чудових початкових кроків, щоб переконатися, що ваш Laravel застосунок розгорнуто належним чином.

Вимоги до сервера

Laravel фреймворк має кілька системних вимог. Ви повинні переконатися, що ваш веб-сервер має наступну мінімальну версію PHP та розширення:

  • PHP >= 8.2
  • 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

Конфігурація сервера

Nginx

Якщо ви розгортаєте ваш застосунок на сервері, що працює під керуванням Nginx, ви можете використовувати наступний файл конфігурації як відправну точку для налаштування вашого веб-сервера. Швидше за все, цей файл потрібно буде налаштувати залежно від конфігурації вашого сервера. Якщо вам потрібна допомога в управлінні вашим сервером, розгляньте можливість використання повністю керованої платформи Laravel, такої як Laravel Cloud.

Будь ласка, переконайтеся, що ваш веб-сервер, як у конфігурації нижче, направляє всі запити до файлу 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 ~ ^/index\.php(/|$) {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_hide_header X-Powered-By;
    }
 
    location ~ /\.(?!well-known).* {
        deny all;
    }
}

FrankenPHP

FrankenPHP також може бути використаний для обслуговування ваших Laravel застосунків. FrankenPHP - це сучасний PHP сервер застосунків, написаний на Go. Щоб обслуговувати Laravel PHP застосунок за допомогою FrankenPHP, ви можете просто викликати його команду php-server:

frankenphp php-server -r public/

Щоб скористатися більш потужними функціями, які підтримуються FrankenPHP, такими як інтеграція з Laravel Octane, HTTP/3, сучасне стиснення або можливість упаковки Laravel застосунків як автономних бінарних файлів, будь ласка, зверніться до документації Laravel від FrankenPHP.

Дозволи на каталоги

Laravel потрібно записувати в каталоги bootstrap/cache і storage, тому ви повинні переконатися, що власник процесу веб-сервера має дозвіл на запис у ці каталоги.

Оптимізація

Коли ви розгортаєте ваш застосунок у продакшн, існує безліч файлів, які слід кешувати, включаючи вашу конфігурацію, події, маршрути та представлення. Laravel надає єдину, зручну команду Artisan optimize, яка закешує всі ці файли. Цю команду зазвичай слід викликати як частину процесу розгортання вашого застосунку:

php artisan optimize

Метод optimize:clear може бути використаний для видалення всіх файлів кешу, згенерованих командою optimize, а також всіх ключів у драйвері кешу за замовчуванням:

php artisan optimize:clear

У наступній документації ми обговоримо кожну з детальних команд оптимізації, які виконуються командою optimize.

Конфігурація Кешування

Коли ви розгортаєте ваш застосунок у продакшн, ви повинні переконатися, що запускаєте команду Artisan config:cache під час процесу розгортання:

php artisan config:cache

This команда об'єднає всі конфігураційні файли Laravel в один кешований файл, що значно зменшує кількість звернень фреймворку до файлової системи при завантаженні ваших конфігураційних значень.

Якщо ви виконуєте команду config:cache під час процесу розгортання, ви повинні переконатися, що викликаєте функцію env лише з ваших конфігураційних файлів. Після кешування конфігурації файл .env не буде завантажено, і всі виклики функції env для змінних .env повертатимуть null.

Кешування Подій

Ви повинні кешувати автоматично виявлені відповідності подій до слухачів вашого застосунку під час процесу розгортання. Це можна зробити, викликавши команду Artisan event:cache під час розгортання:

php artisan event:cache

Кешування Маршрутів

Якщо ви створюєте великий застосунок з багатьма маршрутами, ви повинні переконатися, що запускаєте команду Artisan route:cache під час процесу розгортання:

php artisan route:cache

Ця команда зводить всі ваші реєстрації маршрутів до одного виклику методу в кешованому файлі, покращуючи продуктивність реєстрації маршрутів при реєстрації сотень маршрутів.

Кешування Відображень

Коли ви розгортаєте ваш застосунок у продакшн, ви повинні переконатися, що запускаєте команду Artisan view:cache під час процесу розгортання:

php artisan view:cache

Ця команда попередньо компілює всі ваші Blade-шаблони, щоб вони не компілювалися за запитом, покращуючи продуктивність кожного запиту, який повертає шаблон.

Режим налагодження

Опція налагодження (debug) у файлі конфігурації config/app.php визначає, скільки інформації про помилку буде фактично відображено користувачу. За замовчуванням ця опція налаштована на врахування значення змінної середовища APP_DEBUG, яка зберігається у файлі .env вашого застосунку.

У вашому виробничому середовищі це значення завжди повинно бути false. Якщо змінна APP_DEBUG встановлена на true у виробничому середовищі, ви ризикуєте розкрити конфіденційні значення конфігурації кінцевим користувачам вашого застосунку.

Маршрут Здоров'я

Laravel включає вбудований маршрут перевірки стану, який можна використовувати для моніторингу стану вашого застосунку. У виробничому середовищі цей маршрут може використовуватися для звітування про стан вашого застосунку до монітора безвідмовної роботи, балансувальника навантаження або системи оркестрації, такої як Kubernetes.

За замовчуванням, маршрут перевірки стану доступний за адресою /up і поверне HTTP-відповідь 200, якщо застосунок запущено без винятків. В іншому випадку буде повернуто HTTP-відповідь 500. Ви можете налаштувати URI для цього маршруту у файлі bootstrap/app вашого застосунку:

->withRouting(
    web: __DIR__.'/../routes/web.php',
    commands: __DIR__.'/../routes/console.php',
    health: '/up', 
    health: '/status', 
)

Коли HTTP-запити надсилаються на цей маршрут, Laravel також відправить подію Illuminate\Foundation\Events\DiagnosingHealth, що дозволяє виконувати додаткові перевірки стану, які стосуються вашого застосунку. У межах listener для цієї події ви можете перевірити стан бази даних або кешу вашого застосунку. Якщо ви виявите проблему з вашим застосунком, ви можете просто викинути виняток із слухача.

Розгортання з Laravel Cloud або Forge

Laravel Cloud

Якщо ви бажаєте повністю керовану платформу розгортання з автоматичним масштабуванням, налаштовану для Laravel, ознайомтеся з Laravel Cloud. Laravel Cloud - це надійна платформа розгортання для Laravel, що пропонує керовані обчислення, бази даних, кеші та об'єктне сховище.

Запустіть ваш Laravel застосунок у хмарі та закохайтеся в масштабовану простоту. Laravel Cloud налаштований творцями Laravel для безперебійної роботи з фреймворком, щоб ви могли продовжувати писати ваші Laravel застосунки так, як ви звикли.

Laravel Forge

Якщо ви віддаєте перевагу керувати власними серверами, але не відчуваєте себе впевнено в налаштуванні всіх різноманітних сервісів, необхідних для запуску надійного Laravel-застосунку, Laravel Forge є платформою для управління VPS-серверами для Laravel-застосунків.

Laravel Forge може створювати сервери на різних інфраструктурних провайдерах, таких як DigitalOcean, Linode, AWS та інших. Крім того, Forge встановлює та керує всіма інструментами, необхідними для створення надійних Laravel застосунків, такими як Nginx, MySQL, Redis, Memcached, Beanstalk та іншими.