Laravel
November 30, 2023

Публикация проекта 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&reg=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&reg=35&orig=http%3A%2F%2Fdomain%2Fbuild%2Fassets%2Fapp-22952af5.js:1 GET http://r.rrzb.ru/?id=9ffb2f72feebf491bbfe60bc713f5bc2f529&reg=35&orig=http%3A%2F%2Fdomain%2Fbuild%2Fassets%2Fapp-22952af5.js net::ERR_FAILED 200 (OK)

Публикация проекта на протоколе HTTP небезопасна. Без зашифрованных запросов, проходящих через HTTPS, нельзя быть уверенным, что между сайтом и посетителями больше никого нет. Очень хорошо, что есть политика CORS (почитать о CORS на Хабре), которая блокирует такие кроссдоменные запросы.

Почитать про подобные инъекции.

Установка сертификата решила проблему. Дополнительно, я включила на хостинге редирект с http на https.

Всё работает. Аминь.

Отдельно хочется выразить благодарность тех. поддержке хостинга BeGet за оперативные и исчерпывающие консультации.