Build1 distinct publisher3 min readPublished
Laravel Cloud keeps the app container warm on EC2, which retires the cold-start argument and leaves the decision resting on whether you need root, an extension outside the platform image, or your own Nginx config.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Forge's zero-downtime deploy is a symlink swap, and nothing more exotic than that. Each deploy clones the repository into a timestamped directory under `releases/`, runs your deployment script inside it, then repoints the `current` symlink [10]. Forge keeps the last four releases for instant rollback [11], which leaves three older ones to fall back to once you count the release you are running [16]. That is the whole rollback story. It is a good one, because it fails in ways you can inspect with `ls`.
The failure mode is state. `.env` and `storage` have to be listed as shared paths in the site's zero-downtime settings, or each release ships with an empty storage directory: uploaded files vanish and sessions break [13]. The sample script also ends with `php artisan migrate --force`, and `--force` exists precisely to bypass the production confirmation prompt [12]. The prompt you are skipping is the one that would have asked whether you meant it.
Cloud runs that same list on your behalf. According to the dev.to comparison, it executes `composer install --no-dev`, the config, route and view caches, and migrations on every deploy, provisions a preview environment per branch, scales replicas with traffic, rotates SSL certificates and holds encrypted environment variables [4]. The first invoice for that is architectural rather than monetary: no SSH to the instance, no PHP extension outside the platform image, no direct Nginx configuration, and no long-lived daemon outside the provided worker abstraction [5].
The serverful framing is the part to read slowly. Cloud runs on Amazon EC2 and keeps the container warm between requests, so there are no Lambda cold starts [2][3]. That is a claim about the platform's architecture rather than about your p99. It transfers only if cold starts were on your list to begin with, which means bursty or low-volume traffic against a runtime that scales to zero. If your app already sits behind a permanently provisioned PHP-FPM pool on a Hetzner box that Forge configured for you [8], warm containers return something you already had.
Then the money. Starter carries no monthly subscription and bills only compute and bandwidth consumed, while Growth starts at $20/month with higher resource ceilings [6]. That floor is $240 a year [17] before a single request is metered, and the source is candid that usage billing is predictable under steady traffic and can spike with bursts [7]. Against a fixed-size server, you are buying elasticity and paying for it exactly when traffic is worst.
My read is that the exclusion list decides this, not the team's appetite for ops. If you need PostgreSQL 18, which Forge now supports for new deployments, or multiple queue worker groups, or one specific extension, Cloud is out and the only remaining question is whether Forge's DigitalOcean-backed Laravel VPS, with root and SSH and consolidated billing, beats building Ubuntu yourself [15][9]. If nobody on the team owns servers, the automation is cheaper than the hire. The wrong pick, as the guide puts it, costs money or engineering time or both [1], and the second cost is the one that does not show up on a pricing page.
Ranked by verification strength, evidence, and original report placement.
Three paths exist for getting a Laravel application into production: fully managed Laravel Cloud, Forge managing your own servers, or a VPS configured from scratch. Each represents a different point on the control-vs-convenience spectrum, and picking the wrong one costs you either money, engineering time, or both.
Laravel Cloud launched on February 24, 2025 alongside Laravel 12, and is a fully managed, serverful platform running on Amazon EC2.
On Laravel Cloud the application container stays warm between requests; there are no Lambda cold starts.
Laravel Cloud automatically provisions isolated environments (production, staging, preview per branch), runs composer install --no-dev, config/route/view cache and migrations on each deploy, scales replicas up and down based on traffic, rotates SSL certificates, and manages encrypted environment variables.
On Laravel Cloud you cannot SSH into the underlying instance, install custom PHP extensions not included in the platform image, configure Nginx directly, or run long-lived daemons outside of the provided worker abstraction.
Laravel Cloud's Starter plan carries no monthly subscription fee and bills only compute and bandwidth consumed; Growth plans begin at $20/month with higher resource ceilings.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · September 3, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
Build concurrency on one VPS is a division problem, and the app you serve pays the remainder1 distinct publisher
build
A 100-worker PHP-FPM pool tops out at 500 req/sec on a 200ms endpoint1 distinct publisher
build
Once the question needs a cube, you own the parser1 distinct publisher
build
EF Core's defaults pass code review, then meet the second replica1 distinct publisher
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
One author, many checkable specifics
Fourteen product facts and a single witness. The February launch date, the $20 Growth floor, the four-release retention window, PostgreSQL 18 support — all of it comes from one dev.to walkthrough, and none of it is set against Laravel's own documentation anywhere in this reporting. What raises the score is the texture: the deployment script, the Supervisor block with its stopwaitsecs, and the warning about an empty storage directory read like someone who has broken a site that way rather than someone paraphrasing a marketing page. Checkable, and unchecked.
Ship dates, no users
We can say two products exist and roughly when they arrived: Cloud generally available since February 2025, Forge's VPS since an October 2025 overhaul. Nothing here counts an application running on either, names a team that moved, or reports what a month of metered compute actually billed. Availability is not uptake and we decline to score it as though it were.
Slight, and mostly in the framing
The most quotable line — a container that stays warm, so no cold starts — is also the one nobody has independently timed. But the piece spends most of its length arguing against its own convenience: --force will migrate without asking, forget a shared path and uploads vanish, atomic deploys end at server one. Advice that catalogues its own failure modes is not being oversold. The small lift comes from the tidy three-way map, which quietly treats the Laravel-branded options as the whole territory.
Every road ends at a Laravel product
Cloud, Forge, Laravel VPS, then Envoyer once you need a second server: the exits from this piece are all paid first-party products, and the third paragraph routes readers to a companion deployment guide. No sponsorship is disclosed and none is needed for the shape to matter — this is ecosystem content, written to be maximally compatible with the ecosystem's own funnel, which is exactly why the competing panels and self-hosting stacks are absent rather than dismissed.
Solid on mechanics, thin on anything dated
Our read splits cleanly. The behavioural claims — symlink releases, shared paths, workers holding stale code until restart — are stable properties a reader will confirm within one deploy cycle, and we are comfortable with them. Everything with a date or a dollar sign has exactly one witness in a fast-moving product line, so treat the launch details, tier prices and database version support as current-as-written rather than established.