Деплой Laravel-приложения на сервер
Перенос готового интернет-магазина на боевой хостинг, настройка веб-сервера и окружения. Завершение работы над проектом.
Что такое Деплой?
Деплой (Deployment) — это процесс развертывания вашего кода на публичном сервере, чтобы сайт стал доступен пользователям по всему миру через доменное имя. Для серьезных Laravel-проектов обычный виртуальный хостинг (Shared Hosting) подходит плохо из-за ограничений в настройках терминала. Мы будем использовать VPS (Virtual Private Server) с операционной системой Ubuntu, веб-сервером Nginx и PHP-FPM.
В этом финальном уроке курса мы соберем воедино все знания. Главная задача при деплое — обеспечить безопасность. Исходный код приложения не должен быть доступен извне.
Настройка веб-сервера (Nginx) и Document Root
Важнейшая концепция безопасности Laravel: точкой входа (Document Root) для веб-сервера должна быть назначена папка public вашего проекта, а не корневая директория. Если вы направите домен в корень проекта, злоумышленники смогут скачать ваш файл .env со всеми паролями от баз данных и платежных шлюзов, просто обратившись к yoursite.com/.env.
Когда Nginx смотрит в папку public, файл index.php внутри нее перехватывает запросы и загружает ядро фреймворка из директорий выше, которые недоступны из интернета напрямую.
server {
listen 80;
server_name yourdomain.com;
# КРИТИЧЕСКИ ВАЖНО: Document Root указывает на папку public!
root /var/www/shop/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 ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
Настройка файла .env для Production
При переносе проекта на сервер вы создаете новый файл .env (он не переносится через Git). В нем необходимо изменить ключевые параметры:
APP_ENV=production— сообщает фреймворку, что мы в боевом режиме.APP_DEBUG=false— ОБЯЗАТЕЛЬНО! Отключает вывод детальных ошибок на экран. Если оставить true, пользователи увидят ваш код и пароли при любой ошибке.APP_URL=https://yourdomain.com— для правильной генерации ссылок.- Пароли от базы данных сервера (DB_DATABASE, DB_USERNAME, DB_PASSWORD).
- Боевые ключи Stripe/Vipps вместо тестовых.
# Настройка прав доступа (Permissions)
# Веб-серверу (обычно пользователь www-data) нужны права на запись в две папки:
cd /var/www/shop
# Передаем владельца директорий пользователю веб-сервера
sudo chown -R www-data:www-data storage
sudo chown -R www-data:www-data bootstrap/cache
# Устанавливаем права 775 (чтение, запись, выполнение для владельца и группы)
sudo chmod -R 775 storage
sudo chmod -R 775 bootstrap/cache
Миграции базы данных на Production
После загрузки кода и настройки .env нужно создать таблицы в базе данных сервера. При выполнении команды php artisan migrate в режиме production (когда APP_ENV=production), Laravel заботливо спросит вас: "Вы действительно хотите запустить миграции в production? Это может удалить данные". Поскольку процесс деплоя часто автоматизируют скриптами, этот вопрос остановит выполнение скрипта. Чтобы подтвердить действие автоматически, используется специальный флаг.
Какой флаг нужно добавить к команде php artisan migrate, чтобы запустить миграции на production сервере без интерактивного подтверждения?
Флеш-карточки
APP_DEBUG=false
Нажмите, чтобы увидеть ответ
Самая важная настройка .env на сервере. Скрывает стек трейс ошибок от пользователей, показывая стандартную страницу '500 Server Error'.
Нажмите, чтобы вернуться
Document Root (public/)
Нажмите, чтобы увидеть ответ
Директория, в которую должен быть направлен веб-сервер (Nginx/Apache), чтобы предотвратить прямой доступ к системным файлам Laravel.
Нажмите, чтобы вернуться
storage и bootstrap/cache
Нажмите, чтобы увидеть ответ
Две директории в Laravel, на которые необходимо выдать права на запись (write permissions) пользователю веб-сервера.
Нажмите, чтобы вернуться