The real cost of self-hosting Laravel in 2026: VPS vs Forge vs Vapor vs PaaS

10 June 2026 · 9 min read

Every few months someone posts a bill: "my side project costs $340/month on a PaaS and gets 200 visitors a day." The replies always split into two camps — "just use a $6 VPS" and "your time is worth more than that." Both camps are right, and both are hiding assumptions. Let's put actual numbers on it.

The honest comparison table

Three scenarios: a side project (one app, light traffic), a small business (three apps, moderate traffic), and a busy production app (one app, sustained traffic). Prices are June 2026, rounded.

Scenario 1: side project

  • Bare VPS (Hetzner CX22, 2 vCPU/4GB): ~$4.50/mo. You do everything.
  • VPS + Forge: $4.50 + $12 = ~$16.50/mo. Forge provisions and deploys; you still own backups/monitoring decisions.
  • Vapor (serverless): $39/mo base + AWS usage ≈ $45-60/mo.
  • Heroku-style PaaS (1 dyno + managed Postgres + Redis): $30-50/mo.

Scenario 2: three apps for a small business

  • Bare VPS (Hetzner CX32, 4 vCPU/8GB — comfortably hosts all three): ~$8/mo total.
  • VPS + Forge: ~$8 + $12 = ~$20/mo.
  • Vapor: $39 + 3× AWS usage ≈ $100-180/mo.
  • PaaS: 3× ($30-50) = $90-150/mo.

Scenario 3: one busy app (say, 50 req/s sustained)

  • Bare VPS (dedicated 8 vCPU/32GB): $40-60/mo.
  • Vapor / PaaS: this is where usage pricing bites — $300-900/mo is common, mostly database and bandwidth line items.

On infrastructure alone, the VPS wins every scenario by 4-15x. Which everyone knows. The argument was never about the server bill.

The bill nobody itemises: your hours

The honest case for PaaS is that the VPS path costs time. True — but how much time, and when? Having run multiple commercial Laravel apps on plain VPSes for years, here's the realistic breakdown:

  • Initial setup (server provisioning, hardening, deploy pipeline, backups, monitoring): 6-16 hours if you're figuring it out from scattered blog posts. Under 1 hour if you're working from a tested set of scripts and configs.
  • Ongoing maintenance: realistically 1-2 hours per month — applying the occasional non-security update, glancing at disk usage, renewing nothing because certbot does it. Security patches should be automatic (unattended-upgrades); if you're SSHing in weekly to run apt upgrade, your setup is wrong, not self-hosting.
  • Incidents: the scary one. A disk-full outage at 2am costs you an hour if you have a runbook and monitoring that alerted you at 85%, and a sleepless night plus reputation damage if you have neither.

Price your time at $100/hour. The PaaS premium in scenario 2 is roughly $80-130/month — about one hour of maintenance. If your setup is undisciplined, PaaS genuinely wins. If your setup is scripted and monitored, you're paying $1,000-1,500/year per project to avoid ~12 hours of mostly-pleasant work.

The break-even points

  • Choose PaaS when: you have one app, no ops appetite at all, traffic is spiky and unpredictable, or compliance forces managed infrastructure.
  • Choose VPS + a panel (Forge/Ploi, ~$12/mo) when: you want cheap hosting and one-click deploys but don't want to own the scripts.
  • Choose a bare VPS when: you run 2+ apps, you bill clients for hosting (the margin is yours), data residency matters, or you simply want to own your stack. The setup cost is a one-time investment that amortises across every app and every future server.
We packaged our entire production setup — provisioning, hardening, zero-downtime deploys, backups, monitoring and the 3am runbooks — as the Production Laravel Ops Kit ($39, one-time). It's the "under 1 hour" version of the setup column above.

Three costs people forget on each side

Forgotten VPS costs

  1. Backups need somewhere to live. Off-site object storage is nearly free (B2/R2), but you must set it up and test restores quarterly.
  2. Monitoring is not optional. Without alerting, your true cost includes outages you discover from customers. Budget either a tool or an afternoon to script it.
  3. The bus factor. If you're hit by a bus (or just on holiday), can a colleague operate the box? Runbooks fix this; tribal knowledge doesn't.

Forgotten PaaS costs

  1. Egress and add-ons compound. The $30 dyno becomes $140 with the Postgres plan you actually need, Redis, log retention and a metrics add-on.
  2. Lock-in has a price at exit. Migrating off a PaaS under duress (price hike, product sunset) is a project; migrating between VPS providers is an rsync.
  3. Limits arrive at the worst time. Function timeouts, payload caps and connection limits tend to surface mid-growth, exactly when you can least afford rearchitecting.

Bottom line

The infrastructure cost argument is settled — VPS by a mile. The real variable is whether your ops are scripted and monitored or artisanal and hopeful. Scripted self-hosting is cheaper than PaaS in every scenario above with 1-2 hours of monthly attention. Artisanal self-hosting is more expensive than anything, you just pay in adrenaline instead of dollars.