- Введение
- Требования к серверу
- Настройка сервера
- Оптимизация
- Режим отладки
- Простое развёртывание с Forge / Vapor
#Введение
Когда вы готовы развернуть ваше Laravel-приложение в продакшн, есть несколько важных шагов, которые помогут обеспечить максимально эффективную работу приложения. В этом документе мы рассмотрим основные рекомендации для правильного развёртывания Laravel-приложения.
#Требования к серверу
Фреймворк Laravel имеет несколько системных требований. Убедитесь, что на вашем веб-сервере установлена минимальная версия PHP и необходимые расширения:
- PHP >= 8.1
- Расширение 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;
}
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 и оцените простоту масштабирования без серверов. Laravel Vapor настроен создателями Laravel для бесшовной работы с фреймворком, позволяя вам продолжать писать приложения Laravel так же, как вы привыкли.