Most e-commerce store owners move to a VPS for one reason: the resource wall. A flash sale, a newsletter blast, or a single viral post pushes CPU or memory past the limit your shared plan allows, and the storefront goes dark exactly when revenue matters most. But a VPS only fixes that problem if you size it against your actual traffic pattern instead of a marketing headline. The real question is not “which plan looks cheapest” but “which plan keeps checkout responsive during the three-hour window that decides your month”.
Platform hosting bundles the server, the checkout stack, and the CDN into one monthly fee, and that price scales with your order volume. A self-managed VPS decouples those layers: you pay a flat rate for compute, choose your own payment gateway, and keep the margin a hosted platform would take. For stores doing under roughly 20,000 orders a month, that decoupling usually lands 30-50% below equivalent managed commerce plans, provided you are willing to run the stack yourself. If you want to see how entry-level plans line up on price and included resources before committing, our VPS comparison table lists the specs side by side.
Size the server to the checkout, not the catalog
Commerce traffic is bursty, so average load tells you almost nothing. The number that matters is concurrent checkout sessions — the shoppers inside the cart-to-payment flow at the same time. Rough sizing for a well-optimized WooCommerce or custom PHP stack looks like this:
| Concurrent checkout sessions | vCPU | RAM | Storage | Typical monthly cost |
|---|---|---|---|---|
| Up to 15 | 1 | 2 GB | 40 GB NVMe | $6-$10 |
| 15-50 | 2 | 4 GB | 80 GB NVMe | $12-$20 |
| 50-150 | 4 | 8 GB | 160 GB NVMe | $24-$40 |
| 150-400 | 8 | 16 GB | 320 GB NVMe | $48-$80 |
Two variables bend these numbers. First, caching: a full-page cache in front of the store (Nginx FastCGI or a reverse proxy) can cut the vCPU requirement by half for browsing traffic, though checkout and account pages always bypass the cache and hit PHP directly. Second, database engine: MariaDB with a properly sized InnoDB buffer pool handles concurrent cart writes far better than an under-tuned default install, and it costs nothing but tuning time.
The line items that decide the real bill
- Bandwidth overage. Product images and cart API calls add up. A store with 20 GB of image assets can burn 1-2 TB a month. Confirm the overage rate per GB before you buy, because $0.01/GB and $0.10/GB are a tenfold difference at the same traffic level.
- Backup storage. Daily database dumps of a 5 GB store compress to about 1-2 GB, but most providers bill backup space separately or limit you to a single weekly snapshot. Off-site backups to cheap object storage usually cost $1-3 a month.
- Payment gateway vs. server cost. Stripe’s 2.9% plus $0.30 on a 20,000-order month at a $50 average order value is roughly $30,000 – far more than the server. Optimizing the hosting bill is worth doing, but do not confuse it with the biggest cost line.
- IP and SSL. A dedicated IPv4 is sometimes $1-3 extra. Free Let’s Encrypt certificates remove the SSL line entirely.
Security and uptime are cost decisions too
A store that accepts card data needs PCI-adjacent hygiene even when using a hosted gateway: TLS everywhere, automatic OS security updates, a firewall that only exposes 80/443/22, and fail2ban on SSH. None of these require paid add-ons, but they do require a maintenance routine. Budget 30-60 minutes a month for patching and log review. Skipping it is the most expensive decision available, because a compromised checkout costs far more than any plan upgrade.
For uptime, look past the headline SLA percentage. What matters is whether the provider credits you for downtime automatically or requires a support ticket within a narrow window. A 99.9% guarantee that only pays out on request is worth less than 99.5% that pays without prompting. The practical target for a store is upstream redundancy: run the database on the same box, but keep a hot standby clone and tested restore procedure, so a hardware failure costs you an hour rather than a day.
A concrete $15/month build
Here is a configuration that handles a small store reliably without overspending: 2 vCPU, 4 GB RAM, 80 GB NVMe, 2 TB transfer, running Nginx, PHP-FPM with OPcache, MariaDB, and a full-page cache. Add a $1-3 object-storage bucket for off-site backups and a free CDN in front of static assets. This setup comfortably serves several hundred product views a minute and 15-50 concurrent checkouts. It is not the cheapest plan on any list, and that is the point – it leaves enough memory headroom that a traffic spike triples your load without touching swap.
The mistake budget buyers make is optimizing the sticker price and ignoring the failure cost. Map your concurrent-checkout number, add the overage and backup lines, and pick the plan one step above your current peak. When you are ready, compare hosting plans side by side and check the overage rate and backup policy before the CPU count.


