PaaS infrastructure that works everywhere

Laravel hosting and deployment

Deploy Laravel from Git: PHP 8.3, Composer, migrations, MySQL and PostgreSQL. Our own servers in a data center, billing in rubles, automatic SSL and custom domains. $6 free balance on sign-up.

Auto-deploy from Git

The platform pulls the code from your repository, builds the project and runs it.

Ready-made environment

No Nginx or Linux setup required. Reliable RelaxNet servers under the hood.

Custom domains and SSL

Connect your domain in one click, and the platform issues a Let's Encrypt SSL certificate automatically.

RelaxNet deploys Laravel apps straight from your repository: the platform finds composer.json, installs dependencies, prepares a PHP 8.3 environment with the extensions you need and serves the app over HTTPS. No manual nginx, php-fpm, storage permissions or certificate renewal.

The app runs on FrankenPHP — Caddy with PHP built in: a single process serves both static files and PHP code instead of a three-daemon stack. The infrastructure runs on our own servers in a data center, projects are reachable from anywhere, and billing is in rubles — the usual PHP routine of renting and configuring a VPS is replaced by a deploy on git push.

How to deploy Laravel

1. Connect your repository

Pick the repository with your Laravel project on GitHub, GitLab, GitFlic or GitVerse and choose a branch. Stack detection finds composer.json with laravel/framework and selects the PHP builder — nothing to configure.

2. Set APP_KEY and environment variables

This is the only required step. Without APP_KEY, Laravel returns a 500 on every request. Generate the key locally and add it to the project's environment variables together with your database settings — there's no need to commit .env to the repository.

# locally: get a key
php artisan key:generate --show
# → base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxx

# in the project's environment variables:
APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxx
APP_ENV=production
APP_DEBUG=false
APP_URL=https://your-domain.com
DB_CONNECTION=pgsql
DB_HOST=...
DB_DATABASE=...
DB_USERNAME=...
DB_PASSWORD=...

3. Enable migrations if you need them

Migrations don't run on startup by default — an automatic migrate on every restart is risky for a production database. To have the platform run them on deploy, add the RUN_MIGRATIONS variable set to true.

RUN_MIGRATIONS=true   # php artisan migrate --force on startup

4. Deploy and connect a domain

Once built, the app is available at a technical address. Add your own domain in the project settings: create an A record, and the platform issues and renews SSL automatically. With auto-deploy on, every push to the selected branch rebuilds the project.

Platform comparison

PlatformStatusPayment
Plain VPSWorksnginx, php-fpm, SSL — all by hand
RelaxNetAuto-deploy from GitRUB, $6 free balance

The typical route for Laravel is to rent a VPS and configure everything by hand, or to pay for Forge on top of the server cost. RelaxNet covers the same workflow with deploys from your repository: the platform handles the build, the PHP environment, HTTPS and restarts on failure, and you pay in rubles.

Common errors and fixes

500 Server Error right after deploy

Nine times out of ten, APP_KEY isn't set. Generate a key with php artisan key:generate --show, add it to the project's environment variables and redeploy.

The project was built as a frontend instead of Laravel

Laravel ships a package.json with Vite for building assets, so stack detection may have mistaken the project for a frontend. Open the project settings and select the PHP / Laravel builder manually.

The stream or file could not be opened / storage permission error

The storage and bootstrap/cache directories must be writable — the platform creates them and makes them writable during the build. If the error persists, make sure they aren't excluded entirely in .gitignore: the directories themselves must exist, with a .gitkeep inside.

Uploaded files disappear after a deploy

The container file system is reset on every rebuild, so storage/app/public won't work for user uploads. Use the platform's file storage via the s3 driver — links keep working across deploys.

SQLSTATE: connection refused during migrations

Check DB_HOST and DB_PORT: inside a container, localhost points to the container itself, not to the database server. Use the database address provided by the platform or an external host.

FAQ

Which PHP version is used?

PHP 8.3 with the pdo_mysql, pdo_pgsql, mbstring, bcmath, gd, zip, intl, opcache and redis extensions. If you need a different build, bring your own Dockerfile.

Do I need a Dockerfile for Laravel?

No. The platform detects the project by composer.json and builds it for you. A Dockerfile is only needed for non-standard system dependencies.

How are database migrations run?

They don't run by default — this protects a production database from an automatic migrate on every restart. Turn them on with RUN_MIGRATIONS=true.

Are queues and the scheduler supported?

Yes: queue:work or schedule:work is deployed as a separate project on the platform, with the same environment variables and access to the shared database or Redis.

Does Laravel Vite work for building assets?

Yes, assets are built while the image is being built. The project must be detected as a PHP stack rather than a frontend — select the builder manually if needed.

Can I deploy Symfony or plain PHP?

Yes, the same builder handles Symfony, Slim, Yii2 and sites without a framework: the document root is detected automatically by the presence of public/index.php.