Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти
Інше
Події Про нас

Розгортання

Вступ

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

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

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

  • PHP >= 8.3
  • Розширення PHP Ctype
  • Розширення PHP cURL
  • Розширення PHP DOM
  • Розширення PHP Fileinfo
  • Розширення PHP Filter
  • Розширення PHP Hash
  • Розширення PHP Mbstring
  • Розширення PHP OpenSSL
  • Розширення PHP PCRE
  • Розширення PHP PDO
  • Розширення PHP Session
  • Розширення PHP Tokenizer
  • Розширення PHP XML

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

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.3-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. Щоб віддавати PHP-застосунок Laravel через FrankenPHP, просто викличте його команду php-server:

frankenphp php-server -r public/

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

Права на каталоги

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

Ця команда об'єднає всі конфігураційні файли 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, щоб вони не компілювалися на вимогу, покращуючи швидкодію кожного запиту, який повертає представлення.

Перезавантаження сервісів

Розгортаючись у Laravel Cloud, використовувати команду reload не потрібно - коректне перезавантаження всіх сервісів відбувається автоматично.

Після розгортання нової версії застосунку всі довготривалі сервіси - як-от воркери черг, Laravel Reverb чи Laravel Octane - слід перезавантажити чи перезапустити, щоб вони використовували новий код. Laravel надає одну команду Artisan reload, яка завершує роботу цих сервісів:

php artisan reload

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

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

Опція 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', // [tl! remove]
    health: '/status', // [tl! add]
)

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

Розгортання за допомогою Laravel Cloud чи Forge

Laravel Cloud

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

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

Laravel Forge

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

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