Hetzner and OVHCloud

Published: Nov 13, 2025 by Isaac Johnson

In the last week I’ve looked in detail at UpCloud which is an amazing Finish Cloud Company. But there are some that are more than are based in Europe we’ve yet to explore.

Today I’ll look at OVHCloud and Hetzner. OVHCloud is French provider that has been around since 1999 and headquartered in Roubaix, FR. Hetzner Online GmbH is based out of Gunzenausen, Bavaria in Germany and was founded in 1997. Basically, these are both very solid long-standing companies.

Let’s start with OVHCloud…

OVHcloud

I can easily signup from the login page

NOTE: I did this without any referral so I just have to pay retail for stuff.. here is some other person’s referral code - not even sure whom - but at least you get $10 or $20 in credits.. sadly i didn’t do this…

/content/images/2025/11/ovhcloud-01.png

I just need to give some basic details

/content/images/2025/11/ovhcloud-02.png

We can pick our account type. I’ll use “Private individual”

/content/images/2025/11/ovhcloud-03.png

They have new portal in beta which I’ll use. I need to create a project

/content/images/2025/11/ovhcloud-04.png

I’ll give it a name

/content/images/2025/11/ovhcloud-05.png

It then sent me to a billing page to pay US$0. A little confusing as to why…

/content/images/2025/11/ovhcloud-06.png

Ah, they charge me a $1 just so we can get a payment method setup.

/content/images/2025/11/ovhcloud-07.png

I then saw the order was processed

/content/images/2025/11/ovhcloud-08.png

Now when I go back to the Project picker, I can pick my “freshbrewedtest” project

/content/images/2025/11/ovhcloud-09.png

Databases

They have PostgreSQL, MySQL, MongoDB and Valkey available (I don’t consider memorystores databases, but we can save that argument for another time)

The cheapest is US$55.50 a month

/content/images/2025/11/ovhcloud-10.png

My challenge here is I’m trying to not be in the US on this one and the only choices I have are Virginia and Oregon

Instances

Soon, however, in just trying to find more items I got into an error loop in Firefox

/content/images/2025/11/ovhcloud-11.png

I switched to Chrome and was unblocked, but again, as a US customer they just give me US otpions which I did not want.

/content/images/2025/11/ovhcloud-12.png

The same was true of Kubernetes clusters

/content/images/2025/11/ovhcloud-13.png

CRs

They had a basic “S”(small) container registry for US$23.14 a month which would not be too bad

/content/images/2025/11/ovhcloud-14.png

Hetzner

We can signup for Hetzner at https://accounts.hetzner.com/signUp

/content/images/2025/11/hetzner-07.png

I then need to go through a signup flow

/content/images/2025/11/hetzner-01.png

They don’t even let you get through the signup flow without a payment setup

/content/images/2025/11/hetzner-02.png

I found it amusing they have an option to not save your card, but you cannot complete the form unless you agree to it

/content/images/2025/11/hetzner-03.png

But then I can complete and enable MFA

/content/images/2025/11/hetzner-04.png

Like IBM, they wanted “enhanced” verification of my identity.

But unlike IBM, they didn’t try to coax me into emailing full copies of my ID papers and instead has an app with a QR code that scanned my ID and then my face. I feel like I have done something like that before for some online certification exams.

Once I got through, we can get to a Console landing page where we can create servers, firewalls, LBs and the like

/content/images/2025/11/hetzner-05.png

Reviewing the server create page, it would seem that it’s pretty cheap for a basic VM, but I also think I’m signing up to pay for it all up front for a month

/content/images/2025/11/hetzner-06.png

Let’s create a VM together and test it

I went to check usage which suggests I just spent 1c

/content/images/2025/11/hetzner-09.png

NOTE: I came back the next day and saw leaving it running a full day was about US$0.13

/content/images/2025/11/hetzner-24.png

I saw Limits thinking it could be budget related, but instead are soft limits. I’m okay with most, but the 5 server limit is rather low IMHO for something I’m paying for.

/content/images/2025/11/hetzner-10.png

Going back to our server, we can see a history of activities, location and some specifics on usage like vCPU, RAM and disk

