Skip to content

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

1. Введение

Когда вы будете готовы развернуть ваше Laravel-приложение в рабочей среде, есть несколько важных вещей, которые можно сделать, чтобы убедиться, что ваше приложение работает максимально эффективно. В этом документе мы рассмотрим несколько отличных отправных точек, которые помогут правильно развернуть Laravel-приложение.

2. Требования к серверу

Фреймворк Laravel имеет несколько системных требований. Убедитесь, что ваш веб-сервер соответствует следующим минимальным версиям PHP и имеет необходимые расширения:

  • PHP >= 8.2
  • Расширение 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 для PHP

3. Конфигурация сервера

3.1. Nginx

Если вы развертываете ваше приложение на сервере с установленным Nginx, вы можете использовать следующий файл конфигурации в качестве отправной точки для настройки веб-сервера. Скорее всего, этот файл потребуется изменить в зависимости от конфигурации вашего сервера.

Убедитесь, что ваш веб-сервер, как в конфигурации ниже, направляет все запросы к файлу 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;
}
}

3.2. FrankenPHP

Для обслуживания Laravel-приложений также можно использовать FrankenPHP. FrankenPHP — это современный сервер приложений на PHP, написанный на Go. Чтобы запустить Laravel-приложение с помощью FrankenPHP, вы можете просто использовать его команду php-server:

frankenphp php-server -r public/

Чтобы воспользоваться более мощными функциями FrankenPHP, такими как интеграция с Laravel Octane, поддержка HTTP/3, современное сжатие или возможность упаковывать Laravel-приложения в автономные бинарные файлы, обратитесь к документации по Laravel на сайте FrankenPHP.

3.3. Разрешения для директорий

Laravel потребуется доступ на запись в директории bootstrap/cache и storage, поэтому убедитесь, что владелец процесса веб-сервера имеет права на запись в эти директории.

4. Оптимизация

При развертывании приложения в рабочей среде необходимо закэшировать различные файлы, включая конфигурации, события, маршруты и представления. Laravel предоставляет единую удобную команду Artisan optimize, которая кэширует все эти файлы. Обычно эту команду следует вызывать как часть процесса развертывания приложения:

php artisan optimize

Метод optimize:clear можно использовать для удаления всех файлов кэша, созданных командой optimize, а также всех ключей в используемом по умолчанию драйвере кэша:

php artisan optimize:clear

В следующей документации мы рассмотрим каждую из отдельных команд оптимизации, которые выполняются командой optimize.

4.1. Кэширование конфигурации

При развертывании вашего приложения в рабочей среде убедитесь, что вы запускаете команду Artisan config:cache в процессе развертывания:

php artisan config:cache

Эта команда объединит все конфигурационные файлы Laravel в один закэшированный файл, что значительно уменьшит количество обращений фреймворка к файловой системе при загрузке ваших конфигурационных значений.

exclamation

Если вы выполняете команду config:cache в процессе развертывания, убедитесь, что вы вызываете функцию env только внутри ваших конфигурационных файлов. После кэширования конфигурации файл .env загружаться не будет, и все обращения к функции env для переменных из .env будут возвращать null.

4.2. Кэширование событий

Во время процесса развертывания следует закэшировать автоматически обнаруженные сопоставления событий и слушателей вашего приложения. Это можно сделать, вызвав команду Artisan event:cache при развертывании:

php artisan event:cache

4.3. Кэширование маршрутов

Если вы создаете крупное приложение с большим количеством маршрутов, убедитесь, что запускаете команду Artisan route:cache в процессе развертывания:

php artisan route:cache

Эта команда объединяет все ваши маршруты в один вызов метода в закэшированном файле, улучшая производительность регистрации маршрутов при наличии сотен маршрутов.

4.4. Кэширование представлений

При развертывании приложения в рабочей среде убедитесь, что вы запускаете команду Artisan view:cache в процессе развертывания:

php artisan view:cache

5. Режим отладки

Параметр debug в вашем конфигурационном файле config/app.php определяет, сколько информации об ошибке будет отображаться пользователю. По умолчанию этот параметр настроен так, чтобы учитывать значение переменной среды APP_DEBUG, которая хранится в файле .env вашего приложения.

exclamation

В рабочей среде это значение всегда должно быть установлено в false. Если переменная APP_DEBUG установлена в true в рабочей среде, вы рискуете раскрыть конфиденциальные значения конфигурации конечным пользователям вашего приложения.

6. Маршрут для проверки состояния

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, позволяя вам выполнить дополнительные проверки состояния, актуальные для вашего приложения. Внутри слушателя этого события вы можете проверить состояние базы данных или кэша вашего приложения. Если вы обнаружите проблему в работе приложения, вы можете просто выбросить исключение из слушателя.

7. Простое развертывание с Forge / Vapor

7.1. Laravel Forge

Если вы еще не готовы управлять собственной конфигурацией сервера или вам не совсем удобно настраивать все различные сервисы, необходимые для работы надежного Laravel-приложения, Laravel Forge — отличный альтернативный вариант.

Laravel Forge может создавать серверы на различных инфраструктурных платформах, таких как DigitalOcean, Linode, AWS и других. Кроме того, Forge устанавливает и управляет всеми инструментами, необходимыми для создания надежных Laravel-приложений, такими как Nginx, MySQL, Redis, Memcached, Beanstalk и другими.

lightbulb

Хотите полный гид по развертыванию с помощью Laravel Forge? Ознакомьтесь с Laravel Bootcamp и видеосерией о Forge на Laracasts.

7.2. Laravel Vapor

Если вам нужна полностью серверлес-платформа для автоматического масштабируемого развертывания, оптимизированная для Laravel, обратите внимание на Laravel Vapor. Laravel Vapor — это серверлес-платформа для развертывания Laravel, работающая на базе AWS. Запустите свою инфраструктуру Laravel на Vapor и насладитесь простой масштабируемостью серверлес-технологий. Laravel Vapor тонко настроен создателями Laravel для безупречной работы с этим фреймворком, поэтому вы можете продолжать писать приложения на Laravel так же, как вы привыкли.