Connect the repository, set the environment and the app goes live. Queues and the scheduler run too, with no hand-made cron and no ticket for every composer install.
Those six lines are the whole deploy: no SSH, no hand-made cron.
Laravel hosting is hosting that comes with the framework prerequisites already in place: the right PHP version, Composer and artisan, the document root on public, and a way to run background work such as queues and the scheduler. That is the real difference from shared hosting: there PHP lives only as long as one web request, and an always-on worker has nowhere to run.
A Laravel project runs on three kinds of infrastructure: shared hosting for low-traffic sites, a VPS for full control at the cost of maintenance, and a cloud platform that delivers deploys, scaling and background processing without server management. The right choice depends on whether the project needs a permanent queue worker.
This is the buying checklist. If a provider misses one item, the problem shows up later as an error, not on the sales page.
Laravel 11 needs PHP 8.2 or newer. PDO, mbstring, openssl, intl, gd and zip must be enabled, and the version must be changeable, not pinned.
If the domain points at the project root, .env and the source become readable from outside. The document root has to be the public folder.
Dependency install and commands such as migrate and config:cache should run at deploy time, without a ticket.
With Vite or Mix you need a place to run npm ci and npm run build, or the styles are never compiled.
Queues rely on a long-running process. Without a worker, jobs sit in the queue and the user waits on a screen that never finishes.
schedule:run has to fire every minute. The limited cron of shared hosting usually breaks right here.
File cache and a database queue work up to a point. Under real traffic, Redis is where the difference shows.
User uploads on a container’s local disk vanish with the next deploy; they belong on S3.
None of them is simply better. Read the table against what your project actually does.
| Metric | Shared hosting | VPS | Lexoya cloud platform |
|---|---|---|---|
| Resources | Shared with dozens of others | Dedicated, managed by you | Dedicated per project |
| Queues and workers | Usually absent or capped | Supervisor, set up by you | A separate worker project |
| Scheduler | Limited cron | Full cron | Called every minute |
| Deployment | Manual upload or Git on the box | Your own scripts | Push to git, automatic build |
| Maintenance and security | With the provider | With you | With us |
| Cost | Low and flat | Low, but your time is not | Usage-based, hourly |
For a simple company site with a few hundred daily visits, shared hosting is still the cheapest option. Once you have queues, workers or frequent deploys, the maintenance cost of a VPS outweighs the price difference.
Six steps from repository to domain. None of them needs SSH.
Connect GitHub, GitLab or Gitea and pick the main branch.
Choose the Laravel type. If the repo has a Dockerfile, point at its path; otherwise the built-in Laravel template is used.
Set APP_KEY, the database connection and QUEUE_CONNECTION. Secrets stay in the panel, not in the repository.
Build, dependency install and release run for you. Every stage has a log, and a failed stage says why.
Create a Supervisor project running php artisan queue:work so jobs are processed apart from web traffic.
Attach your domain or use the free subdomain; the SSL certificate is issued and renewed automatically.
Five settings that separate “it starts on the server” from “it works in production”.
Point the queue driver at Redis and run the worker separately. Failed jobs need retries and logs.
schedule:run fires every minute and runs your kernel; there is no cron entry to define in a panel.
Reverb takes its own port and domain and runs beside the main app. For heavy loads keep the worker and the socket server apart.
If you run on Redis, Horizon comes up too. Put authentication in front of its route.
Set FILESYSTEM_DISK=s3 so uploads survive every deploy and stay shared across releases.
Cost follows the resources the project consumes: CPU, memory, disk and traffic, billed hourly. There is no fixed plan with a hidden ceiling; you choose the shape and pay for that.
Most migration downtime comes from two places: transactional email and the payment gateway. Plan those two separately.
Dump the database and copy storage/app/public.
Push the repository without .env or vendor.
Set APP_URL, SESSION_DOMAIN and the new database connection.
Run migrate --force, then test the payment gateway and user login.
Change the domain record and keep the old host running until the new one is stable.
These are the errors that come up again and again in support.
Fix
Usually APP_KEY is empty or storage is not writable. Generate the key and fix the folder permissions.
Fix
The worker is down or QUEUE_CONNECTION points at the wrong driver. Start the worker project and fix the driver.
Fix
Files were written to the container’s local disk. Switch FILESYSTEM_DISK to S3.
Fix
The session domain no longer matches, or the proxy is not trusted. Set SESSION_DOMAIN and the trusted proxies.
Fix
Reaching packagist from inside Iran is not reliable. Run the deploy on the Germany cluster.
Fix
The front-end build did not run, or the config cache is stale. Add npm run build and config:cache.
On shared hosting PHP runs only to answer a request, and a permanent worker has no home. Laravel hosting keeps queues, the scheduler and artisan commands running.
Connect the repo, set the variables and watch the first deploy. The free subdomain and SSL are there from the start.
Start a Laravel deploy