NODED.CLOUD/Blog/Self-Hosted Headless CMS on a VPS

Self-Hosted Headless CMS on a VPS

09 Aug 2026 · Mario Marin

A sizing guide for agencies moving Strapi or Directus off per-seat SaaS plans onto a self-hosted VPS, plus when to split the CMS database onto its own instance once multiple client projects share the box.

Every agency running client sites on Strapi or Directus eventually hits the same wall: the SaaS tier that felt generous with two projects gets expensive fast once you're managing ten. Self-hosted headless CMS VPS hosting flips that math — you pay for compute once, roughly EUR4 to EUR58 a month depending on tier, and stack as many client projects on it as the box can hold. This is a sizing note from our rack, not a marketing pitch: what tier to pick, what Strapi and Directus actually do to a small VPS under real traffic, and the point where you should stop cramming more projects onto one instance and split the database off.

Why Agencies Are Moving Off Headless CMS SaaS Plans

Per-seat and per-project pricing on hosted headless CMS platforms scales against you in exactly the direction agency work grows. Add a client, add a seat. Add a staging environment, add another project slot. None of that reflects actual resource usage — a low-traffic marketing site content model costs the same seat as a high-traffic e-commerce catalog. Self-hosting Strapi or Directus on your own VPS removes the per-project tax entirely: the constraint becomes CPU, RAM, and disk I/O, which you control and can size deliberately.

Sizing Self-Hosted Headless CMS VPS Hosting for Strapi and Directus

Both Strapi and Directus are Node.js processes with a REST/GraphQL layer on top of a relational database, and both recommend Postgres for anything beyond a demo. Running the CMS and Postgres on the same VPS is fine for a single project or a handful of low-traffic sites — the two processes share RAM and NVMe I/O without fighting over CPU under normal admin-panel and content-API load. Here's how we'd map project count to tier on our hourly VPS lineup, which runs from EUR4/mo to EUR58/mo billed to the second:

VPS TierSpecsFit
VPS I2GB RAM / 1 vCPU / 40GB NVMeOne CMS instance, single client, staging or low-traffic production
VPS II4GB RAM / 2 vCPU / 80GB NVMeOne CMS instance plus Postgres with headroom for media uploads and builds
VPS III8GB RAM / 2 vCPU / 120GB NVMeTwo to three client projects sharing one CMS instance
VPS IV8GB RAM / 2 vCPU / 120GB NVMeSame footprint as VPS III with more disk headroom for asset-heavy projects
VPS V16GB RAM / 4 vCPU / 200GB NVMeSeveral concurrent CMS instances, or CMS plus Postgres split with room to spare
VPS VI32GB RAM / 6 vCPU / 400GB NVMeAgency multi-tenant hosting, one box per environment tier or heavy media libraries

See the full breakdown on our VPS hosting page. All tiers ship on NVMe with root SSH access, so the sizing above assumes no special provisioning — it's the same image across tiers.

Strapi vs Directus on a Single VPS — What Actually Differs

In our experience, Strapi's admin panel and API rebuild from your content-type schema on restart, so a schema change costs more CPU and memory momentarily than Directus, which reads its schema from the database. A VPS II is workable for a single Strapi project, but if you're iterating on content types daily during a build phase, VPS III gives you breathing room so the rebuild doesn't compete with live traffic. Directus tends to run lighter at idle since there's no compile step, which is why it tolerates stacking several small client projects on one instance longer.

Both benefit from moving file uploads to object storage or at minimum monitoring disk usage — media libraries are usually the first thing to fill an NVMe volume, not the database itself.

When to Separate the CMS Database onto Its Own Instance

The single-VPS setup works well right up until several client projects share one box and a spike in one project's traffic — a content sync, an import job, a client's own marketing push — starts stealing I/O from Postgres and slowing down every other project on that instance. That's the signal to split: move Postgres to its own VPS and point every CMS instance at it over the private network. It isolates the noisy-neighbor problem, lets you size the database VPS for I/O and RAM independently of the CMS compute tier, and turns backing up client content into one focused job instead of something bundled into each project's VPS.

A practical split for an agency running four to six client projects: one VPS III or VPS V running the CMS instances, and a second VPS II or VPS III dedicated purely to Postgres. Both provision from the same 41 OS templates in a median 47 seconds, so testing the split costs a spare hour, not a planning cycle.

Deployment Notes

Root SSH access means you're not fighting a managed platform's restrictions on Node versions, system packages, or process managers — install what Strapi or Directus needs, run it under PM2 or systemd, and put Postgres behind a firewall rule scoped to your CMS instance's private IP. If your pipeline builds Strapi's admin panel or runs Directus migrations as a separate step, a second VPS I from the same hourly lineup keeps that build load off production entirely — hourly billing makes spinning it up for a deploy window cheap. And once an agency's client roster outgrows what VPS-level vCPU sharing can reasonably handle, that's usually the point to look at dedicated hardware instead of another VPS tier.

How Noded Can Help

We size these boxes the same way we'd size our own — start with the tier that matches today's project count, not one that anticipates growth you haven't sold yet. Hourly billing to the second on every tier in our VPS lineup means testing a Strapi or Directus deploy, or trialing the database-split pattern above, costs an hour of compute if it doesn't work out, not a monthly commitment. Root access and 41 OS templates mean we're not standing between you and whatever Node version or Postgres extension your CMS build needs. If you're weighing Directus VPS hosting in Europe against a Strapi VPS setup and want a second opinion on sizing before you commit, that's a conversation we're happy to have.

FAQ

Can Strapi and Postgres run on the same VPS?

Yes, for a single project or a small handful of low-traffic sites. Strapi's rebuild step on schema changes is the main CPU spike to plan around, so give it a tier with some headroom rather than the smallest option if you're actively iterating on content types.

How much RAM does Directus need on a VPS?

Directus runs lighter at idle than Strapi since it doesn't compile an admin build, which is why it tolerates stacking multiple small client projects on one instance longer before you need to scale up. Actual RAM needs still depend on concurrent admin users and API traffic, so monitor and move up a tier before you're consistently near the ceiling.

When should I move the CMS database to its own VPS?

When one client project's traffic spike or import job starts visibly slowing down other projects sharing the same Postgres instance. That noisy-neighbor symptom is the clearest signal to split compute from database rather than sizing up the combined box further.

Does self-hosting Strapi or Directus save money over SaaS plans for agencies?

It removes the per-seat and per-project pricing model entirely — you're paying for a VPS tier, not a project count. Whether it's cheaper depends on how many client projects you're running; the more projects sharing one instance, the more the math favors self-hosting.

What OS should I use for a self-hosted Strapi or Directus VPS?

Any current Linux distribution works — both are Node.js applications with no OS-specific dependencies beyond Node and Postgres client libraries. Pick from the available OS templates based on what your team already knows for patching and package management.

← All posts

Related services

Run this on NODED.CLOUD.

Keep reading

More from the NOC.

03 Sept 2026·Mario Marin

Sizing a VPS for Self-Hosted Help Desk Software

Most VPS sizing advice for self-hosted help desks skips the one variable that matters: whether your ticketing tool runs a search index. Here's a practical RAM floor for osTicket vs Zammad, mapped to specific VPS tiers, plus the EU network-ownership angle for ticket PII.

Read post
01 Sept 2026·Mario Marin

Self-Hosted Error Tracking: GlitchTip on a VPS

A sizing and setup guide for running GlitchTip, the open-source Sentry-compatible error tracker, on a self-hosted VPS — with a look at why teams move off per-event SaaS pricing and keep error data on EU infrastructure.

Read post

Like the way we run things? Spin up a server in 60 seconds.