Любите загадки? Событие еще доступно на сайте.
Примите наш вызов и улучшите свои навыки!
Примите наш вызов и улучшите свои навыки!

Развертывание

Введение

Когда вы будете готовы развернуть свое приложение 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 точно так, как вы привыкли.