Hetzner vs Contabo vs Vultr: Best VPS for Self-Hosting in 2026
Hetzner vs Contabo vs Vultr: Best VPS for Self-Hosting in 2026
Affiliate disclosure. This post contains affiliate links for some providers. If you sign up through them, I may earn a small commission at no extra cost to you. I only recommend providers I'd actually pay for myself. See affiliate disclosure for details.
Picking a VPS for self-hosting is somehow both the easiest and the most irritating part of the whole project. The easy part: there are three or four providers every self-hoster eventually ends up comparing — Hetzner, Contabo, Vultr, maybe DigitalOcean — and the decision rarely matters as much as the hours you'll spend agonizing over it. The irritating part: ninety percent of the "best VPS for self-hosting" posts you'll find on Google were written by someone who has never SSH'd into any of the boxes they're recommending. You can feel the difference after reading two or three of them. The tells are everywhere: recycled five-year-old benchmarks, affiliate links stacked above real information, conspicuously generous praise for whichever provider is paying the highest referral commission that quarter.
I decided to write a comparison I'd actually trust. I'm currently paying for two of the three providers in this post — Hetzner for byte-guard.net itself, Contabo for my private automation stack. I've been running them for about a week, which I'm going to be honest about, because a week is a week and not a year. The third provider (Vultr) I haven't put into production, and I say so clearly in that section instead of faking it. What follows is honest specs, honest pricing, honest first-week tradeoffs, a decision matrix you can scan in thirty seconds, and the provider I'd actually recommend based on what you're trying to do.
TL;DR — the short answer
Not interested in three thousand words? Here's the whole post in four lines:
- For most self-hosters in Europe: pick Hetzner CPX22 at €8.98/month. The price-to-performance is visibly better than any North American provider, the dashboard treats you like an adult, and signup to SSH takes under five minutes. This is what I run byte-guard.net on.
- For the cheapest usable entry tier with a real spec sheet: pick Contabo Cloud VPS 10 SSD at €5.99/month. Same core count and RAM as the Hetzner plan above for €3/month less, and — surprisingly — sequential disk throughput that benchmarks right next to Hetzner. The tradeoffs are an older CPU generation (measurably slower on crypto-heavy workloads), a slower provisioning experience, and the general polish gap. Best for secondary infrastructure or when monthly spend is the hardest constraint.
- For US-based self-hosters, hourly-billing workflows, or regions Hetzner can't cover: pick Vultr. Costs more, bandwidth allocation is stingy, but it's the only one of the three with a genuine global footprint and a mature ephemeral-instance story.
- My default: first deploy goes to Hetzner unless I have a specific reason not to.
The rest of this post is me showing my work. Skip to the section you care about, or keep reading if you want the full reasoning.
How I'm testing / what this post is based on
Let me be upfront about the limits of this comparison, because it's the whole post's credibility anchor.
I've been running Hetzner CPX22 in Helsinki for about a week as the host for byte-guard.net itself — Ghost, Nginx Proxy Manager, and Uptime Kuma on a single box. One week is not a long track record. I cannot tell you what Hetzner's support response time is in a real crisis, whether the monthly bill has any surprises after the first invoice, or how the dashboard handles a plan upgrade — because I haven't needed any of those yet.
I've also been running Contabo Cloud VPS 10 SSD for about the same week, on a separate server hosting my private automation stack (N8N) and a personal VPN. Same caveat applies — a week of uptime proves nothing about the six-month experience.
For Vultr, I don't run anything in production. The Vultr section below is research-based, with pricing and specs verified against the current Vultr website, but no tenure behind it. I flag this again in that section so no one mistakes it for personal experience.
So why publish a comparison post on a week of data? Because most "best VPS" comparison posts are either ghost-written by affiliates who never touched the providers, or recycled from five years ago when the pricing was different. A one-week first-impressions post from someone who actually pays two of these bills is, for this category, relatively high-trust. You are getting the decision I just made, while it's still fresh enough that sunk cost hasn't biased me into defending it. The long-term verdict belongs in a follow-up post, which I'll write. This one is the honest starting line.
At a glance — specs and pricing (table)
Table columns (reference plan per provider, chosen to be roughly equivalent self-hosting starter plans):
| Hetzner CPX22 | Contabo Cloud VPS 10 SSD | Vultr Regular Cloud | |
|---|---|---|---|
| vCPUs | 3 (AMD) | 3 | 2 |
| RAM | 8 GB | 8 GB | 4 GB |
| Storage | 80 GB NVMe | 75 GB SSD | 80 GB NVMe |
| Bandwidth | 20 TB | 32 TB | 3 TB |
| Price/mo | €8.98 | €5.99 | $24 |
| Setup fee | €4.90 IPv4 | None | None |
| Hourly billing | No | No | Yes |
| Data center regions | EU (DE/FI), US-East, US-West, SG | EU (DE), US-C, US-E, UK, JP, IN, AU, SG | 30+ globally |
Last verified: 2026-04-11. VPS pricing moves quarterly; if you're reading this six months after publish, double-check the provider sites before committing.
Notice how close the Hetzner and Contabo starter plans are on paper: same vCPU count, same RAM, nearly the same storage, generous bandwidth on both. The honest gap between them — once you actually run benchmarks on both boxes and stop trusting spec-sheet labels — turns out to be about €3/month, a noticeably newer CPU generation at Hetzner (which shows up on compute-heavy workloads like TLS termination and crypto), and a bundle of experience-level differences that matter more than any spec sheet suggests. The "NVMe vs SSD" marketing difference, which every comparison post leads with, ended up mattering less than I expected on the tests I ran. That's the whole comparison in one observation, and it's why the two deep dives below read differently than you might expect from a naive price-per-gigabyte-of-RAM analysis.
Hetzner CPX22 — deep dive (one week in)
What I pay and what I got
I'm on the CPX22 plan in Hetzner's Helsinki data center. On paper: 3 vCPUs on AMD EPYC silicon, 8 GB of RAM, 80 GB of NVMe storage, and 20 TB of outbound traffic per month. The billed cost is €8.98 per month — hourly metered, monthly capped, which means if I destroyed the server tomorrow I'd only pay for the hours it was actually running. There's also a one-time €4.90 IPv4 allocation fee on creation, which Hetzner is transparent about at checkout.
This one box runs the entire public side of byte-guard.net: Ghost for the blog, Nginx Proxy Manager for TLS termination, Uptime Kuma for the status page, all on a shared Docker bridge network. Full architecture diagram is in Post #1 if you want to see how it's wired up.
Performance (what a week told me)
Provisioning was fast. From clicking "Create Server" to SSH-ready took under a minute — I was back on my local terminal before the browser tab finished loading. That's not a benchmark but it's the first-impression moment that separates Hetzner from the slower provisioners I'll get to in a moment.
CPU and RAM headroom for a three-service stack is generous. Ghost idles at around 350 MB, NPM and Uptime Kuma together take another 200 MB, and top has shown 0.0 load average for most of the week. Nothing in week one suggested I'm close to the plan's ceiling.
I pulled a few quick synthetic numbers so the comparison below has something concrete to anchor on. Sequential disk throughput on 1 GB dd tests (with oflag=direct to bypass page cache) came back at 1.1 GB/s on writes and 805 MB/s on reads. That's NVMe-class on writes, and honestly a touch lower than I expected on reads — sequential throughput is not the whole disk story, and I haven't stress-tested random IO or IOPS under concurrent load, so take these as a ceiling rather than a workload forecast. The real standout number was CPU: single-thread openssl speed -evp aes-256-gcm pushed ~10.24 GB/s at 16 KB blocks on this box, running on an AMD EPYC-Genoa (Zen 4, AMD's 2022+ generation). That is a lot of crypto headroom for a €9 VPS, and it shows up in any workload that touches TLS termination, WireGuard, SSH, disk encryption, or anything else that leans on AES-NI. I'll come back to this number in the Contabo section because it's where the two hosts actually diverge.
Network latency from my location in Europe to the Helsinki data center is low enough that SSH feels like a local machine. I haven't measured uptime in any meaningful sense yet — a week of "no outages" is the bar every provider clears.
Pros (first-week honest)
Signup to SSH in under five minutes. This matters more than it sounds. Friction at the starting line is how most self-hosting projects die.
The dashboard is boring, in the good way. No upsell banners, no "did you consider our managed Postgres" popups, no enterprise consultation offers. Just a list of your servers and what they cost. Hetzner treats you like you know what you're doing.
Billing transparency. Hourly meter plus monthly cap means I can see exactly what I'll owe mid-month. No month-2 surprises (or at least none yet).
IPv6 worked out of the box, which cannot be said for every provider at this price tier.
The price-to-performance floor is visibly different from US providers. When you price an 8 GB VPS against anything in North America you're going to feel the difference.
Cons (observed and researched)
KYC is aggressive. Hetzner asks for real name, real address, and sometimes does additional verification via phone or ID — especially if you're signing up from outside the EU. This filters out a non-trivial slice of would-be users, and the r/selfhosted thread about it is a long one. Be prepared to show up as an actual human.
The region map has gaps. Hetzner has Germany (Falkenstein, Nuremberg), Finland (Helsinki), and two US sites (Ashburn, Hillsboro). That's it. There's no Tokyo, no Singapore, no São Paulo, no Sydney. If latency to Asia or Latin America matters, this isn't the host.
No managed services. No click-install Postgres, no managed Redis, no object storage in the same control plane (they offer Hetzner Storage Box separately). You're expected to run what you need yourself.
And the week-one asterisk. I haven't needed Hetzner support yet. I haven't hit a billing edge case yet. I haven't upgraded a plan yet. Any one of those experiences could change my opinion. I'll tell you if it does.
Best for
EU self-hosters running a few Docker services on a single box. Exactly the byte-guard.net stack — a blog, a reverse proxy, some monitoring. If you value a simple dashboard and honest pricing over feature breadth, and your users are mostly in Europe, start here.

Contabo Cloud VPS 10 SSD — deep dive (one week in)
What I pay and what I got
I'm on Contabo Cloud VPS 10 SSD, which is the entry tier of Contabo's current Cloud VPS product line. The spec sheet: 3 vCPU cores, 8 GB of RAM, 75 GB of SSD storage, 32 TB of outbound traffic, and one IPv4 plus IPv6 routing included. Billed at €5.99 per month on monthly billing, meaningfully cheaper on longer contracts — Contabo pushes you toward the annual or multi-year options at checkout because their headline pricing assumes you'll pick one. There's no setup fee on this plan (my invoice literally shows "Cloud VPS 10 SSD (no setup)" as the line item, which is worth noting because older Contabo plans sometimes have one).
A quick note on Contabo's product naming, because it's genuinely confusing if you've read older comparison posts: around 2022–2023 Contabo rebranded from the legacy "VPS S / M / L / XL" line to the current "Cloud VPS 10 / 20 / 30 / 40" numbered tiers. Most of the "Contabo VPS M" reviews on the internet are referring to plans that don't exist on the Contabo website anymore. If you go looking for a plan name from a 2021 comparison post you're going to have a bad time. The Cloud VPS 10 I'm running is the current descendant of the budget end of that old lineup.
The plan lives in Contabo's German data center. I run it as the private side of my infrastructure: N8N for automation workflows and OpenVPN for a personal gateway. The two servers — Hetzner public, Contabo private — are deliberately separate so nothing on the public-facing box can reach my private automation state, and vice versa.
Performance (what a week told me)
Here's the thing I want you to notice about the specs above: at this tier, Contabo and Hetzner are strikingly close on paper. Same three vCPU count, same 8 GB of RAM, almost the same disk size. Contabo actually has more bandwidth (32 TB vs 20 TB) and no IPv4 allocation fee. The difference is €3 per month and a handful of experience-level things that don't show up until you're inside the box.
CPU and RAM: for N8N and a VPN, this plan has more headroom than I'll ever need. Load averages have been flat for the whole week. If you're running a modest Docker stack — say, a self-hosted password manager plus a bookmark manager plus one or two small apps — you'll barely see the CPU move. You are not buying Cloud VPS 10 for raw compute; you are buying it because it's cheap enough that you don't have to think about whether it's worth it.
Disk IO is better than I expected. Contabo markets this tier as SSD (not NVMe), and the general internet wisdom is that Contabo's storage is the weakest part of the product. The numbers I pulled surprised me. A sequential dd write of 1 GB with oflag=direct conv=fdatasync landed at 1.0 GB/s, and the matching read test came back at 1.1 GB/s. That's much closer to NVMe-class numbers than the "cheap SATA pool" some older reviews would lead you to expect. Sequential throughput isn't the whole story — random-IO and IOPS under concurrent load are what you'd actually feel on a busy database, and I haven't stressed the box with that kind of workload yet — but for the kind of self-hosting most people do (N8N, small app stacks, single-writer workloads) the disk has not been a bottleneck in week one.
CPU crypto throughput is the real gap between Contabo and Hetzner. The Contabo node runs on what lscpu reports as a generic "AMD EPYC Processor" (KVM-virtualized, with the model masked by the hypervisor — a common pattern that usually indicates an older or non-current EPYC generation). A single-thread openssl speed -evp aes-256-gcm run pushed around 3.05 GB/s at 16 KB blocks. That's still plenty for a self-hosting workload — TLS termination and WireGuard tunnels will not be CPU-bound on this plan for any normal traffic — but it's roughly a third of what Hetzner's CPX22 delivered on the same single-thread test (~10.24 GB/s, on their newer EPYC-Genoa silicon). If your stack spends real CPU on crypto — a heavily-used VPN endpoint, a Ghost blog terminating TLS for thousands of RPS, a Matrix homeserver — the Hetzner box has meaningfully more headroom per euro than the raw core count suggests. For everything else, Contabo's CPU is completely adequate. Both boxes were running Ubuntu 24.04 with kernel 6.8.0-106-generic, so the comparison is clean.
Provisioning was not instant. Hetzner had me on SSH in under a minute. Contabo took noticeably longer on the first server — closer to ten minutes between checkout and a usable box, and the control panel went through several "pending" states before the IP showed up. Not broken, just slower. A second spin-up later in the week went faster. Others online have reported worse experiences than mine, so call it the provisioning lottery and don't expect Hetzner's velocity.
Network bandwidth has been a non-issue. 32 TB is generous for a self-hosting stack, and I've seen no throttling on anything I've thrown at it. Latency from Europe is fine for the workloads I run; I haven't measured for users in other regions because I'm not hosting anything public on this box.
Pros
It's the cheapest usable self-hosting tier of the three providers in this comparison. €5.99/month for 8 GB of RAM and three cores is the lowest sticker price you can reasonably put a real workload on, and the price gap versus Hetzner (about €3/month) compounds over a year into real money if you're running more than one server.
Generous bandwidth at the entry tier. 32 TB of outbound is more than the other two providers at comparable price points. If you're self-hosting anything bandwidth-heavy — media streaming, backups target, a Mastodon instance with federation traffic — this is a real advantage that the spec sheet undersells.
No setup fee on Cloud VPS 10 SSD. Older Contabo plans sometimes had a one-time charge; the current entry tier does not, and the invoice line item calls it out explicitly ("no setup"). One less gotcha.
IPv4 and IPv6 both included. Hetzner charges the €4.90 one-time allocation for IPv4; Contabo bundles it. Tiny advantage in absolute terms, but it's the right default for self-hosters who don't want to architect around IPv6-only.
EU data center with the regulatory posture you'd expect. German data center, German jurisdiction. If where your data physically sits matters to you — and for self-hosters it often should — this is real.
Cons — honest, not sanitized
The provisioning lottery is real. My first spin-up took about ten minutes and required patience with a control panel that showed several "pending" states before the IP finally surfaced. That is not a deal-breaker, but it is something the whole self-hosting internet talks about and I now understand why. Hetzner's five-minute experience makes this feel slower than it objectively is.
The CPU generation is older. The biggest measurable gap I found between Contabo and Hetzner wasn't disk — it was CPU crypto throughput, where Hetzner's newer EPYC-Genoa silicon hit roughly three times the AES-NI throughput on a clean single-thread test. For most self-hosting workloads this is invisible; for anything that spends real CPU on TLS, WireGuard, full-disk encryption, or other AES-heavy paths, it's a real ceiling difference you'd eventually run into if you were pushing the box hard.
I didn't stress-test random IO. Sequential throughput on Contabo's SSD was unexpectedly good, but busy databases and small-file workloads (Nextcloud, Elasticsearch, a heavily-written Postgres) are sensitive to random IOPS and IO contention under concurrent load — things I haven't measured on either box. If your workload depends on that dimension, don't assume the sequential numbers I pulled here will translate. Test your specific workload, or weigh the €3/month Hetzner premium as cheap insurance against a disk pattern neither of us has actually put under load yet.
Checkout pushes you toward multi-year contracts. Contabo's cheapest advertised monthly number assumes you'll prepay for twelve or even twenty-four months. The checkout flow nudges toward the longer commitments with visually prominent pricing, and the month-to-month option costs more. Read the cart before clicking through. More broadly: do not prepay for a year until you've run production for thirty days (I'll come back to this in the provider-agnostic section below).
Support has a reputation I haven't tested. I haven't needed Contabo support for an actual incident — only for a provisioning question, which was resolved by email within a few hours. The broader consensus across r/selfhosted and other communities is that Contabo support is slower than Hetzner's. I cannot confirm or refute that on a week of data. File it as a risk I haven't yet paid, not as a verdict.
Best for
Absolute budget-first self-hosting. If monthly spend is the single hardest constraint, Cloud VPS 10 is the cheapest usable plan in this comparison — and, surprisingly, sequential disk throughput is not the tradeoff older reviews would lead you to expect. The €3/month you save versus Hetzner is real money if you're running multiple boxes.
Secondary or private infrastructure where you want a separate blast radius from your public stack but don't want to double your hosting bill to get one. Exactly how I use it — N8N and a personal VPN on a cheap box, kept deliberately isolated from anything that faces the internet.
Bandwidth-hungry self-hosting workloads — a Mastodon instance, a media backup destination, a Peertube node. 32 TB of outbound at this price is a genuine advantage over both Hetzner (20 TB) and Vultr (3 TB on the comparable plan).
Not for: crypto-heavy workloads that would actually use the CPU headroom gap (heavy TLS termination, big VPN endpoints), production stacks where provisioning speed and support responsiveness matter, or workloads where a couple of hours of extra waiting at setup time would be a real problem. For those, the extra €3/month at Hetzner is cheap insurance.

