Skip to main content
Percher is still being built, but you can try it out with a free account right now!
← All deploy guides
Deploy guide · runtime = "docker"

Ship Laravel (PHP) in ~2 minutes.

Laravel is PHP's mature fullstack framework — Eloquent ORM, Blade templates, queues, scheduler, broadcasting. The Percher template ships a minimal PHP 8.3 starter; you can upgrade to full Laravel by running `composer create-project laravel/laravel .` in the project root.

Why Percher fits

  • PHP-FPM in front of Caddy is a well-trodden pairing — no platform-specific gotchas.
  • Use an external Postgres (Neon, Supabase, your own) or MySQL via `DATABASE_URL`; for lighter weight, opt into the managed PocketBase sidecar with `[data] mode = "pocketbase"`.

Quick start

bunx percher create my-app --template laravel
cd my-app
bunx percher publish

The first command scaffolds a working Laravel (PHP) project plus a percher.toml. Publish builds and deploys it, then prints the live URL.

percher.toml

The canonical config for a Laravel (PHP) app on Percher. bunx percher init generates this automatically when it detects Laravel (PHP) in your project.

[app]
name = "my-app"
runtime = "docker"
framework = "laravel"

[web]
port = 8080
health = "/"

Common gotchas

  • Percher doesn't provision a managed Postgres or MySQL today. Set `DATABASE_URL` (or Laravel's individual `DB_*` env vars) via `bunx percher env set` and point at any external provider.
  • Laravel's `php artisan migrate` should run as part of your container entrypoint, not the build step — it needs `DATABASE_URL` which is set at runtime, not build time.
  • `storage/` and `bootstrap/cache/` must be writable. Confirm the Dockerfile chowns them to the runtime user.
  • Set `APP_KEY` via `bunx percher env set APP_KEY=$(php artisan key:generate --show)` before the first deploy.

Related docs

Ready to deploy Laravel (PHP)?

Start on the Free plan. No credit card, live in ~2 minutes.

Sign up free →