WordPress runs on 40%+ of websites and scales awkwardly on shared hosting: PHP-FPM choking, MySQL queries slow, plugins bloating memory. A well-configured VPS solves all three — for a monthly fee close to a premium shared plan.
When shared hosting stops making sense
- Consistent >20,000 monthly visitors
- WooCommerce or LMS plugins (both are database-heavy)
- Admin area slows to a crawl, or site takes >4s to load
- Host imposes CPU seconds / worker limits that throttle you
- You want caching and server config control
VPS sizing by traffic
| Monthly visitors | vCPU | RAM | Suggested provider tier |
|---|---|---|---|
| <10,000 | 1 | 1-2 GB | DigitalOcean $6, Hetzner CPX11 (€5), Vultr $6 |
| 10,000-50,000 | 2 | 2-4 GB | DigitalOcean $12-18, Hetzner CPX21 (€8), Linode 4 GB |
| 50,000-200,000 | 2-4 | 4-8 GB | DigitalOcean $24-48, Hetzner CPX31/41, Linode 8 GB |
| 200,000-1,000,000 | 4-8 | 8-16 GB | DigitalOcean $48-96, dedicated resources tier, Linode 16 GB+ |
| >1,000,000 | 8+ | 16 GB+ | Load-balanced, multi-node, or managed WordPress host (Kinsta, WP Engine) |
The software stack
- OS: Ubuntu 22.04 LTS (most tutorials and guides assume it).
- Web server: Nginx or LiteSpeed. Nginx is free, universal; LiteSpeed (via OpenLiteSpeed) is free and pairs beautifully with LSCache plugin.
- PHP: 8.2 or 8.3 with OPcache enabled.
- Database: MariaDB 10.11 or MySQL 8. Tune my.cnf for the RAM you have.
- Cache: Redis or Memcached for object cache, page cache via WP Rocket / LSCache / W3 Total Cache.
- SSL: Let's Encrypt via Certbot (free, auto-renewing).
Shortcut: use a control panel
Setting up LEMP (Linux, Nginx, MySQL, PHP) from scratch takes an afternoon. Control panels do it in minutes:
| Panel | Pricing | Notes |
|---|---|---|
| RunCloud | $6.67-$90/mo | Clean UI, Nginx + PHP stack, WordPress focus |
| SpinupWP | $12/mo/server | From Delicious Brains, WordPress-specialized |
| Cloudways | $14-$45/mo server-all-in (includes hosting) | Managed stack on DO/Linode/Vultr/AWS/GCP — no manual setup |
| Ploi | $8-$20/mo | Developer-focused, git deploy |
| Plesk / cPanel | $10-$45/mo | Traditional, full-featured, heavier |
| CyberPanel | Free / $10+ | OpenLiteSpeed native, LSCache integration |
Caching is everything
An uncached WordPress page typically takes 400-1200ms to generate. A fully cached page serves in 20-80ms. Layer caching:
- Page cache. Static HTML snapshots of pages. LSCache, WP Rocket, W3 Total Cache.
- Object cache. Redis or Memcached for WP queries and options.
- Browser cache. Set long max-age headers on assets.
- CDN. Cloudflare free tier is often all you need — pushes static assets and cached HTML to the edge.
After enabling page cache + Redis + Cloudflare, a properly sized VPS handles 10-50x more traffic before struggling.
Backups
- UpdraftPlus or BackupBuddy for scheduled WordPress-level backups to S3, B2, or Dropbox.
- Provider-level snapshots ($2-5/month) for full-disk rollback.
- Offsite: weekly dump to a different provider. If OVH Strasbourg taught the industry anything, it's that single-region backups aren't backups.
Security basics
- UFW firewall allowing only 22 (SSH), 80, 443.
- SSH key auth only; disable password login.
- Fail2Ban for wp-login brute force.
- Wordfence or Solid Security Pro plugin.
- WP-CLI for keeping core + plugins updated.
- Hide wp-admin behind Cloudflare Access or a subdomain.
FAQ
Is managed WordPress (Kinsta, WP Engine) worth it over self-managed VPS? If you value time and have budget: yes. Kinsta at $35+/month removes server ops, includes CDN, staging, backups, and performance tuning. Self-managed VPS saves $10-20/month but costs you 2-4 hours of ops work monthly.
What about WordPress.com? Locked-down, limited plugins on lower plans. Good for beginners, unsuitable for most businesses. Jump to a VPS or managed host instead.
How do I migrate from shared hosting? Export via Duplicator, All-in-One WP Migration, or manual (files + database). Point DNS to new server once you've verified it loads correctly.