← Blog

Running Laravel on your own DigitalOcean droplet, without Forge

Railyard

October 4, 2026

Laravel Forge exists because configuring a DigitalOcean droplet correctly — Nginx or Octane, PHP-FPM, a queue worker, the scheduler, TLS, zero-downtime deploys — is real work that most teams would rather pay to skip. The part worth separating out: that configuration work is a one-time problem, not a reason to pay a recurring fee on top of the droplet you’re already paying DigitalOcean for.

What actually needs to happen on the droplet

Every one of these is real setup, not optional polish: composer install, php artisan migrate --force before the new code takes traffic, APP_KEY generated and kept stable across deploys, a queue worker running alongside the web process without stepping on it, php artisan schedule:run firing on time, and a zero-downtime swap so a deploy doesn’t drop requests mid-release.

Connecting your own droplet

Servers → Add a server → Create on your cloud → DigitalOcean

A personal access token from DigitalOcean’s control panel (API → generate a token with read and write access) is all that’s needed — Railyard provisions the droplet directly in your own DigitalOcean account, at DigitalOcean’s own price, with no markup. s-1vcpu-2gb (1 vCPU, 2 GB) is a reasonable starting size for a single Laravel app; Frankfurt or Amsterdam if the data needs to stay in the EU.

Already have a droplet running? Bring your own server works the same way against any Ubuntu 22.04/24.04 box with passwordless sudo and ports 22/80/443 open — no need to provision a fresh one just to connect it.

What happens once the repo’s connected

railyard create my-app https://github.com/me/my-app --addons mysql,redis

composer.json and .env.example are read to fill in the database engine, php artisan migrate --force as the release step, and APP_KEY generated once in Laravel’s own format. laravel/horizon or laravel/octane installed gets detected and wired up the same way — see the full Laravel docs for the exact detection rules. Every push after the first rebuilds and redeploys on the same droplet, with the zero-downtime swap handled automatically.

The actual comparison

Forge’s value is real — it’s solving exactly the problem above. The question worth asking is just where that value should live: as a markup on every droplet forever, or as a one-time platform choice on infrastructure that’s already yours either way. Either path ends with a working, properly configured droplet; only one of them keeps charging after the configuration is done.

Full reference: Laravel docs, Add a server.

Connect your DigitalOcean account.

A personal access token and Railyard provisions, configures and deploys to your own droplet directly.

Free plan, no card, and 14 days of Pro for every new team. One flat price per team.