1. Начало работы
  2. Развертывание

Присоединяйся к нашему Telegram сообществу @webblend!

Здесь ты найдешь сниппеты по Laravel и полезные советы по веб-разработке.

Введение

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

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

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

  • PHP >= 8.1
  • Расширение 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

Настройка сервера

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;
}
 
location ~ /\.(?!well-known).* {
deny all;
}
}

Оптимизация

Оптимизация автозагрузчика

При развертывании в продакшн убедитесь, что вы оптимизировали карту автозагрузчика классов Composer, чтобы Composer мог быстро найти правильный файл для загрузки для данного класса:

composer install --optimize-autoloader --no-dev

Примечание Помимо оптимизации автозагрузчика, всегда убедитесь, что в вашем репозитории управления версиями исходного кода проекта присутствует файл composer.lock. Зависимости вашего проекта можно установить намного быстрее, когда присутствует файл composer.lock.

Настройка кэширования

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

php artisan config:cache

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

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

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

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

php artisan event:cache

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

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

php artisan route:cache

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

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

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

php artisan view:cache

Эта команда предварительно компилирует все ваши представления Blade, чтобы они не компилировались по требованию, улучшая производительность каждого запроса, возвращающего представление.

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

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

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

Простой деплоймент с 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 и полюбите масштабируемую простоту серверногоless. Laravel Vapor настроен создателями Laravel для беспроблемной работы с фреймворком, так что вы можете продолжать писать ваши приложения Laravel точно так, как вы привыкли.