Disclosure: we may earn a commission or referral reward from CloudCone, Contabo, DigitalOcean (account credit, not cash), Hostwinds, InterServer, RackNerd, VPSDime and Vultr if you sign up through our links. It does not change the price you pay. Every other provider pays us nothing. Prices in this guide are as of the date shown and may have changed; see the comparison pages for the latest checked prices.

Guides · MIGRATE

Shared hosting to a plain VPS migration in 2026: keep your budget, gain your independence

Some prices quoted in this guide are out of date. It is being rebuilt on our price index; for current prices use the comparison pages, which show when each price was checked.

The right answer isn't always managed hosting. If you're technical enough to be reading this guide and cost matters, running your own site on a $4.60 Hetzner CX22 is faster than any shared hosting product, cheaper than most, and teaches you real Linux systems as a bonus. This is the DIY migration path.

Prices as of 2026-09-22.

Cost comparison

Current shared host renewal Hetzner CX22 Monthly saved
Bluehost Choice Plus ($18) $4.60 $13.40
HostGator Baby ($14) $4.60 $9.40
SiteGround GrowBig ($25) $4.60 $20.40
GoDaddy Deluxe ($18) $4.60 $13.40

Annual saving: $110-245 per year, per site. If you're running 3 sites on shared hosting, that's a lot.

What you're signing up for

Running your own VPS costs 2-4 hours a month of your time:

  • OS security updates (10 min/month).
  • PHP/WordPress core updates (10 min/month).
  • Log review for weird activity (15 min/month).
  • Occasional troubleshooting (variable).

Plus 2-4 hours of initial setup: install Nginx, PHP-FPM, MySQL/MariaDB, Certbot, UFW firewall, cron backups to object storage.

If your time is worth $50/hour, that's $150/mo of unpriced labor for a $4.60 host. If your time is worth $0 (side project, learning, hobby), it's a straight $10-20/mo savings.

Prerequisites

  • Comfortable in a shell.
  • Familiar with apt, systemctl, and text-mode config editors (nano, vim).
  • Willing to Google Linux errors and understand the answers.
  • Willing to keep basic backups on schedule.

If any of these is a no, the Cloudways migration is a better path.

Step-by-step

1. Provision Hetzner CX22

Sign up at console.hetzner.cloud. Create a CX22 in Falkenstein (EU) or Ashburn (US). Ubuntu 24.04 LTS.

2. Basic hardening

```bash

Create non-root user

adduser deploy

usermod -aG sudo deploy

SSH keys only

mkdir -p /home/deploy/.ssh

Paste your public key into /home/deploy/.ssh/authorized_keys

chown -R deploy:deploy /home/deploy/.ssh

chmod 700 /home/deploy/.ssh

chmod 600 /home/deploy/.ssh/authorized_keys

Disable root SSH and password auth

sed -i 's/^#PermitRootLogin./PermitRootLogin no/' /etc/ssh/sshd_config

sed -i 's/^#PasswordAuthentication./PasswordAuthentication no/' /etc/ssh/sshd_config

systemctl restart ssh

Firewall

ufw allow 22

ufw allow 80

ufw allow 443

ufw enable

Auto-updates

apt install unattended-upgrades

dpkg-reconfigure -plow unattended-upgrades

```

3. Install LEMP (Nginx + MySQL/MariaDB + PHP-FPM)

```bash

apt update

apt install nginx php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip mariadb-server certbot python3-certbot-nginx

```

4. Configure a WordPress site

Create /etc/nginx/sites-available/yourdomain.com:

```nginx

server {

server_name yourdomain.com www.yourdomain.com;

root /var/www/yourdomain.com;

index index.php;

location / {

try_files $uri $uri/ /index.php?$args;

}

location ~ \.php$ {

include snippets/fastcgi-php.conf;

fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;

}

}

```

Enable: ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/

Reload: systemctl reload nginx

5. Export from shared hosting

  • Log into cPanel → File Manager → download public_html.zip.
  • cPanel → phpMyAdmin → export your WP database as SQL.

6. Import to your VPS

```bash

Unzip files

cd /var/www/yourdomain.com

unzip /tmp/public_html.zip

chown -R www-data:www-data /var/www/yourdomain.com

Import database

mysql -e "CREATE DATABASE wp; CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'strong-password'; GRANT ALL ON wp.* TO 'wpuser'@'localhost';"

mysql wp < /tmp/database.sql

Update wp-config.php with the new DB credentials

```

7. SSL via Certbot

```bash

certbot --nginx -d yourdomain.com -d www.yourdomain.com

```

8. DNS cutover

Drop TTL, change A records, wait for propagation.

9. Automated backups

Cron a nightly mysqldump + tar to Backblaze B2 or DO Spaces. Rough script:

```bash

#!/bin/bash

BACKUP_DIR=/backups

DATE=$(date +%Y%m%d)

mysqldump wp | gzip > $BACKUP_DIR/db-$DATE.sql.gz

tar czf $BACKUP_DIR/files-$DATE.tgz /var/www/yourdomain.com

Sync to B2 (install rclone first)

rclone copy $BACKUP_DIR b2:my-backups/

find $BACKUP_DIR -mtime +7 -delete

```

Add to /etc/cron.d/wp-backup running at 3am.

10. Cancel shared hosting

Download a final backup. Cancel. Keep for 60 days.

What you gain

  • ~$10-20/mo saved.
  • Real understanding of what runs your website.
  • Faster page loads — LEMP on a dedicated 4 GB VPS beats shared hosting easily.
  • No renewal price traps.
  • Full control over PHP settings, cron, TLS ciphers, everything.

What you take on

  • All the sysadmin work. Detailed above.
  • On-call responsibility. Nobody else will notice your site is down.
  • Learning curve. Real, but manageable.

Related guides

Prices as of 2026-09-22.