/content/images/2025/11/hetzner-11.png

In “Graphs” we see some live metrics

/content/images/2025/11/hetzner-12.png

Backups, as they suggest, enable automatic backups for 7 slots. They then add 20% to the cost of the server

/content/images/2025/11/hetzner-13.png

Snapshots are point in time snaps of the disks for which you can create new servers (like a disk image capture)

/content/images/2025/11/hetzner-14.png

Networking and Load Balancers let us assign an LB and Network to this host. I find this a pretty easy to grasp way to front traffic to some legacy services.

/content/images/2025/11/hetzner-15.png

The firewall setup is a deny all except style

/content/images/2025/11/hetzner-16.png

We can add multiple volumes (disk) to the host, each up to 10Tb

/content/images/2025/11/hetzner-17.png

“Rescue” is a pretty cool option. Say you have a system in segfault or crashing at startup, you can mount the volume on another host to help sort the issues out. This would have come in real handy during the 2024 Crowdstrike issue

/content/images/2025/11/hetzner-18.png

They let you mount some canned ISO images to the server. Not sure why this would be all that useful

/content/images/2025/11/hetzner-19.png

Rescale lets you change machine class and Rebuild looks like it lets you respin the host with a canned app

/content/images/2025/11/hetzner-20.png

Object storage

It would seem I would spend about $6 month for buckets which has a lot of storage included

/content/images/2025/11/hetzner-21.png

To access it, we could use an S3 compatible tools. To generate S3 credentials (access key and secret), we can do that in the Security/S3 credentials page

/content/images/2025/11/hetzner-22.png

DNS Zone

I looked and looked, but all evidence seems to suggest that DNS management, at least for now, is completely free

/content/images/2025/11/hetzner-23.png

I want to test this so first I need a domain. I’ll use Ionos and get bwcafish.info

/content/images/2025/11/hetzner-25.png

After I completed the order, it’s set to use IONOS name servers

/content/images/2025/11/hetzner-26.png

In Hetzner, I’ll add a new DNS zone

/content/images/2025/11/hetzner-27.png

Which creates the zone

/content/images/2025/11/hetzner-28.png

When I click on the zone we can see the error about “Invalid zone delegation”. We can see the name servers we should use in the “Name servers” section

/content/images/2025/11/hetzner-29.png

I’ll now update them in IONOS

/content/images/2025/11/hetzner-30.png

Once saved, we do see a notice it can take up to 2 days to apply

/content/images/2025/11/hetzner-31.png

Though I can see IONOS now lists the Hetzner servers

/content/images/2025/11/hetzner-33.png

I have found it takes a lot less time. I’ll just keep clicking “check again” in Hetzner till I see it clear

/content/images/2025/11/hetzner-32.gif

It took me about 12 minutes to clear that box

/content/images/2025/11/hetzner-34.png

Let’s test it.

I’ll add Nginx to the VM still running

root@ubuntu-4gb-hel1-1:~# apt update && apt install nginx

Next, I need to update ufw (the Ubuntu Firewall) to allow HTTP and HTTPS traffic

root@ubuntu-4gb-hel1-1:~# ufw app list
Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH
root@ubuntu-4gb-hel1-1:~# ufw allow 'Nginx HTTP'
Rules updated
Rules updated (v6)
root@ubuntu-4gb-hel1-1:~# ufw allow 'Nginx HTTPS'
Rules updated
Rules updated (v6)

I’ll make a basic HTML page to serve up

root@ubuntu-4gb-hel1-1:~# mkdir -p /var/www/bwcafish.info/html
root@ubuntu-4gb-hel1-1:~# ls -l /var/www/
total 8
drwxr-xr-x 3 root root 4096 Oct 29 11:24 bwcafish.info
drwxr-xr-x 2 root root 4096 Oct 29 11:18 html
root@ubuntu-4gb-hel1-1:~# vi /var/www/bwcafish.info/html/index.html
root@ubuntu-4gb-hel1-1:~# cat /var/www/bwcafish.info/html/index.html
<html>
    <head>
        <title>Welcome to BWCAFish.info</title>
    </head>
    <body>
        <h1>Fishing is great in the BWCA!</h1>
    </body>