Vultr — deep dive (research-based, disclosed)
Second honesty disclosure (important)
Unlike the two sections above, I don't run anything on Vultr in production. Not for byte-guard.net, not for my private infrastructure, not for anything. What follows is based on current Vultr pricing and feature documentation, a brief spin-up of a test instance to verify the dashboard claims match reality, and public third-party benchmarks where I've cited them. This section is deliberately shorter than the other two because the depth I can honestly go to is shallower. Treat the Vultr pros and cons as "what the data says" rather than "what I saw after a week of running it."
Pricing and what you get
Vultr's cheapest usable plan for self-hosting is the Regular Cloud Compute tier at $24 per month, which gets you 2 vCPUs, 4 GB of RAM, 80 GB of NVMe storage, and 3 TB of outbound bandwidth. That's not a typo — three terabytes, not thirty, on the plan that costs roughly three times what Hetzner and Contabo charge for their comparable starter plans.
There is a smaller $12 plan (1 vCPU, 2 GB RAM, 55 GB storage, 2 TB bandwidth) and an even smaller $6 plan (1 vCPU, 1 GB RAM), but I would not run a Ghost blog on either of them. For the purposes of a self-hosting comparison, $24 is the honest floor.
Vultr also offers a High Frequency cloud tier with faster per-core performance at a price premium, and bare metal for workloads that outgrow virtualization. Neither is the focus of this post, but they're worth knowing about if you're evaluating a single provider across a growing infrastructure.
Billing is hourly with a monthly cap, the same model Hetzner uses. That's genuinely useful for short-lived workloads.
What the data says (pros)
Thirty-plus data center regions. This is Vultr's headline advantage over both Hetzner and Contabo. If you need presence in Tokyo, Seoul, Bangalore, São Paulo, Mexico City, Sydney, or Johannesburg — regions neither Hetzner nor Contabo serve at all — Vultr is a genuine answer, not a workaround.
Hourly billing is mature. Vultr's API, dashboard, and Terraform provider all assume you might spin up a box for two hours and destroy it. That matters for CI runners, ephemeral test environments, or any workflow where uptime is measured in hours not months.
Bare metal is available in the same control plane. If a VPS tier runs out of headroom for whatever you're self-hosting, you can rent a physical box without changing providers, API, or billing.
The API and Terraform provider are the most mature of the three. Both Hetzner and Contabo have APIs, but Vultr's is the one most mentioned in infrastructure-as-code tutorials, for what that's worth.
What the data says (cons)
The price gap at comparable tiers is real and significant. For the cost of a $24 Vultr plan, you get a Hetzner CPX22 with twice the RAM, twice the storage, and seven times the bandwidth, plus change. If price-per-gigabyte-of-RAM is your single metric, Vultr loses this comparison on numbers alone.
Bandwidth allocation is stingy. Three terabytes on the $24 tier versus Hetzner's 20 TB on the €9 tier is the kind of difference that catches you off guard in month two if you're hosting anything with real traffic. Vultr's overage charges are also higher than Hetzner's in most regions. Check before you deploy anything that might go viral.
Free credit promos get weird. Vultr runs promotional free credits frequently, but the expiration rules are aggressive — credits expire unused, promo conditions can change mid-cycle, and new-user credits don't always apply to every plan tier. Read the fine print or expect a surprise.
Best for
North American self-hosters where Hetzner's round-trip latency to your users is genuinely annoying. Hetzner does have US sites, but Vultr has more of them, closer to more people.
Short-lived or ephemeral infrastructure — CI runners, test environments, burst workloads, anything that lives for hours or days rather than months.
Projects that need a geographic region Hetzner and Contabo cannot serve. If your user base is primarily in Southeast Asia, Oceania, or Latin America, Vultr is not just competitive — it may be the only option on this list that actually puts a data center near them.
Decision matrix — pick one in 30 seconds
Short scannable table — "If you want X, pick Y":
| Your situation | Pick |
|---|---|
| First VPS, EU-based, self-hosting a few Docker services | Hetzner CPX22 |
| Monthly spend is the single hardest constraint | Contabo Cloud VPS 10 SSD |
| Secondary / private infrastructure on a separate blast radius | Contabo (exactly how I use it) |
| Bandwidth-hungry workload (Mastodon, media backups, Peertube) | Contabo (32 TB outbound at the entry tier) |
| US-based with latency-sensitive users | Vultr (or Hetzner US-East/US-West) |
| Running short-lived test instances, CI runners, ephemeral work | Vultr (hourly billing) |
| Crypto-heavy or CPU-bound workload | Hetzner (newer EPYC-Genoa silicon) |
| Reliability and support predictability matter most | Hetzner |
| Need a region neither Hetzner nor Contabo serves | Vultr (30+ global regions) |
| Privacy-focused workload, EU-only data residency | Hetzner or Contabo (both EU) |
My actual pick for byte-guard.net and why
Since I just told you to match the provider to your workload, it's fair to show what that looks like when someone actually does it. Here's the decision path I walked for byte-guard.net itself.
The workload: a Ghost blog, Nginx Proxy Manager for TLS termination, Uptime Kuma for the public status page, all running under Docker Compose on a single box. Modest traffic at launch, most readers expected to be in Europe, SEO growing over months not days. No database-intensive services, no large media storage, no real-time workloads. A starter plan is plenty — the challenge is keeping the plan cheap without compromising the reader experience.
The shortlist: Hetzner CPX22 and Contabo Cloud VPS 10 SSD. Vultr got ruled out early because the byte-guard.net audience is primarily European, and Vultr's pricing is roughly triple for less RAM at equivalent tiers. I didn't need a global footprint. I needed cheap, fast, and close to my readers.
The Hetzner-vs-Contabo comparison at this tier is genuinely close on the spec sheet — same three vCPU count, same 8 GB of RAM, roughly the same storage size, generous bandwidth on both, same EU region availability. The honest difference between them, after I ran real benchmarks on both boxes, is €3 per month and a handful of experience-level things: Hetzner's newer EPYC-Genoa silicon with ~3× the single-thread AES-NI crypto throughput (which matters because Ghost terminates TLS on every request), Hetzner's five-minute signup-to-SSH experience vs Contabo's ten-minute provisioning lottery, Hetzner's boring-in-the-good-way dashboard vs Contabo's noisier control panel, and the intangible "does this host feel like it was built by engineers who respect you" metric where Hetzner pulls ahead.
The specific thing that tipped the scale: the combination of CPU headroom and provisioning velocity. Ghost sits behind Nginx Proxy Manager which terminates TLS for every page load, and I wanted the faster crypto path for a blog I expect to eventually handle traffic spikes. More importantly, when you're building a stack at night after work, the difference between "running in five minutes" and "still pending in fifteen" is the difference between shipping that night and putting it off another day. I'd already committed to Contabo for the private side (where the workload is N8N and a personal VPN — neither of which cares about the CPU gap), so the decision was really "do both hosts sit on Contabo?" The answer — for public infrastructure where first impressions matter, where I want uptime I can trust sooner rather than later, and where the CPU headroom buys actual traffic-spike cushion — was no, and the €3/month premium over Contabo was a cheap insurance policy.
If you want the full build, including the docker-compose.yml, the Nginx Proxy Manager configuration, and the step-by-step reasoning for every service, I wrote that as Post #1: Building byte-guard.net from Scratch on a Hetzner VPS.
What to avoid with ANY VPS provider
A few habits that apply regardless of which host you pick. I've watched enough self-hosters get bitten by these that they're worth calling out.
Do not prepay for a year until you've run production for thirty days. Every provider offers a "save 20% with annual billing" button at checkout, and it looks like free money. It is not free money. It is a bet that your first month of running a real workload on a new host will not reveal a deal-breaker you didn't see in the signup flow. Run a real workload for a month. Then, if you're still happy, prepay. The math still works out and you haven't locked yourself into a year of regret.
Test snapshot and restore before you need them. Not after. Every host advertises backups and snapshots. Very few self-hosters verify the restore path until the day they actually need it, and on that day is a bad time to learn that the snapshot is corrupted or that restoring to a new region incurs charges you didn't plan for. Take a snapshot, destroy a file, restore the snapshot, confirm the file came back. Do it on day one.
Set billing alerts on day one. A single leaked API key at three in the morning can turn a ten-euro VPS into a four-figure bill by breakfast. Every provider in this comparison supports billing alerts or spending caps. Configure them before you put anything real on the host. Do not rely on noticing the charge yourself.
Don't trust promo pricing. New-customer promos are common and real, but the regular price is the price you'll actually pay in year two. Before committing to any host, find the non-promotional pricing page and ask yourself whether that number still makes sense. If it doesn't, the host is a one-year bet, not a real solution.
Verify IPv6 actually works before you architect around it. Every host advertises IPv6. Not every host delivers clean, stable, routable IPv6 on every plan in every region. If your deployment plan depends on IPv6 — for cost reasons, for geographic reachability, or for avoiding per-IPv4 fees — test it end-to-end from an external IPv6 client before you build anything on that assumption.
Conclusion
Three providers, three honest picks. Hetzner if you're in Europe and want the best price-to-performance on a modest Docker stack, with a noticeably newer CPU generation, NVMe disk, and a dashboard that respects your time. Contabo if monthly spend is the single hardest constraint or you need a cheap secondary box with a separate blast radius from your public stuff — the sequential disk throughput surprised me, and for workloads that don't lean hard on single-thread CPU it's genuinely competitive, but you'll accept a slower provisioning experience and an older CPU generation as the cost of that €3/month discount. Vultr if you need a region the other two don't serve, or if hourly billing is a real requirement rather than a nice-to-have. There is no wrong answer here, only answers that are wrong for your specific workload. Match the host to the work, not to the listicle.
One thing I want to be explicit about, regardless of which you pick: harden the box before you run anything on it. A fresh VPS from any provider is a target from the moment it comes online. I wrote a ten-minute checklist for exactly this: How to Harden Your Linux VPS in 10 Minutes. That post is the literal first thing I ran on my Hetzner box, before docker compose up touched it, and it's step zero for any host on this list.
If you found this comparison useful, I publish one post like this every week — honest, no sponsored fluff, written by someone who actually runs the stack. Subscribe to the newsletter and I'll send new posts straight to your inbox. No spam, no pop-ups, unsubscribe whenever.
And if you have an opinion on this post — a provider I missed, a point I got wrong, a workload where my pick wouldn't hold up — I'd genuinely like to hear it. Drop me a note via the contact page, or find me in the comments on r/selfhosted when I share this post there.