← All posts

Azure App Service vs a $5 VPS for ASP.NET Core: real monthly cost in 2026

“Just use App Service” is easy advice until the bill arrives. Here’s what Azure’s own pricing actually says for ASP.NET Core on Linux, next to what the same app costs on a VPS — no guessing, no vendor’s “starting at” headline number.

Azure App Service, Linux, US East — per month

All figures below are hourly rates from Azure’s own Retail Prices API (serviceName eq 'Azure App Service', armRegionName eq 'eastus', priceType eq 'Consumption'), queried September 12, 2026, converted at 730 hours/month — the same convention Azure’s and AWS’s own calculators use. See also Azure’s App Service pricing page for the current rate in your region.

TierSpecs$/hour$/monthWhat you get
Basic B11 core, 1.75 GB$0.017$12.41Custom domain + HTTPS, no autoscale, no slots
Basic B22 core, 3.5 GB$0.034$24.82Same as B1, more compute
Basic B34 core, 7 GB$0.067$48.91Same as B1, more compute
Standard S11 core, 1.75 GB$0.095$69.35Autoscale, 5 staging slots, daily backups
Standard S22 core, 3.5 GB$0.19$138.70Same as S1, more compute
Standard S34 core, 7 GB$0.38$277.40Same as S1, more compute
Premium v3 P1v32 core, 8 GB$0.155$113.15More slots, VNet integration, private endpoints

Two things jump out. First, Basic tier — the cheapest one that still gets you a custom domain and a real SSL binding — has no autoscaling and no deployment slots; those only show up starting at Standard, which triples the price. Second, none of this includes the database: Azure Database for PostgreSQL or SQL Server is billed as a separate resource on top of whatever App Service tier you picked.

The database is a separate bill

An Azure Database for PostgreSQL Flexible Server, Burstable tier’s smallest size (1 vCore), runs $0.017/hour — about $12.41/month, the same as App Service’s own B1 — for compute alone, checked from the same Retail Prices API filtered to serviceName eq 'Azure Database for PostgreSQL'. Storage is billed separately again, at $0.115/GB/month, so 32 GB adds another $3.68/month: roughly $16/month more, on top of whichever App Service plan you picked. Azure SQL Database’s serverless tier follows the same pattern: compute and storage billed independently from the web app that talks to it. A DotDeployer server runs PostgreSQL or SQL Server directly on the same box the app runs on, so there’s no second resource, no second bill, and no cross-service network latency between the app and its database — just the one server cost from the table above.

Bandwidth and always-on

App Service bills egress bandwidth separately once you’re past the free monthly allowance, and on Basic/Standard tiers the app can idle down and take a cold-start hit unless “Always On” is enabled — itself only available from Basic tier upward, another reason the free/shared tiers aren’t a real option for anything serving traffic. Hetzner and DigitalOcean both include a generous bandwidth allowance with every plan (check each provider’s own pricing page for the current figure for the size you pick), and the app never idles down, because there’s no serverless billing model underneath it — it’s a systemd service that’s either running or it isn’t.

A VPS, for comparison

ServerSpecs$/monthSource
Hetzner CX222 vCPU, 4 GB~$4.50Hetzner Cloud pricing
DigitalOcean Basic1 vCPU, 1 GB$6.00DigitalOcean Droplet pricing

Either one already has more RAM than Azure’s B1, for a third of the price — and PostgreSQL or SQL Server runs on the same box at no extra charge, because there’s no separate managed-database product to buy. DotDeployer’s own fee ($12–$39/month, see pricing) is the only thing layered on top, and it’s flat regardless of how large the server is.

So the honest comparison for a small ASP.NET Core app is closer to $12 (DotDeployer Solo) + $4.50–$6 (the server) ≈ $17/month with a database included, against $12.41/month (Azure B1) with no autoscale, no slots, and a database that’s billed separately — or $69.35+/month (Azure S1) once you actually want the features App Service is usually recommended for.

Putting it together

A solo developer running one ASP.NET Core API with a Postgres database, on Azure B1 plus a Burstable Postgres instance, lands around $12.41 + $16 ≈ $28.41/month, with no autoscale and no staging slot. The same app on DotDeployer Solo ($12/month) plus a Hetzner CX22 (~$4.50/month) lands around $16.50/month, with PostgreSQL on the same box, release-based rollback, and root access — for less than the database bill alone on the Azure side.

What you give up moving off App Service

This isn’t a one-sided trade. App Service’s deployment slots let you swap a staging build into production with effectively zero downtime and an instant swap-back if something’s wrong — DotDeployer’s answer is a release/rollback pattern (previous releases kept on disk, one-click revert) rather than a live traffic swap, which is nearly as fast but not the identical mechanism. Autoscale reacts to load automatically; on a VPS, scaling means resizing the server yourself (a few clicks at the provider, then a restart) rather than it happening without you. And App Service’s tighter integration with the rest of Azure — Entra ID, VNet peering into other Azure resources, existing compliance certifications — is worth real money to a team that already depends on it.

What you get back

Root access to a real Ubuntu box you can SSH into and inspect, instead of a managed sandbox with no shell. A price that doesn’t jump 3x to unlock features (deploy slots, backups) that are table stakes elsewhere. PostgreSQL or SQL Server on the same server instead of a separate billed product. And nothing proprietary on disk — if you ever stop using DotDeployer, the server, the app, and the database are still yours, running exactly as they were.

When App Service is still the right call

If your company already runs on Azure and needs Entra ID single sign-on, VNet-level network isolation from other Azure resources, or a compliance program (HIPAA, FedRAMP) that’s already built around App Service, the platform integration is worth more than the price difference. Small teams and solo developers paying full Standard-tier prices just to get autoscale and a staging slot for a low-traffic app are the ones actually overpaying — that’s the audience this comparison is for. See the full feature-by-feature breakdown on the DotDeployer vs Azure App Service comparison page.

Deploy it with DotDeployer

Point DotDeployer at a Hetzner or DigitalOcean server instead, and get HTTPS, restarts, PostgreSQL or SQL Server, and one-click rollbacks without an App Service bill.

Deploy to Hetzner with DotDeployer · Getting started