</html>

I’m going to add a block to the default enabled site

root@ubuntu-4gb-hel1-1:~# cat /etc/nginx/sites-enabled/default | tail -n 13

server {
    listen 443 ssl;
    server_name bwcafish.info;

    ssl_certificate /var/www/bwcafish.info/certificate.crt;
    ssl_certificate_key /var/www/bwcafish.info/certificate.key;

    location / {
        root /var/www/bwcafish.info/html;
        index index.html index.htm;
    }
}

I’ll make a self-signed cert so Nginx is happy

root@ubuntu-4gb-hel1-1:~# sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /var/www/bwcafish.info/certificate.key -out /var/www/bwcafish.info/certific
ate.crt
...+.......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*...+.........+......+.....+.......+.....+..........+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*..+...+..+....+...+..+.................................+...+...................+.........+.........+.....+......+......+...+.+......+........+............+...............+...+.+..+....+...........+.......+...+..+......+.+.........+.....+..........+.................+...+.+.....+....+.........+..+.+..............+.........+.......+.........+.....+.+...+.....+............+....+......+..+...+...+.+...........+............+..........+.....+.......+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
..+.......+.....+............+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*........+...+......+.........+......+......+....+...+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*..+.+......+........+.+......+..+...+............+...+....+.........+.....+......+....+..+.......+..+..........+...+......+...........+....+...............+..+...+....+..+...+...+....+...+...+........+.......+..+...............+...+.......+...+..+......+.+...............+......+...............+........+.+...+......+..+..........+..............+...+..........+........+...+.+.....+....+...........+...+...+...+....+...........+............+.............+..+.......+......+..............+.+......+.....+..........+.....+.+..+.+.........+.....+...+...+....+........+.......+.....+.......+...+..+..........+...+.....+...+...+......+....+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:MN
Locality Name (eg, city) []:Woodbury
Organization Name (eg, company) [Internet Widgits Pty Ltd]:BWCAFish
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:Isaac Johnson
Email Address []:isaac.johnson@gmail.com

Then restart Nginx. I use status to make sure I didn’t make any typos in the conf or use the wrong location for the certs

root@ubuntu-4gb-hel1-1:~# service nginx restart
root@ubuntu-4gb-hel1-1:~# service nginx status
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Wed 2025-10-29 12:03:55 UTC; 6s ago
       Docs: man:nginx(8)
    Process: 20435 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 20437 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 20438 (nginx)
      Tasks: 3 (limit: 4540)
     Memory: 2.7M (peak: 3.0M)
        CPU: 67ms
     CGroup: /system.slice/nginx.service
             ├─20438 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             ├─20439 "nginx: worker process"
             └─20440 "nginx: worker process"

Oct 29 12:03:55 ubuntu-4gb-hel1-1 systemd[1]: Starting nginx.service - A high performance web server and a reverse proxy server...
Oct 29 12:03:55 ubuntu-4gb-hel1-1 systemd[1]: Started nginx.service - A high performance web server and a reverse proxy server.

Back in the DNS Zone, I’ll make two A records - one for “www” and one without. I’m using the IP of my VM for the value

/content/images/2025/11/hetzner-35.png

Note: you need to use @ for the root

/content/images/2025/11/hetzner-36.png

And now we can see that https://bwcafish.info works, albeit with a self-signed cert (which always annoys the web browser)

/content/images/2025/11/hetzner-37.png

Our next step is to get certbot. This is similar to cert-manager in Kubernetes

root@ubuntu-4gb-hel1-1:~# apt install certbot python3-certbot-nginx

We can now use certbot to get real certificates

root@ubuntu-4gb-hel1-1:~# certbot --nginx -d bwcafish.info -d www.bwcafish.info
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): isaac.johnson@gmail.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.5-February-24-2025.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Account registered.
Requesting a certificate for bwcafish.info and www.bwcafish.info

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/bwcafish.info/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/bwcafish.info/privkey.pem
This certificate expires on 2026-01-27.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for bwcafish.info to /etc/nginx/sites-enabled/default
Successfully deployed certificate for www.bwcafish.info to /etc/nginx/sites-enabled/default
Congratulations! You have successfully enabled HTTPS on https://bwcafish.info and https://www.bwcafish.info

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

