Розгортання
Вступ
Коли ви готові розгорнути свій застосунок 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 тощо - і керує ними.