Skip to content
Back to Blog
Linux & Server11 min read

How to Set Up VPS Hosting: 8 Providers Benchmarked

A practical walkthrough of setting up VPS hosting across eight major providers, with real setup steps, SSH commands, and a comparison of control panels and performance.

Written by Abdul AbrorTechnical Hosting Support Engineer
How to Set Up VPS Hosting: 8 Providers Benchmarked
On this page

I've set up dozens of VPS instances across every major provider in the last two years, and the real differences show up in the first thirty minutes. Not the marketing copy or the fake benchmarks, but the actual SSH login, the control panel quirks, and how quickly you can get a working stack running.

This guide walks through the identical setup process on eight providers: DigitalOcean, Linode (Akamai), Vultr, Hetzner Cloud, UpCloud, OVHcloud, AWS Lightsail, and Google Cloud Compute Engine. You'll see where each one shines and where they trip you up.

What you need before starting

An SSH key pair on your local machine. Generate one if you don't have it:

ssh-keygen -t ed25519 -C "[email protected]"

A domain name (optional but useful for testing). A credit card or PayPal account. About fifteen minutes per provider if you follow along.

Step 1: Create the VPS instance

Every provider has a slightly different flow. I'm using the smallest tier that gives you 1GB RAM and one CPU core for a fair comparison.

DigitalOcean

Log in, click Create > Droplets. Choose Ubuntu 22.04 LTS, Basic plan, Regular CPU, 1GB RAM. Pick a datacenter close to you. Add your SSH key in the authentication section. Name it something like test-vps-do. Hit Create Droplet.

You get an IP within thirty seconds.

Linode (Akamai)

Create > Linode. Select Ubuntu 22.04 LTS, Shared CPU, Nanode 1GB plan. Region matters—some have better routing than others. Paste your SSH public key. Label it test-vps-linode. Root password is required even if you use SSH keys. Boot takes about twenty seconds.

Vultr

Deploy New Server > Cloud Compute. Ubuntu 22.04, Regular Performance, 1GB RAM. Choose location. Add SSH key under Server Hostname & Label. Deploy. IP appears immediately, but provisioning takes a minute.

Hetzner Cloud

Click New Project if needed, then Add Server. Location (Nuremberg and Falkenstein are popular), Ubuntu 22.04, CX11 (1 vCPU, 2GB RAM for the same price as others' 1GB—this is Hetzner's edge). SSH key, server name. Create & Buy. Fastest provisioning I've seen.

UpCloud

Deploy a Server. Zone, Ubuntu 22.04, 1GB plan. SSH keys in the optional settings. Hostname. Deploy. Takes about forty-five seconds. UpCloud gives you a firewall toggle in the UI during setup, which is handy.

OVHcloud

Navigate to Public Cloud > Instances > Create an Instance. Choose a region, Ubuntu 22.04, s1-2 (1 vCPU, 2GB RAM). SSH key import. Name it. The interface feels heavier than the others, and provisioning is slower—two to three minutes.

AWS Lightsail

Create Instance > Linux/Unix > OS Only > Ubuntu 22.04. Choose the $3.50/month plan (512MB RAM) or $5 (1GB). Key pair management is separate—upload your public key in Account > SSH Keys first. Launch takes about ninety seconds. You get a static IP option right away, which is nice.

Google Cloud Compute Engine

Create Instance. Name, region, zone. Machine type e2-micro (0.25-1 vCPU, 1GB RAM, free tier eligible). Boot disk: Ubuntu 22.04 LTS. Under Security, paste your SSH key. Firewall rules need manual setup for HTTP/HTTPS. Create. Takes about sixty seconds.

Step 2: First SSH connection

Grab the IP from each provider's dashboard. Connect:

ssh root@your-vps-ip

DigitalOcean, Vultr, Hetzner, and UpCloud drop you straight into root. Linode also uses root. OVHcloud defaults to root. AWS Lightsail uses ubuntu user with sudo. Google Cloud uses your Google username (check the dashboard for exact user) with sudo.

For non-root accounts:

ssh ubuntu@your-lightsail-ip
sudo su -

First login on AWS and GCP takes an extra step. Not a dealbreaker, just different.

Step 3: Initial system updates

Run this immediately on every box:

apt update && apt upgrade -y

Hetzner and UpCloud finish in under a minute because their images are recent. OVHcloud and Google Cloud had more packages to update in my tests—three to four minutes. DigitalOcean and Linode sit in the middle.

Reboot if kernel updates installed:

reboot

Reconnect after thirty seconds.

Step 4: Create a non-root user

Running as root is bad practice. Add a user:

adduser deploy
usermod -aG sudo deploy

Copy your SSH key to the new user:

rsync --archive --chown=deploy:deploy ~/.ssh /home/deploy

Test the new login in a second terminal before you log out of root:

ssh deploy@your-vps-ip
sudo apt update

If that works, disable root SSH login. Edit /etc/ssh/sshd_config:

nano /etc/ssh/sshd_config

Find PermitRootLogin and set it to no. Restart SSH:

systemctl restart ssh

Step 5: Configure firewall

Ubuntu includes ufw. Allow SSH and enable:

ufw allow OpenSSH
ufw enable

For a web server, add HTTP and HTTPS:

ufw allow 'Nginx Full'

Or manually:

ufw allow 80/tcp
ufw allow 443/tcp

Check status:

ufw status

UpCloud and AWS Lightsail also have cloud-level firewalls in their dashboards. Google Cloud requires you to create firewall rules in the VPC settings—default blocks HTTP/HTTPS. OVHcloud and Hetzner let you manage firewalls in the console but don't enforce them by default.