We can now see a valid website with HTTPS served out of Hetzner

/content/images/2025/11/hetzner-38.png

This means I have just one server running and a free DNS zone

/content/images/2025/11/hetzner-39.png

I’m on track to spend about $3.50 a month for this - less than a cup of Starbucks

/content/images/2025/11/hetzner-40.png

Where I find this a bit more exciting is that 2vCPU/4Gb box, while small, should be enough to run a NodeJS or Python server without issue - it could be a very easy way to host a demo app. It might be a tad small for Docker, but a Python-slim container could run in those limits.

This is where, while I really like UpCloud, the Hetzner option is a bit better deal:

/content/images/2025/11/hetzner-41.png

(red is Hetzner and blue is UpCloud)

And I just ruled out OVHCloud as the smallest host I can get is a D2-2 and that would be US$8.65 a month

/content/images/2025/11/hetzner-50.png

This makes for some interesting options. I could easily run a modded FTB minecraft server for $10/mo with a DNS name - and that’s if it ran 24/7.

/content/images/2025/11/hetzner-42.png

Load Balancers

We can create a basic LB for $6 a month under the Load Balancers section

/content/images/2025/11/hetzner-43.png

We can easily do Layer 4 (tcp) or 7 (http)

/content/images/2025/11/hetzner-44.png

And handle things like HTTP redirects and sticky sessions (some old apps need that)

/content/images/2025/11/hetzner-45.png

Sadly I won’t be able to use this LB to balance between UpCloud and Hetzner (at least directly) as I can really just pick from servers in Hetzner

/content/images/2025/11/hetzner-46.png

Firewalls

I prefer to handle the FW at the server level, but one can use the Cloud Firewall (free) to setup some rules to limit traffic

For instance, I could limit SSH to just my home address but HTTP/HTTPS from anywhere

/content/images/2025/11/hetzner-47.png

With it applied, it will reduce the burden on the host and block traffic at the edge

/content/images/2025/11/hetzner-48.png

But now I will not be able to SSH to this host from outside my network without modifying the Firewall first

Floating IPs

In many ways, these are Loadbalancers in their simplest form. It’s just a public IP you rent and can point to whatever you want. It costs as must as a small server so I’m not sure the point

/content/images/2025/11/hetzner-49.png

Summary

Today we looked at OVHCloud and Hetzner and compared them with what we just explored in UpCloud.

OVHCloud is fine, but spendy. I had to pay $1 just to create some projects and the price for hosting is higher than the rest. It does have more features in that there are Kubernetes instances and a whole AI/ML area I did not explore

/content/images/2025/11/hetzner-51.png

Hetzner, while not as feature rich as UpCloud, has really good prices on hosts. The fact they give away DNS management is a real plus.

Hetzner also has promo codes. For instance, I found a Linus Tech Tips one (LTT25) worked to give me an extra $20:

/content/images/2025/11/hetzner-52.png

I like UpCloud - the developer tools are just excellent. But I am concerned it will add up. For instance, just stashing my 2.6Kb State file will run me $5 a month

/content/images/2025/11/hetzner-53.png

I wanted to play so I did feed them some money - I’ll be using UpCloud for things - but likely in conjunction with Hetzner.

The other small issue I had is that OVHCloud only let me use US resources. The whole reason, imho, to use a non-US cloud provider is to get GTFO of the States. If I’m going to stay in the US, I might as well use GCP, Azure or AWS (or Akamai or DigitalOcean).

Hetzner OVHCloud IONOS Clouds

Have something to add? Feedback? You can use the feedback form

Isaac Johnson

Isaac Johnson

Cloud Solutions Architect

Isaac is a CSA and DevOps engineer who focuses on cloud migrations and devops processes. He also is a dad to three wonderful daughters (hence the references to Princess King sprinkled throughout the blog).

Theme built by C.S. Rhymes