Laravel, queue workers and scheduler included.
PHP-FPM, a managed database, a queue worker and the scheduler cron all run on one dedicated instance. A push deploys them. Once the app is here, CodeHerder ships the small feature requests.
When this isn't the right fit Does your Laravel app never queue a job or run a scheduled task? Then it is a slightly smaller shape. Say so on the quote form and the worker line item drops off.
What it needs to run
The shape of the workload, before any hosting decision gets made.
- Runtime
- PHP-FPM, long-running
- Build step
- Composer install + artisan migrate, run on deploy
- Standing process?
- Yes: a web process, a queue worker and the scheduler cron
- Data store
- MySQL or Postgres, via your existing Eloquent migrations
- Verdict
- Dedicated, budgeted for the worker as well as the web request
How it runs here
The same management as every other tier we run, written in Laravel's own terms.
Provisioning
A dedicated instance with PHP-FPM, a queue worker and the scheduler cron, all set up on day one.
Deploys
Push to main. The pipeline runs Composer and your migrations, then restarts the web process and the queue worker.
Data + backups
A managed database tier next to the app, backed up every night with point-in-time recovery. Eloquent migrations run against it unchanged.
TLS / DNS / monitoring
Certificates renew on their own and we manage DNS end to end. Monitoring restarts a stalled queue worker and alerts a person if it keeps failing.
What a visitor sees during a restart →
Moving it in
Already running somewhere else? The full migration playbook covers the general steps. Below is what is specific to Laravel.
- 1
Point us at the repo
We need read access to the repo and the current database.
- 2
We stand up a copy
We run Composer and the migrations, and wire up the queue worker and the scheduler on a staging copy first.
- 3
Cutover on your schedule
DNS and TLS switch over with little-to-no downtime. A rollback stays ready if anything looks wrong.
- Your old host may have run the queue worker on the web server’s box. Here it needs its own line item, or queued jobs never run.
- The scheduler cron (`php artisan schedule:run`) must be in the instance’s crontab. It is easy to move the app and forget the one line that runs it every minute.
- Config caching (`config:cache`, `route:cache`) must run on every deploy. Run it once only and a stale cache survives a code change.
The loop, on Laravel
Laravel apps grow one feature at a time: a new controller, a queued job, a scheduled report. Each one is a good size for a brief.
- 01Build
CustomLabs
Bring a Laravel app you already built. Or CustomLabs designs and builds the first version to Laravel’s own conventions.
- 02Iterate
CodeHerder
Brief a new controller, a queued job or a scheduled report in plain language. An agent opens a pull request against the real Laravel app.
- 03Run
CustomHosted
PHP-FPM, the queue worker and the scheduler cron on one dedicated instance, with a managed database. We patch it on a schedule.
- The brief
- A queued job that emails a weekly PDF report, plus a scheduler entry that runs it every Monday.
- What the pull request holds
- The job, the mailable and the scheduler entry, in one pull request the agent opens against the real repo.
- What happens next
- A human reviews and merges. It ships through the same pipeline.
- A real one
- The site is blinding at night (+751 −258 · 19 files · merged 2026-07-31).
The queue worker is part of the app
Laravel makes a job easy to dispatch. The gap we find most often: a host runs the web process and forgets the process that runs the jobs.
Adding ShouldQueue to a job class takes two seconds in the editor. In production it is a permanent commitment. From then on, the app has a second process that must run, be monitored, and restart on every deploy. Without it, every queued mailable, notification and background task piles up in a table nobody watches. So we provision the queue worker as part of the app.
The scheduler is a quieter version of the same problem. php artisan schedule:run does nothing on its own. Something must call it every minute, and on a fresh instance nothing does until it is in the crontab. An app can look fine in the browser while its reports, cleanup jobs and reminders stay unrun for weeks. See Background jobs for how we wire the clock on day one.
None of this changes if the queue driver is Redis, a database table or Horizon. The instance still needs a second process, running all the time, with its own restart policy. That is why the Laravel starting configuration on this page budgets for the worker by default.
A starting configuration
A production Laravel app: a dedicated instance sized for web and worker, a managed database, and the iteration add-on.
- Base plan
- Dedicated M
- Iteration — CodeHerder loop
- +$25/mo
- Managed database
- DB Standard — +$25/mo
- Estimated total
- $109/mo
Laravel questions
The questions this stack raises on its own. General hosting questions live on the homepage.
01Do you run the queue worker and the scheduler for us?
Yes. We set up both when we provision the instance.
02What if we don’t use queued jobs at all?
Then the instance runs lighter and we can size it down. Tell us on the quote form and we leave out the worker process.
03Can you move an app with Horizon or a Redis-backed queue?
Yes. Redis runs next to the app the same way the database does, and the Horizon dashboard keeps working here.
04Can CodeHerder write Eloquent migrations?
Yes. A briefed schema change comes back as a pull request with the migration file in it. Someone reviews it before it runs against real data.
05Do you support Laravel Octane?
Yes, but Octane changes the process model. Tell us if you run it, and we provision a long-lived server process instead of the usual FPM pool.
Keep exploring
- Databases
Managed database tiers, all backed up every night. Point-in-time recovery starts at DB Standard.
- Dedicated compute
A fixed-price instance sized to the workload, with a static IP and full control.
- Keep shipping without a dev team
The Build → Iterate → Run loop, written as a how-to.
- Email
The path your queued job sends mail through, the records it needs, and the limits.
Ready to start?
Tell us what you're running — one fixed monthly rate, within a business day.