git |
---|
2eca63c072ec744450de8d45383a3e209205c51d |
Когда вы будете готовы развернуть свое приложение 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, то вы можете использовать следующий конфигурационный файл в качестве отправной точки для настройки веб-сервера. Скорее всего, этот файл нужно будет настроить в зависимости от конфигурации вашего сервера. Если вам нужна помощь в управлении вашим сервером, рассмотрите возможность использования собственной службы управления и развертывания серверов 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 также может использоваться для обслуживания ваших приложений 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 в один кешированный файл, что значительно сократит количество обращений, которые фреймворк должен совершить к файловой системе при загрузке значений вашей конфигурации.
Warning
Если вы выполняете команду 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
.
Warning
В вашем эксплуатационном окружении это значение всегда должно быть 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
, позволяя вам выполнять дополнительные проверки работоспособности, относящиеся к вашему приложению. В слушателе для этого события вы можете проверить состояние базы данных или кэша вашего приложения. Если вы обнаружите проблему в своем приложении, вы можете просто выдать исключение из прослушивателя.
Если вы не совсем готовы управлять конфигурацией своего собственного сервера или вам неудобно настраивать все различные службы, необходимые для запуска надежного приложения Laravel, то Laravel Forge – замечательная альтернатива.
Laravel Forge может создавать серверы на различных поставщиках инфраструктуры, таких как DigitalOcean, Linode, AWS и других. Кроме того, Forge устанавливает и управляет всеми инструментами, необходимыми для создания надежных приложений Laravel, таких как Nginx, MySQL, Redis, Memcached, Beanstalk и других.
Note
Хотите полное руководство по развертыванию с использованием Laravel Forge? Проверьте Laravel Bootcamp и видео-серию Forge на Laracasts.
Если вам нужна полностью бессерверная платформа развертывания с автоматическим масштабированием, настроенная для Laravel, ознакомьтесь с Laravel Vapor. Laravel Vapor – это платформа для бессерверного развертывания Laravel, работающая на AWS. Запустите свою инфраструктуру Laravel на Vapor и влюбитесь в масштабируемую простоту бессерверной архитектуры. Laravel Vapor настроен создателями Laravel для бесперебойной работы с фреймворком, поэтому вы можете продолжать писать свои приложения Laravel точно так, как вы привыкли.