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 visitorsvCPURAMSuggested provider tier
<10,00011-2 GBDigitalOcean $6, Hetzner CPX11 (€5), Vultr $6
10,000-50,00022-4 GBDigitalOcean $12-18, Hetzner CPX21 (€8), Linode 4 GB
50,000-200,0002-44-8 GBDigitalOcean $24-48, Hetzner CPX31/41, Linode 8 GB
200,000-1,000,0004-88-16 GBDigitalOcean $48-96, dedicated resources tier, Linode 16 GB+
>1,000,0008+16 GB+Load-balanced, multi-node, or managed WordPress host (Kinsta, WP Engine)

The software stack

  1. OS: Ubuntu 22.04 LTS (most tutorials and guides assume it).
  2. Web server: Nginx or LiteSpeed. Nginx is free, universal; LiteSpeed (via OpenLiteSpeed) is free and pairs beautifully with LSCache plugin.
  3. PHP: 8.2 or 8.3 with OPcache enabled.
  4. Database: MariaDB 10.11 or MySQL 8. Tune my.cnf for the RAM you have.
  5. Cache: Redis or Memcached for object cache, page cache via WP Rocket / LSCache / W3 Total Cache.
  6. 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:

PanelPricingNotes
RunCloud$6.67-$90/moClean UI, Nginx + PHP stack, WordPress focus
SpinupWP$12/mo/serverFrom 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/moDeveloper-focused, git deploy
Plesk / cPanel$10-$45/moTraditional, full-featured, heavier
CyberPanelFree / $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:

  1. Page cache. Static HTML snapshots of pages. LSCache, WP Rocket, W3 Total Cache.
  2. Object cache. Redis or Memcached for WP queries and options.
  3. Browser cache. Set long max-age headers on assets.
  4. 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.