Развертывание
Введение
Когда вы будете готовы развернуть свое приложение Laravel в эксплуатационном окружении, вы должны сделать несколько важных вещей, чтобы убедиться, что ваше приложение работает максимально эффективно. В этой документации мы рассмотрим несколько отличных отправных точек, чтобы убедиться, что ваше приложение Laravel развернуто правильно.
Требования к серверу
Фреймворк Laravel имеет несколько системных требований. Вы должны убедиться, что ваш веб-сервер имеет следующую минимальную версию PHP и расширения:
- PHP >= 8.2
- Расширение 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 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.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. Чтобы обслуживать PHP-приложение Laravel с помощью 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
.
Кеширование конфигурации
При развертывании вашего приложения в эксплуатационном окружении, вы должны убедиться, что вы выполнили команду config:cache
Artisan в процессе развертывания:
php artisan config:cache
Эта команда объединит все файлы конфигурации Laravel в один кешированный файл, что значительно сократит количество обращений, которые фреймворк должен совершить к файловой системе при загрузке значений вашей конфигурации.
Если вы выполняете команду
config:cache
в процессе развертывания, вы должны быть уверены, что вызываете функциюenv
только из ваших файлов конфигурации. После кеширования конфигурации файл.env
не будет загружаться, и все вызовы функцииenv
для переменных файла.env
вернутnull
.
Кеширование событий
Вам следует кэшировать автоматически обнаруженное событие вашего приложения для сопоставления со слушателями во время процесса развертывания. Это можно сделать, вызвав команду Artisan event:cache
во время развертывания:
php artisan event:cache
Оптимизация загрузки маршрута
Если вы создаете большое приложение с множеством маршрутов, вам следует убедиться, что вы выполнили команду route:cache
Artisan в процессе развертывания:
php artisan route:cache
Эта команда сокращает регистрации всех маршрутов до одного вызова метода в кешированном файле, повышая производительность при регистрации сотен маршрутов.
Кеширование представлений
При развертывании вашего приложения в эксплуатационном окружении, вы должны убедиться, что вы выполнили команду view:cache
Artisan в процессе развертывания:
php artisan view:cache
Эта команда предварительно скомпилирует все ваши шаблоны Blade, чтобы они не компилировались во время запроса, повышая производительность каждого запроса, возвращающего шаблоном.
Режим отладки
Параметр отладки в файле конфигурации 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! удалить]
health: '/status', // [tl! добавить]
)
When HTTP requests are made to this route, Laravel will also dispatch a Illuminate\Foundation\Events\DiagnosingHealth
event, allowing you to perform additional health checks relevant to your application. Within a listener for this event, you may check your application’s database or cache status. If you detect a problem with your application, you may simply throw an exception from the listener.
Когда HTTP-запросы отправляются по этому маршруту, Laravel также отправляет событие Illuminate\Foundation\Events\DiagnosingHealth
, позволяя вам выполнять дополнительные проверки работоспособности, относящиеся к вашему приложению. В слушателе для этого события вы можете проверить состояние базы данных или кэша вашего приложения. Если вы обнаружите проблему в своем приложении, вы можете просто выдать исключение из прослушивателя.
Развертывание с помощью Forge / Vapor
Laravel Forge
Если вы не совсем готовы управлять конфигурацией своего собственного сервера или вам неудобно настраивать все различные службы, необходимые для запуска надежного приложения Laravel, то Laravel Forge – замечательная альтернатива.
Laravel Forge может создавать серверы на различных поставщиках инфраструктуры, таких как DigitalOcean, Linode, AWS и других. Кроме того, Forge устанавливает и управляет всеми инструментами, необходимыми для создания надежных приложений Laravel, таких как Nginx, MySQL, Redis, Memcached, Beanstalk и других.
Хотите полное руководство по развертыванию с использованием Laravel Forge? Проверьте Laravel Bootcamp и видео-серию Forge на Laracasts.
Laravel Vapor
Если вам нужна полностью бессерверная платформа развертывания с автоматическим масштабированием, настроенная для Laravel, ознакомьтесь с Laravel Vapor. Laravel Vapor – это платформа для бессерверного развертывания Laravel, работающая на AWS. Запустите свою инфраструктуру Laravel на Vapor и влюбитесь в масштабируемую простоту бессерверной архитектуры. Laravel Vapor настроен создателями Laravel для бесперебойной работы с фреймворком, поэтому вы можете продолжать писать свои приложения Laravel точно так, как вы привыкли.