Публикация проекта Laravel 10 на хостинге BeGet (PHP 8.2, composer 2.6.5)
Решила попробовать писать на Laravel 10. Сгенерировала базовый проект и подключила систему авторизации Breeze, в которой уже реализованы функции Логин, Регистрация, Восстановление пароля и Профиль. Разбиралась, как публиковать такой проект на хостинге.
Описала все свои шаги и косяки, с которыми пришлось столкнутся на этом пути. Может быть этот материал будет полезен кому-то ещё.
- Удалила директорию
public_htmlиз директории созданной для сайта. - Включила доступ по SSH в левом меню в разделе Тех. информация. Зайти в терминал, можно прямо в веб-интерфейсе.
- Клон проекта из репозитория:
git clone https://domain/path_to_project.git . - На текущий момент на BeGet дефолтная версия
php 7.4. Другие версии PHP можно запустить с помощью командыphpX.X, гдеХ.Х— это конкретная версия интерпретатора. (Я запускаю:php8.2). - Создала БД.
- Прописала в
.envданные для коннекта к базе и настройки SMTP. Настройки для отправки почты:MAIL_MAILER=smtp MAIL_HOST=smtp.beget.com MAIL_PORT=465 MAIL_USERNAME=noreply@domain MAIL_PASSWORD=password MAIL_ENCRYPTION=ssl MAIL_FROM_ADDRESS=noreply@domain - Установила свежий
composerна сервере. Вот инструкция, как это сделать. - Выполнила установку пакетов проекта выбранным интерпретатором и установленной локально версией
composer:php8.2 ~/.local/bin/composer install - Выполнила миграцию данных:
php8.2 artisan migrate - Сгенерировала ключ приложения APP_KEY:
php8.2 artisan key:generate - Очистила кеш:
php8.2 artisan config:cache - Создала символьную ссылку
public_html, указывающую на каталогpublic:ln -s public public_html
Если для клиентской части приложения используется менеджер пакетов, то в папке public/build должен быть собранный клиентский код. Можно сгенерировать на клиенте (npm run build) и перенеси на сервер.
Развернула приложение сначала на домене без SSL и получила ошибку в консоли браузера:
Access to script at 'http://r.rrzb.ru/?id=9ffb2f72feebf491bbfe60bc713f5bc2f529®=35&orig=http%3A%2F%2Fdomain%2Fbuild%2Fassets%2Fapp-22952af5.js' (redirected from 'http://domain/build/assets/app-22952af5.js') from origin 'http://domain' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
r.rrzb.ru/?id=9ffb2f72feebf491bbfe60bc713f5bc2f529®=35&orig=http%3A%2F%2Fdomain%2Fbuild%2Fassets%2Fapp-22952af5.js:1
GET http://r.rrzb.ru/?id=9ffb2f72feebf491bbfe60bc713f5bc2f529®=35&orig=http%3A%2F%2Fdomain%2Fbuild%2Fassets%2Fapp-22952af5.js net::ERR_FAILED 200 (OK)
Публикация проекта на протоколе HTTP небезопасна. Без зашифрованных запросов, проходящих через HTTPS, нельзя быть уверенным, что между сайтом и посетителями больше никого нет. Очень хорошо, что есть политика CORS (почитать о CORS на Хабре), которая блокирует такие кроссдоменные запросы.
Почитать про подобные инъекции.
Установка сертификата решила проблему. Дополнительно, я включила на хостинге редирект с http на https.
Всё работает. Аминь.
Отдельно хочется выразить благодарность тех. поддержке хостинга BeGet за оперативные и исчерпывающие консультации.