For one web app with a database, 8 GB VPS setups with backups and one off-site copy totaled $12.76 to $63.00 a month on November 5, 2026. The $12.76 is Hetzner's CX33, which goes in and out of stock, and the others started at $48.60. Managed stacks of that size totaled $125.90 to $251.30. On the server you also take on OS patching, the dump job and restores, and the rebuild when the host fails.
As priced, neither group has a database standby or second instance, so neither is highly available.
I read these numbers from pricing pages, price APIs and documentation on November 5, 2026, and they are list prices before tax. I didn't benchmark anything, order a server, or run this workload on any provider, so I can't tell you how it performs or which server size it needs.
My own bias is toward servers: "Katabench runs on three Hetzner servers inside one private VPN," as I wrote in July.
What Is the Difference Between a VPS, a PaaS and the Cloud?
The useful line is who operates the operating system. NIST's cloud definition gives an infrastructure customer control of the operating system, storage and deployed applications, so a rented VM counts as cloud. A platform customer manages nothing below the application.
You are choosing between a plain VM (Hetzner, DigitalOcean Droplets, Vultr, EC2), a panel on that VM (Dokploy, Coolify), an app platform (Render, Railway, App Platform, Azure App Service), and managed containers and databases (Fargate, Cloud Run, RDS, Cloud SQL).
A panel gives you a PaaS-like workflow on a server you still operate. Dokploy vs Coolify compares the two panels. You configure the panel, and it configures Docker and the proxy:
What Does the Same App Cost on Each?
This is the workload I priced:
- Web API: one always-on instance, 2 vCPU, 4 GB RAM, public HTTPS.
- PostgreSQL: 2 vCPU, 4 GB RAM, 50 GB storage, single node, daily backups.
- Cache: Redis-compatible, at least 250 MB, single node.
- Traffic: 100 GB out per month.
- Region: US East, except the Hetzner rows, which are Germany or Finland.
- Billing: public list price, no commitment or reservation discounts, permanent free allowances applied, 730 hours a month unless the provider publishes a monthly price.
The managed pieces add up to 4 vCPU and 8.25 GB. The closest single server is 8 GB, and that leaves nothing for the OS or a panel.
Single-server rows include the provider's backup and a 50 GB off-site copy on Cloudflare R2 at $0.60. That is one copy, and you build and test the dump job. Keeping history costs (retained GB - 10) x $0.015 a month.
No row has a database standby:
| Option | What is priced | Monthly list total | Not like for like |
|---|---|---|---|
| Hetzner CX33, Germany or Finland | 4 shared vCPU, 8 GB, 80 GB disk, backups, R2 copy | $12.76 | One host. EU, not US East. Half the disk of the other 8 GB rows. Goes in and out of stock, and Hetzner says the number of these servers is limited. Includes 20 TB of traffic. Status notice below |
| DigitalOcean Droplet 4 GiB | 2 shared vCPU, daily backups, R2 copy | $31.80 | Half the resources of the managed rows. One host |
| Vultr vc2-4c-8gb | 4 shared vCPU, 8 GB, backups, R2 copy | $48.60 | One host. No page I read says whether IPv4 is included |
| Hetzner CPX32, Germany or Finland | 4 shared vCPU, 8 GB, backups, R2 copy | $49.26 | One host. EU, not US East. CPX31 in Ashburn totals $85.77 on the same basis, with 3 TB of traffic. Includes 20 TB of traffic in the EU. Status notice below |
| DigitalOcean Droplet 8 GiB | 4 shared vCPU, daily backups, R2 copy | $63.00 | One host |
| DigitalOcean, app on a server | 4 GiB Droplet for API and cache, daily backups, managed PostgreSQL | $92.10 | Shared CPU. Single-node database. API and cache fill the 4 GiB server |
| DigitalOcean Droplet 16 GiB | 8 shared vCPU, daily backups, R2 copy | $125.40 | More than the managed rows. One host |
| DigitalOcean App Platform | 2 shared vCPU app, managed PostgreSQL, 1 GiB Valkey | $125.90 | Shared CPU. Single-node database |
| DigitalOcean App Platform | 2 dedicated vCPU app, same database and cache | $153.90 | Single-node database |
| AWS us-east-1 | Fargate, load balancer, RDS, ElastiCache, 3 public IPv4 | $162.00 plus load balancer capacity units and logs | Burstable database, Single-AZ. IPv4 count is my assumption |
| Azure East US | App Service P1v4, PostgreSQL B2s, Managed Redis B0 one node | $175.26 | App has 8 GB. Burstable database tier designed mainly for nonproduction use. One-node cache is advised for dev and test only |
| Railway | Usage at full allocation, one backup copy | $182.50 | Bills measured use, so an idle app costs less. Cache CPU isn't counted, so it can also cost more. Railway calls the database managed only after you add HA and backups, and HA isn't priced |
| Render | 2 CPU web, 2 CPU Postgres, Key Value, traffic. Pro adds a $25 workspace fee | $199.25 Hobby, $221.25 Pro | Hobby is positioned for personal projects and prototypes. No standby priced. Recovery window is 3 days on Hobby, 7 on Pro |
| Google Cloud us-east1 | Cloud Run, Cloud SQL zonal, backups, 1 GiB Memorystore, traffic | $251.30 | Zonal database. Backup cost grows with retained changes. Connector to Memorystore not priced |
The prices come from Hetzner, Droplets, App Platform, DigitalOcean databases, Railway and Render. For the hyperscalers I used AWS Fargate, RDS and ElastiCache, Azure App Service, PostgreSQL and Managed Redis, and Google Cloud Run, Cloud SQL, Memorystore and network pricing. AWS and Azure totals come from their public price APIs, so filter those pages by region.
Vultr's pricing page returned 403, so its plan price comes from its plan API and its backup rate from its docs. I converted Hetzner's euros at the ECB rate of November 4. On Hetzner's own USD list the CPX32 row would be $51.71.
The rows that match on size (App Platform, AWS, Railway, Render, Google Cloud) list at 9.9 to 19.7 times the CX33 row and 2.0 to 5.2 times the other 8 GB servers. Server size moves that ratio: App Platform is 3.96 times DigitalOcean's 4 GiB Droplet, 2.00 times its 8 GiB and 1.00 times its 16 GiB.
I left Fly.io out because its Managed Postgres has no plan at that size.
Why Do Hetzner's Cheapest Plans Show as Not Available?
On November 5, Hetzner's cost-optimized page listed CX33 (4 vCPU, 8 GB) at EUR 8.99 and CX23 (2 vCPU, 4 GB) at EUR 5.99 as not available, with a note to check back later. It showed the same on November 7. Hetzner's page says the number of available cost-optimized servers is limited. These plans go in and out of stock, and in my experience they come back every hour or so, so they aren't discontinued. If you can't wait, the plans not marked unavailable were CPX32 at EUR 35.99 and CPX22 at EUR 19.99, with double the disk and a different CPU class.
A status notice open since June 26, 2026 also restricts new cloud servers for new customers and randomly selected existing ones. Hetzner's FAQ calls such restrictions temporary and says affected customers can't create or rescale cloud servers at that location, so the limit can also block a resize or the replacement server a recovery needs.
I only looked at availability on Hetzner, so check your account and location before you plan around these prices.
When CX33 is out of stock, Hetzner's CPX32 and Vultr are level within exchange-rate movement, so I wouldn't rank those two.
Is a VPS Cheaper Than AWS?
It depends on the AWS product. Lightsail lists a 4 GB, 2 vCPU bundle at $24, the same price as DigitalOcean's 4 GiB Droplet before backups.
They aren't equivalent, because Lightsail's bundle has a 20% per-vCPU baseline. The large gap comes from managed services: the AWS row is $162.00 plus load balancer capacity units and logs, against $12.76 to $63.00 for the 8 GB servers. The table has no EC2 row.
Which Costs Do People Forget?
Start with the AWS row: public IPv4 plus the load balancer is $27.38, or 17% of the bill. A NAT gateway for private subnets ($32.85 before data) and Business Support+ ($29) would take it to $223.85, 38% higher.
At 1 TB, traffic runs from $0 to $149.25:
| Provider | Traffic cost at 100 GB | Traffic cost at 1 TB |
|---|---|---|
| Hetzner EU, DigitalOcean Droplet, Vultr | $0 | $0 |
| DigitalOcean App Platform | $0 | $15.00 |
| Railway | $5.00 | $50.00 |
| Azure | $0 | $78.30 |
| AWS | $0 | $81.00 |
| Google Cloud Premium Tier | $11.88 | $119.88 |
| Render | $11.25 to $14.25 | $146.25 to $149.25 |
The AWS and Azure zeros exist because 100 GB equals their free allowance. AWS's allowance is shared across your account, and load balancer data processing is billed separately.
On a PaaS, a second app adds full compute, such as $85 on Render. On a server it adds nothing until capacity runs out.
Where Does Your Own Time Fit?
Work out the bill difference first, and keep your time out of it. Then divide the difference by your hourly rate:
Hours = (managed total - server total) / your hourly rate
The result is how many hours a month make the two options cost the same. Those are extra hours, on top of what the managed option already takes.
On the same vendor, App Platform at $125.90 minus the 8 GiB Droplet at $63.00 is $62.90 a month. At a placeholder rate of $50 an hour, that is 1.26 hours a month, so use your own rate. Against the 16 GiB Droplet at $125.40 the difference is $0.50.
I have no source for how many hours a server takes each month, so I won't give you a figure. Count your own for patching, upgrades, restore tests and incidents. Operating a .NET app on Dokploy shows that work.
Then add what the table leaves out: domain and DNS, email and other APIs, an image registry, tax, and an external uptime monitor.
What Does One Server Risk?
One server is one failure domain, however large it is. The API, database, cache and panel share its disk, memory and host. A second server buys no failover until you build replication yourself.
A single PaaS instance also goes down with its host, and a second one adds $50 to $85 on the options I priced.
You patch the OS on a VPS, with or without a panel, and the provider patches the host on a managed PaaS, though the base image of a container you build stays yours. Data, access control, application security and your recovery plan stay with you on every path. VPS vs PaaS SLAs and responsibilities has the SLA and duties tables, and what a second instance and a database standby cost.
Do Provider Backups Count as Off-Site?
No, on all three VPS providers. Hetzner keeps them in the same location, usually in a different data center, and deletes them with the server. DigitalOcean and Vultr keep them in the same data center.
Hetzner also doesn't guarantee consistency for a backup of a running system. DigitalOcean describes its backups as crash-consistent and possibly not ideal for database servers. So I wouldn't treat a disk image as my Postgres backup.
Off-site backups for a VPS covers a separate copy, and testing a Postgres restore covers proving it works.
Which Platform Limits Will You Hit?
These are the two I'd check first, from each provider's docs where linked:
- Request timeouts. App Service stops at about 240 seconds on Linux, Cloud Run defaults to 5 minutes, and Render says 100 minutes.
- Local files. In Docker on a VPS they persist only on a volume or bind mount, because a redeploy recreates the container and drops its writable layer. That storage is still one disk on one host. Render loses them on redeploy without a persistent disk, and that disk blocks multiple instances and zero-downtime deploys. App Platform loses them too.
How Hard Is It to Leave?
I'd expect IAM, load balancer rules and platform deploy config to take most of the work, but I didn't run or price a migration.
The data has a portable form: pg_dump output is built to move between servers and load into newer PostgreSQL versions.
It covers one database and not roles, and it can't dump from a server newer than its own major version.
Create the roles on the target first. Extensions and versions can still block the move, so test a restore on the target first.
Provider backups often can't leave. Azure's can't be exported. RDS snapshot exports are Parquet files that can't be restored to a new instance. DigitalOcean doesn't let you download Droplet backups or snapshots.
I didn't check Hetzner or Vultr on this. I'd keep a logical dump on any path.
Can You Self-Host the App and Buy the Database?
Yes, and on DigitalOcean it totals $92.10, between the 8 GiB Droplet at $63.00 and App Platform at $125.90. The database is 66% of that bill, and it is the single-node plan, which has a written 99.5% SLA target and which DigitalOcean recommends for preliminary development and testing.
That $92.10 also has no off-site dump, which adds $0.60 for one 50 GB copy on R2. The API and cache fill the 4 GiB server, so moving to an 8 GiB Droplet makes the total $123.90 with the R2 copy, which is $2.00 below App Platform.
I didn't measure latency across that network hop. Before you use it, check the plan's backup, version and extension limits. Require TLS and restrict connections to your server.
When Should You Pick Each One?
These are judgment calls:
- One VPS. I'd pick it when someone owns the server, load is steady, and the bill difference outweighs your hours. You also accept losing every write since your last dump and being down while you rebuild the server and restore it. I'd time that rebuild once.
- A panel on the VPS. I'd add one when you want deploys and certificates handled. You also accept one more thing to patch and keep private, because it controls your apps and secrets. Once it's up, Docker publishes the panel's port past UFW.
- A PaaS. I'd pick it when nobody will own a server or use is low and metered, as long as the app fits the limits above.
- Hyperscaler services. I'd pay for them when a multi-zone database is the requirement, or when the company already runs there. RDS Multi-AZ adds $52.47 on the same burstable class. DigitalOcean's smallest path to a standby on its pricing panel adds $210.60 and doubles the RAM. No DigitalOcean page I read says that standby runs in a separate zone, so I can't call it the same purchase as Multi-AZ.
- App on a server, database bought. I'd use it when you can rebuild the app from an image and want someone else operating the database. If the data is what you can't lose, I wouldn't stop at the single-node plan priced here.
- Regulated data or strict recovery objectives. I'd make that a separate decision, because a PaaS doesn't take over your compliance duties. I also didn't read the hyperscalers' compliance programs.
Summary
For my reference workload, 8 GB servers with backups and one off-site copy totaled $12.76 to $63.00 a month on November 5, 2026, with the low end on a Hetzner plan that goes in and out of stock. Managed stacks of that size totaled $125.90 to $251.30. That is 9.9 to 19.7 times the CX33 row and 2.0 to 5.2 times the other 8 GB servers, before your own hours.
Your data decisions, access control, application security and recovery plan stay with you on every path.
One server is one failure domain, and a single PaaS instance with a single-node database can also go down. I'd pick by who will operate the system and how much downtime you can accept.
If you choose a server, start with my VPS deployment checklist and Ubuntu server hardening checklist, and my self-hosting course gives you guided practice.
Thanks for reading.
And stay awesome!
Frequently Asked Questions
What is the difference between a VPS, a PaaS and the cloud?
The useful line is who operates the operating system. A VPS is a rented virtual machine where you run the OS and everything above it, and under the NIST definition that is cloud infrastructure as a service. On a PaaS the provider runs the OS and the platform, and you run the application.
How much does it cost to host one web app with a database?
For a reference workload priced on November 5, 2026, one 8 GB server with backups and one off-site copy totaled 12.76 dollars on a Hetzner plan that goes in and out of stock, and 48.60 to 63.00 dollars elsewhere. Managed stacks of matching size totaled 125.90 to 251.30 dollars. These are list prices before tax and before your own time.
Is Hetzner still the lowest-priced VPS?
Yes at 4 vCPU and 8 GB, when its cost-optimized plan is in stock. CX33 lists at 8.99 euros and goes in and out of stock. The regular CPX32 at 35.99 euros is level with Vultr within exchange-rate movement. A status notice also restricts new servers for some customers, so check your own account.
Is a single VPS highly available?
No. One server is one failure domain however large it is, because the app, database and cache share its disk, memory and host. A second server buys no failover until you build replication yourself.
Are provider server backups enough for a VPS?
No. Hetzner, DigitalOcean and Vultr all keep server backups in the same location or data center as the server, so they are not an off-site copy. Keep a logical database dump somewhere else and test restoring it.

