Деплой Laravel приложений
Развёртывание Laravel из Git: PHP 8.3, Composer, миграции, MySQL и PostgreSQL. Серверы в РФ, оплата в рублях, авто-SSL и свой домен. Бесплатный старт.
Автодеплой из Git
Платформа сама скачает код с Репозитория, соберет проект и запустит его.
Готовая среда
Не нужно настраивать Nginx или Linux. Под капотом надежные серверы RelaxDev.
Свои домены и SSL
Привяжите свой домен в 1 клик, а платформа автоматически выпустит Let's Encrypt SSL.
RelaxDev разворачивает Laravel-приложения прямо из репозитория: платформа находит composer.json, ставит зависимости, готовит окружение PHP 8.3 с нужными расширениями и поднимает приложение под HTTPS. Настраивать nginx, php-fpm, права на storage и обновление сертификатов вручную не нужно.
Приложение работает на FrankenPHP — это Caddy со встроенным PHP: один процесс отдаёт и статику, и PHP-код, без связки из трёх демонов. Инфраструктура физически в России, оплата в рублях, для юрлиц доступен договор — привычный для PHP-разработчиков сценарий с арендой VPS закрывается деплоем из git push.
Как задеплоить Laravel?
1. Подключите репозиторий
Выберите репозиторий с Laravel-проектом в GitHub, GitLab, GitFlic или GitVerse и укажите ветку. Автоопределение стека находит composer.json с laravel/framework и выбирает PHP-сборщик — вмешиваться не требуется.
2. Задайте APP_KEY и переменные окружения
Это единственный обязательный шаг. Без APP_KEY Laravel вернёт 500 на любой запрос. Сгенерируйте ключ локально и добавьте его в переменные окружения проекта вместе с настройками базы — файл .env в репозиторий коммитить не нужно.
# локально: получить ключ
php artisan key:generate --show
# → base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxx
# в переменные окружения проекта:
APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxx
APP_ENV=production
APP_DEBUG=false
APP_URL=https://ваш-домен.ru
DB_CONNECTION=pgsql
DB_HOST=...
DB_DATABASE=...
DB_USERNAME=...
DB_PASSWORD=...3. Включите миграции при необходимости
По умолчанию миграции при старте не выполняются — автоматический migrate на каждом рестарте опасен для боевой базы. Чтобы платформа прогоняла их при деплое, добавьте переменную RUN_MIGRATIONS со значением true.
RUN_MIGRATIONS=true # php artisan migrate --force при старте4. Задеплойте и подключите домен
После сборки приложение доступно на техническом адресе. Свой домен добавляется в настройках проекта: прописываете A-запись, платформа выпускает и продлевает SSL автоматически. При включённом автодеплое каждый push в выбранную ветку пересобирает проект.
Сравнение платформ
| Платформа | Статус | Оплата |
|---|---|---|
| Heroku | Не работает с РФ | Оплата картой РФ невозможна |
| Обычный VPS | Работает | nginx, php-fpm, SSL — вручную |
| Laravel Forge | Доступен частично | Валютная подписка + свой сервер |
| RelaxDev | Серверы в РФ | Рубли, есть бесплатный тариф |
Типовой путь для Laravel в России — арендовать VPS и настроить всё руками либо платить за Forge в валюте поверх стоимости сервера. RelaxDev закрывает тот же сценарий деплоем из репозитория: сборка, PHP-окружение, HTTPS и перезапуск при сбое берёт на себя платформа, а оплата идёт в рублях.
Частые ошибки и решения
500 Server Error сразу после деплоя
В девяти случаях из десяти не задан APP_KEY. Сгенерируйте ключ командой php artisan key:generate --show и добавьте его в переменные окружения проекта, затем перезапустите деплой.
Проект собрался как фронтенд вместо Laravel
Laravel содержит package.json с Vite для сборки ассетов, и автодетект мог принять проект за фронтенд. Откройте настройки проекта и выберите сборщик PHP / Laravel вручную.
The stream or file could not be opened / ошибка прав на storage
Каталоги storage и bootstrap/cache должны быть доступны на запись — платформа создаёт и открывает их при сборке. Если ошибка осталась, проверьте, что они не добавлены в .gitignore целиком: нужны сами каталоги с .gitkeep.
Загруженные файлы пропадают после деплоя
Файловая система контейнера обнуляется при пересборке, поэтому storage/app/public не годится для пользовательских загрузок. Используйте файловое хранилище платформы через драйвер s3 — ссылки останутся рабочими между деплоями.
SQLSTATE: connection refused при миграциях
Проверьте DB_HOST и DB_PORT: внутри контейнера localhost указывает на сам контейнер, а не на сервер базы. Используйте адрес базы, выданный платформой, или внешний хост.
FAQ
Какая версия PHP используется?
PHP 8.3 с расширениями pdo_mysql, pdo_pgsql, mbstring, bcmath, gd, zip, intl, opcache и redis. Если нужна другая сборка, подключите собственный Dockerfile.
Нужно ли писать Dockerfile для Laravel?
Нет. Платформа определяет проект по composer.json и собирает его сама. Dockerfile нужен только для нестандартных системных зависимостей.
Как выполняются миграции базы данных?
По умолчанию не выполняются — это защита боевой базы от автоматического migrate при каждом рестарте. Включаются переменной RUN_MIGRATIONS=true.
Поддерживаются ли очереди и планировщик?
Да: queue:work или schedule:work разворачивается отдельным проектом на платформе с теми же переменными окружения и доступом к общей базе или Redis.
Работает ли Laravel Vite для сборки ассетов?
Да, ассеты собираются на этапе сборки образа. Важно, чтобы проект определился именно как PHP-стек, а не как фронтенд — при необходимости выберите сборщик вручную.
Можно ли развернуть Symfony или чистый PHP?
Да, тот же сборщик обрабатывает Symfony, Slim, Yii2 и сайты без фреймворка: document root определяется автоматически по наличию public/index.php.