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
- Best hosting for a WordPress site — the wider set of options.
- Cheapest VPS under $10 in 2026 — Hetzner CX22 in context.
- How to move from shared hosting to a VPS in a weekend — the compressed how-to.
Prices as of 2026-09-22.