Deploy
Strapi self hosted. The same admin panel, on a machine with your name on it.
Strapi Cloud starts at $35 for one project. This is the whole server, and it does not count projects.
Strapi v5.52.1, the open source headless CMS, deploys as a one-click template with its own PostgreSQL 16 onto a dedicated server Selfhost.dev provisions, secures and runs, across six locations on three continents. A European 4 GB server is $0.02/hr, about $15 a month, however many projects you put on it.
One click. Two containers. The template deploys in about six minutes.
no signup
+$5.00 added at signup · deployment choice preserved · no card
What is Strapi self hosted?
The same admin panel.
On a machine with your name on it.
What it is. Running the open source build of Strapi on a server you control rather than subscribing to Strapi Cloud. The software is identical. What changes is who holds the database and who gets the bill.
Who it is for. Teams running more than one Strapi project, where per-project pricing compounds fastest. Also anyone whose content has to sit inside their own infrastructure for a residency or procurement reason.
When to use it. When you want the content API and the database on hardware you can point at. We name the two cases where Strapi Cloud is the better answer below, and they are real.
Strapi self hosted requirements
What Strapi needs, and what arrives already wired.
| Requirement | This deployment |
|---|---|
| Version | Strapi v5.52.1, pinned |
| Database | PostgreSQL 16, bundled |
| Containers | Two: Strapi and its database |
| Memory | 4 GB recommended, which is also the platform minimum for any project |
| Architecture | x86 or ARM, both supported |
| Node environment | NODE_ENV=development, deliberately, to keep the content-type builder usable |
| Content API | Returns 403 or 404 until an admin grants permissions |
| Admin registration | Open until the first account exists, then closed |
| What Selfhost.dev provides | Detail |
|---|---|
| Locations | Six, across three continents |
| HTTPS | Certificate issued and renewed per hostname |
| Custom domain | One, added after launch |
| Backups | Optional. Daily, whole VM, last 7 kept, +20% of the server price |
| Monitoring | Metrics, logs, and a health check every 60 seconds |
| Firewall | Default deny, ports 22, 80 and 443 |
| Deploy time | About 6 minutes for the template, once the server exists |
| MCP tools | 189 across 31 modules |
Specifications current as of September 2026.
What is in the Strapi deployment
Two containers, four volumes, nothing floating.
Selfhost.dev pins every image to an exact tag. Nothing moves until you move it.
| Component | Image and tag | What it does |
|---|---|---|
| Strapi | elestio/strapi-development:v5.52.1 | Strapi v5, admin panel and content API, on port 1337 |
| PostgreSQL | postgres:16-alpine | The content database |
| Volume | What it holds |
|---|---|
strapi-config | The project configuration |
strapi-src | The project source, including your content-type schemas |
strapi-uploads | All media, at /opt/app/public/uploads |
strapi-postgresql-data | The database |
Rebuilding the containers does not touch any of them. The schemas you build in the admin panel are files on that disk, which is also why they travel when you export.
PostgreSQL 16, not the default SQLite
Strapi will happily run on SQLite, and a local install usually does. This template ships PostgreSQL 16 instead, on the same server. That matters in two places: a SQLite destination blocks other database connections during a data transfer, and a single file is a harder thing to back up cleanly than a database you can pg_dump while it runs.
Both images are pinned to an exact tag
elestio/strapi-development:v5.52.1 and postgres:16-alpine. Neither is a floating tag, so a redeploy brings back the version you were already running. Your Strapi version moves when you move it, and at no other time.
What we set up for you
The five secrets, and why they are five.
This is the part a compose file does not do for you.
- Five separately generated secrets, every one persisted:
JWT_SECRET,ADMIN_JWT_SECRET,APP_KEYS,API_TOKEN_SALTandTRANSFER_TOKEN_SALT. Upstream reuses one value for two of them and omits the salts entirely, which silently invalidates every API token and transfer token you have issued the moment the container restarts. -
API_TOKEN_SALTpersisted, so the API tokens your frontend holds keep working after a redeploy. -
TRANSFER_TOKEN_SALTpersisted, which is what makes Strapi's own data tooling usable here. -
DATABASE_*wired to the bundled PostgreSQL 16, generated per deployment, never a documented default. -
STRAPI_TELEMETRY_DISABLED=true. Usage telemetry is off. - TLS per hostname, issued and renewed automatically, and a default-deny firewall with only 22, 80 and 443 open.
No Selfhost.dev template ever boots on a documented default password. If credential seeding fails, the instance boots locked rather than open.
How to self host Strapi in four steps
From zero to live.
No server to set up.
Four steps. Two containers, and PostgreSQL comes up before Strapi answers.
1. Choose Strapi and a server
The page opens the exact console template. Pick the 4 GB server and one of six locations, then submit. Nothing else needs configuring.
2. Let it build
Two containers start and PostgreSQL comes up before Strapi answers. The template deploys in about six minutes.
3. Register the administrator
Open the generated HTTPS address at /admin and create the first account. Registration closes behind you.
4. Model content, then open the API
Build your content types in the builder, then grant the roles and permissions that make /api/* answer. Add your own domain from the resource Settings screen.
What we run, and what you run
Your content model. Our machine.
| Selfhost.dev runs | You run |
|---|---|
| The server, in one of six locations | Strapi itself: content types, fields and relations |
| Both containers and their restart policy | Roles, permissions and API tokens |
| The TLS certificate, issued and renewed | Which routes are public and which are not |
| The default-deny firewall, ports 22, 80 and 443 | Plugins, custom controllers and middleware |
| Server CPU and memory metrics | Your content, your exports, your retention |
| Optional whole-server backups | Which Strapi version you move to, and when |
We manage infrastructure, not application administration. There is no Strapi administration service here.
What a 4 GB server handles
Two containers, and room for more than one of them.
Strapi and PostgreSQL together are the lightest pairing in the catalogue, which is why the recommended size is 4 GB rather than 8. The machine has room for more than one project, and the bill does not notice when you add the second. Uploaded media lands on the server disk, so the disk is the part to plan around.
| Server | RAM | Disk | Sold in |
|---|---|---|---|
cx23 | 4 GB | 40 GB | Europe |
cx33 | 8 GB | 80 GB | Europe |
A project server holds up to five workloads in total. Strapi is classed light, so it reserves 512 MB of the pack rather than the 2,048 MB a heavy template takes.
What Strapi hosting costs
One rate, and it does not count projects.
Strapi is free software and Selfhost.dev does not charge for it. You pay for the server it runs on and nothing else. A European 4 GB server is $0.02/hr, about $15 a month if you leave it running, billed hourly against prepaid credits.
| Server | RAM | Disk | Sold in | Rate | About, at 730 hours |
|---|---|---|---|---|---|
cx23, the recommended size | 4 GB | 40 GB | Europe | $0.02/hr | $15.18 |
cax11, ARM | 4 GB | 40 GB | Europe | $0.02/hr | $16.35 |
cpx21 | 4 GB | 80 GB | Europe | $0.04/hr | $25.70 |
cx33 | 8 GB | 80 GB | Europe | $0.03/hr | $23.36 |
cpx22 | 4 GB | 80 GB | Europe | $0.07/hr | $53.73 |
cx23, cax11 and cx33 are European machine types and are sold nowhere else. Price it in your own location, no signup needed.
| Item | Cost |
|---|---|
| Strapi, the software | $0. Open source, and we do not resell it |
| Its bundled PostgreSQL | $0 |
| HTTPS certificate and custom domain | $0 |
| API requests | $0. Not metered |
| Bandwidth | $0. Traffic is included in the server price |
| A second project on the same server | $0 |
| Optional whole-server backups | +20% of the server price |
Strapi Cloud charges $1.50 per 25,000 API requests over its allowance and $30 per 100 GB of asset bandwidth. A headless CMS exists to serve API requests, so a per-request charge is a bill that grows with use. If your credit balance reaches zero the server stops and the content API stops answering, which will show up on any site consuming it. Your data stays on the disk while the server exists, so topping up brings it back as it was. Signing up adds $5 in free credit, no card needed.
What we can promise about this deployment
What we can prove without a testimonial.
Every service is health-checked every 60 seconds, and the sweep is observational: it tells us, and restarting is done from the console. A stalled deploy is retried automatically, not abandoned. A deploy is never reported done until the URL actually answers. Retrying a create never leaves you paying for two copies. Your version never moves on its own.
Strapi is one of the faster templates we run: about six minutes, which is the platform's own budget rather than an estimate.
Working out what a headless CMS costs?
Tell us how many projects and roughly how much media, and we will send back the server size, the monthly cost and what it replaces on a per-project plan. One email, no newsletter.
Strapi Cloud vs self hosted
They price the project. We price the server.
Strapi Cloud is the vendor's own hosted product, priced per project per month rather than per user.
| Plan | Price | API requests | Asset storage | Asset bandwidth |
|---|---|---|---|---|
| Starter | $35 per project per month | 100k | 50 GB | 50 GB |
| Pro | $90 per project per month | 1M | 250 GB | 500 GB |
| Business | $450 per project per month | 10M | 1,000 GB | 1,000 GB |
| Over the allowance | Charge |
|---|---|
| API requests | +$1.50 per 25,000 |
| Asset storage | +$0.60 per GB |
| Asset bandwidth | +$30 per 100 GB |
| An extra environment on Pro | +$60 a month |
| An extra environment on Business | +$300 a month |
Prices from strapi.io/pricing-cloud, checked 14 September 2026. Our figure is a European 4 GB server at 730 hours.
When Strapi Cloud is the better choice
When you need a global CDN in front of your assets. Strapi Cloud includes one. This is a single server in a single location, and for a media-heavy site serving readers on three continents that difference is real. And when you need a contractual uptime SLA. Strapi Cloud publishes 99.9% on Business. We publish no availability figure, because none is measured, and we would rather say so than imply one. Their plans also carry multi-environment support, weekly or daily backups, log retention, DDoS protection and push-to-deploy.
Two Strapi projects on Starter are $70 a month before any overage. Two on a European 4 GB server are $15.18, and the second one changes nothing.
Strapi vs Contentful
Eight hundred and fifty dollars for a second project.
Contentful is the SaaS incumbent in this category and it prices by the Space, which is its word for a project.
| Plan | Price | Users | API calls | CDN bandwidth |
|---|---|---|---|---|
| Free | $0 forever | 10 | 100K a month, no overages | 50 GB a month |
| Lite | $300 a month | 20 | 1M a month, paid overages | 100 GB a month |
| Enterprise | quote only | custom | waived | custom |
| Strapi on Selfhost.dev | $15.18 a month | unlimited | not metered | not metered |
Source: contentful.com/pricing, checked 14 September 2026. Contentful is now part of Salesforce, announced on their own site.
An additional Space licence on Lite is $850 a month, so a second project on Contentful is $1,150. A second project here is $15.18, because it is the same server. Worth knowing: the real ceiling on Contentful's free tier is 10,000 records on the Starter Space, not the ten users. Ten users sounds generous until the content hits five figures.
Strapi on a raw VPS, versus this
Same Hetzner box. The five secrets already sorted.
Selfhost.dev runs on Hetzner and we say so. The machine underneath this deployment is the one you would rent anyway.
| On a raw VPS you do this yourself | Here it is already done |
|---|---|
| Generate five secrets and resist reusing one twice | Five, separate, persisted |
| Discover that a regenerated salt killed your API tokens | Both salts survive a redeploy |
| Write and debug the compose file | Two containers, pinned, wired |
| Install a reverse proxy and issue a certificate | TLS per hostname, renewed |
| Close the ports you did not mean to open | Default deny, three ports |
| Wire four volumes so content survives a rebuild | Config, source, uploads and database |
This is not a price-parity claim. Hetzner's own list price for a comparable machine is lower than ours, and the difference pays for the wiring, the certificate, the monitoring and the restarts.
Strapi self hosted limitations
Four things to know, and the first one is deliberate.
- This deployment runs
NODE_ENV=developmenton a development image, deliberately. That is what keeps the content-type builder usable in the admin panel, which is the thing most people want Strapi for. It is not a production build and we are not going to pretend it is. If you need a production build, that is a different deployment and we should talk about it first. - The content API under
/api/*returns 403 or 404 until an admin grants permissions. That is Strapi working as designed, not a broken deploy, and it is the first thing to do after logging in. - Admin registration closes once the first account exists. Claim it before you share the address.
- The server is sized when you deploy it and is not expanded in place, so pick the size you want to grow into. Uploaded media accumulates on that disk.
Strapi backup and restore
An encrypted archive, and it is yours.
Everything Strapi holds lives in one PostgreSQL database and in the uploads volume. Both are yours, and both can leave.
-
strapi exportproduces an encrypted, compressed archive containing the project configuration, every entity, the relations between them, the assets in the uploads folder, the schemas and a metadata file.strapi importreads it back. - Optional whole-server backups cover the entire machine at +20% of the server price, daily, with the last seven kept.
- Your own dump, any time.
pg_dumpagainst the bundled PostgreSQL 16 restores onto any PostgreSQL 16, ours or anyone else's. - Uploaded media sits in the
strapi-uploadsvolume, so a file-level copy of that directory belongs in the same routine as the database dump.
Two published limits, worth knowing before you rely on the archive: admin users and API tokens are not transferred, and schemas are always exported, because schema matching is what strapi import uses. Deleting the server takes its backup images with it, which is why a copy kept somewhere else is worth the ten minutes.
Related guides.
Frequently asked questions
Can I self host Strapi on Selfhost.dev?
How much does self hosted Strapi cost?
Is self hosting cheaper than Strapi Cloud?
Why does my content API return 403 or 404?
Does this deployment use SQLite or PostgreSQL?
Do my API tokens survive a redeploy?
Can I export my Strapi project?
What happens if my credit balance reaches zero?
About Selfhost.dev
Selfhost.dev is a managed self hosting platform for developers and small teams. Open source apps and databases on dedicated servers you control, billed by the hour, in six locations across three continents.
Best for: Strapi, WordPress, Supabase, Nextcloud and managed PostgreSQL, MySQL, Redis and ClickHouse.