Развертывание
Введение
Когда вы будете готовы развернуть свое приложение 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 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. Чтобы обслуживать 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',
health: '/status',
)
Когда HTTP-запросы отправляются по этому маршруту, Laravel также отправляет событие Illuminate\Foundation\Events\DiagnosingHealth
, позволяя вам выполнять дополнительные проверки работоспособности, относящиеся к вашему приложению. В слушателе для этого события вы можете проверить состояние базы данных или кэша вашего приложения. Если вы обнаружите проблему в своем приложении, вы можете просто выдать исключение из прослушивателя.
Развертывание с помощью 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 и других.