# Laravel on Fly.io

Canonical: https://inetgeek.com/stacks/laravel-on-fly-io/

Fly.io publishes its own guide for deploying Laravel.

PHP web framework with an ORM, queue workers and a scheduler that expects a persistent process.

## What Laravel needs

Every host claims to run Laravel, so the claim on its own decides nothing. These are the things Laravel requires from the platform underneath it, and what Fly.io publishes about each. Fly.io documents 4 of the 4.

| Requirement | Fly.io | Why it matters |
| --- | --- | --- |
| Persistent processes | Supported — A stopped or suspended Machine still bills for its root filesystem at $0.15 per GB per month. | Queue workers and Horizon are long-running processes, not requests. They have to stay up between jobs. |
| Managed databases | Supported | Eloquent, migrations and the default session and cache drivers all expect a relational database. |
| Scheduled jobs | Limited | Laravel's scheduler is one cron entry calling schedule:run every minute. Without cron, nothing scheduled ever fires. |
| Persistent storage | Supported | The default filesystem disk writes uploads under storage/app. On an ephemeral filesystem those files disappear at the next deploy. |

- Persistent processes source: https://docs.fly.io/about/billing/
- Managed databases source: https://docs.fly.io/about/pricing/
- Scheduled jobs source: https://fly.io/docs/machines/flyctl/fly-machine-run/
- Persistent storage source: https://fly.io/docs/volumes/overview/

## What Fly.io documents

> We're about to launch your Laravel app on Fly.io. Here's what you're getting:

Source: https://fly.io/docs/laravel/

### Laravel features on Fly.io

- **laravel_scheduler**: Supported — You may need to run Laravel's scheduler (via cron) or queue workers. [...] We can start the cron daemon, which is pre-configured to run php artisan schedule:run. ([source](https://fly.io/docs/laravel/the-basics/cron-and-queues/))
- **storage_disk_mount**: Supported — To mount a volume named "storage_vol" to this Fly App [...] [mounts] source="storage_vol" destination="/var/www/html/storage" ([source](https://fly.io/docs/laravel/the-basics/laravel-volume-storage/))
- **managed_mysql**: Limited — You can run your own MySQL Fly App, or set up a PlanetScale MySQL-compatible serverless database. [...] To run MySQL as a Fly App , follow our guide here . ([source](https://fly.io/docs/laravel/database-guides/laravel-mysql/))
- **native_php_runtime**: Limited — This would detect that your project is built with Laravel. [...] Dockerfile - Used to build a container image that is run in fly ([source](https://fly.io/docs/laravel/))

## What it costs to run there

|  | Fly.io |
| --- | --- |
| Pricing model | Usage-based, no compute plan tiers; billing is pro-rated for the time resources are provisioned. |
| When you exceed a cap | No plan cap to exceed — Fly bills per second for provisioned resources. The only documented enforcement is unspecified automated scaling limits, which surface as an error message (platform-wide, all plans) |
| Regions | 17 regions |

- Pricing model source: https://fly.io/docs/about/pricing/
- When you exceed a cap source: https://fly.io/docs/about/pricing/
- Regions source: https://docs.fly.io/reference/regions/

## Whether it suits you

Workloads that ship as Docker images and need placement in particular regions. Billing is purely usage-based with no plan tiers, which suits spiky or region-pinned traffic better than a flat monthly fee.

Consider something else if: You want a predictable flat bill rather than charges that track the resources provisioned for each app.

Written by Palash Bagchi on 2026-09-05. This is a recommendation, not a sourced fact — it carries no citation because it is an opinion.

## Related

- Best hosting for Laravel: https://inetgeek.com/stacks/laravel/
- Fly.io: https://inetgeek.com/hosting/fly-io/