Step 6: Install a web stack

I'm using Nginx and PHP-FPM for a typical hosting setup.

apt install -y nginx php8.1-fpm php8.1-mysql php8.1-cli php8.1-curl php8.1-xml php8.1-mbstring

Start and enable:

systemctl enable nginx php8.1-fpm
systemctl start nginx php8.1-fpm

Visit http://your-vps-ip in a browser. You should see the Nginx welcome page. If not, check firewall rules and cloud-level security groups.

Create a PHP info file:

echo "<?php phpinfo(); ?>" > /var/www/html/info.php

Visit http://your-vps-ip/info.php. PHP version and loaded modules confirm everything works.

Step 7: Install MariaDB

apt install -y mariadb-server
mysql_secure_installation

Follow the prompts: set root password, remove anonymous users, disallow root remote login, remove test database. All yes except the first prompt (current password is blank).

Test:

mysql -u root -p

Create a database:

CREATE DATABASE testdb;
CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON testdb.* TO 'testuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

How the providers compare on control panels

DigitalOcean has the cleanest UI. Monitoring graphs are built-in, backups are one click, and the firewall manager is intuitive. Linode (Akamai) matches it feature-for-feature but feels slightly busier. Vultr's dashboard is fast but less polished—snapshot management is harder to find.

Hetzner Cloud is minimal in the best way. Snapshots, volumes, and firewall rules are all straightforward. No bloat. UpCloud strikes a similar balance and adds a firewall wizard during server creation.

OVHcloud's Horizon-based interface is clunky. Navigation requires too many clicks, and the terminology doesn't match what you'd expect if you've used other clouds. AWS Lightsail simplifies the AWS experience but still feels like AWS under the hood—more options, more complexity. Google Cloud Console is powerful but overwhelming for simple VPS tasks.

If you've never touched a VPS before, start with DigitalOcean or Hetzner. If you need advanced networking or integrations, Linode or UpCloud. If you're already in AWS or GCP ecosystems, Lightsail or Compute Engine make sense. OVHcloud is fine if you're Europe-based and want local billing, but the UX is dated.

Performance notes from identical workloads

I ran the same LEMP stack on each instance and tested with curl for latency and ab (ApacheBench) for concurrent requests. Real results depend on your location and workload, but patterns emerged.

Hetzner consistently delivered the best single-request latency from Europe. UpCloud was close. Vultr and DigitalOcean tied for North America. Linode performed well globally. AWS Lightsail's micro instance struggled under concurrent load compared to the others—you pay less, you get less CPU credit. Google Cloud's e2-micro is free-tier eligible but also bursty; sustained load throttles it.

OVHcloud's network felt slower in my Frankfurt-to-London tests. Could be routing, could be the specific datacenter. Disk I/O on Hetzner's local SSDs beat everyone except UpCloud's MaxIOPS offering.

For 24/7 production workloads with consistent traffic, Hetzner or UpCloud give the best value. For burstable dev/test boxes, DigitalOcean or Linode are solid. For integration with managed services (RDS, Cloud SQL, S3), AWS or GCP make life easier despite the VPS itself being less impressive.

What to do after the baseline setup

Install Fail2Ban:

apt install -y fail2ban
systemctl enable fail2ban
systemctl start fail2ban

This blocks brute-force SSH attempts automatically. Check logs:

tail -f /var/log/fail2ban.log

Set up automated backups. Most providers offer snapshot scheduling—enable it. DigitalOcean charges per snapshot. Hetzner includes snapshots in the price. Linode and Vultr charge separately. AWS and GCP require you to configure snapshot policies manually.

Enable unattended security updates:

apt install -y unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades

Select Yes. Edit /etc/apt/apt.conf.d/50unattended-upgrades if you want to auto-reboot (careful on production).

Configure monitoring. DigitalOcean, Linode, and UpCloud include basic CPU/RAM/disk graphs. For deeper visibility, install Netdata:

bash <(curl -Ss https://my-netdata.io/kickstart.sh)

Access it at http://your-vps-ip:19999. Adjust firewall:

ufw allow 19999/tcp

Or restrict to your IP:

ufw allow from your.home.ip to any port 19999

Pick based on what you actually need

Hetzner if you want maximum RAM and disk for minimum cost. DigitalOcean or Linode if you value a polished interface and good documentation. Vultr for global datacenter reach. UpCloud for high-IOPS workloads. AWS Lightsail or GCP Compute if you're already using their managed services. OVHcloud if European data residency is non-negotiable.

The setup process is nearly identical across all eight once you know the SSH commands. The real differences show up in billing predictability, network performance under load, and how quickly support responds when things break. Test two or three, run your actual workload, measure. Benchmarks lie, but your application logs don't.

FAQ

Which provider is cheapest?

Hetzner gives you 2GB RAM for the price others charge for 1GB. AWS and GCP free tiers beat everyone if you stay under limits, but throttling kicks in fast.

Do I need a control panel like cPanel?

No. Command-line management is faster once you learn the basics. If you must have a GUI, install Webmin or Virtualmin separately—none of these eight include cPanel by default.

Can I migrate between providers easily?

Backup your data and configs, spin up a new VPS, restore. Most providers offer migration services or you can use rsync. DNS TTL changes take time.

How do I point a domain to my VPS?

Add an A record in your DNS zone pointing to the VPS IP. Wait for propagation (a few minutes to an hour). Configure Nginx server blocks for the domain.

What if I need more resources later?

Every provider supports resizing. DigitalOcean, Linode, Vultr, Hetzner, and UpCloud let you resize with minimal downtime. AWS and GCP require stopping the instance. OVHcloud resizing is slower.