Strapi Self-Hosted
BeginnerWebsiteSelf-hosted Strapi: an open-source headless CMS with PostgreSQL, on a server you control.
Published 27 September 2026
About Strapi Self-Hosted
Strapi is the most widely used open-source headless CMS. You define content types in the admin panel's builder or in code, and Strapi generates REST and GraphQL APIs for them, with roles and permissions controlling who can read and edit what. Editors get an admin panel for entries, media, and locales; developers get a Node.js project they can extend with plugins, custom controllers, and lifecycle hooks.
A Strapi project is your own codebase, not a packaged app. Strapi publishes no official container image, so this stack builds one from the project with a Dockerfile, and PostgreSQL stores the content. The admin panel is compiled at build time, which is where most of the memory goes: Strapi's own guidance is 2 GB minimum and 4 GB recommended, and building the image in CI keeps that spike off the server.
The Community edition is free under the MIT license with unlimited seats, content types, and API calls. A few editorial features sit behind self-hosted paid plans: Live Preview, Releases, and Content History on Growth ($45/mo), and Review Workflows and Audit Logs on Enterprise. SSO is a Growth add-on.
It suits agencies handing a CMS to clients, marketing sites with a Next.js or Nuxt frontend, and multi-language content, anywhere Strapi Cloud's per-project pricing or a hosted CMS's seat limits don't fit.
Key Features
- ✓REST and GraphQL APIs generated from content type definitions
- ✓Content-type builder in the admin panel, or content types defined in code
- ✓Role-based access control for API consumers and admin users
- ✓Built-in internationalization for multi-language content
- ✓PostgreSQL storing all content on your own server
- ✓Plugin Marketplace for SEO, email providers, and upload providers such as S3
When to Use Strapi Self-Hosted
- →Agency deliveries where the client manages their own content after handoff
- →Marketing websites with a Next.js or Nuxt frontend consuming Strapi's API
- →Multi-language content platforms
- →Internal knowledge bases or documentation managed through the admin panel
- →Product catalogs feeding a custom storefront
Pros
- No API-request, seat, or asset caps in the MIT-licensed Community edition
- REST and GraphQL both available from the same content types
- Content-type builder lets editors and developers change structure without migrations by hand
- A standard Node.js project you can extend with custom code
Cons
- Major upgrades run through codemods and need testing (v4 to v5 changed the API response format)
- Building the admin panel needs memory, so small servers should build the image elsewhere
- Live Preview, Releases, Review Workflows, Audit Logs, and SSO need a paid self-hosted plan
- No official Docker image, so the Dockerfile is yours to maintain
Hosting Options for Strapi Self-Hosted
A flat-rate root VPS with 4 GB instances from around €5/mo, Strapi's recommended size with PostgreSQL on the same box. Build the Docker image in CI and pull it on the server, so the admin panel's build never competes with the running CMS for memory.
Railway has a Strapi template that deploys the project with PostgreSQL in the same service group and redeploys on git push. Add a volume for the uploads folder, or switch to an S3 upload provider, since the container's own disk resets on each deploy. Railway terminates TLS itself, so the reverse proxy or PaaS choice doesn't apply. Hobby is $5/mo plus usage.
Runs Strapi as a web service with Render's managed PostgreSQL and TLS at the platform. Strapi's 2 GB floor means the Standard instance (about $25/mo) rather than the 512 MB Starter, plus a persistent disk for uploads or an S3 upload provider, and the database on top.
A root Droplet with snapshots and a cloud firewall in the panel: about $12/mo for 2 GB, Strapi's minimum, or $24/mo for the recommended 4 GB. Managed PostgreSQL (from about $15/mo) and Spaces for the upload provider move the content and media off the Droplet.
The budget VPS in the list: the entry KVM plan (about $6.50/mo) already has 4 GB of memory, Strapi's recommended size, so it can even build the admin panel on the server. Fewer regions than the larger providers, and backups are yours to set up.
An EC2 instance at roughly $25-35/mo for 4 GB. It fits when the rest of the product already runs on AWS: RDS can hold the PostgreSQL database, S3 with Strapi's upload provider holds media, and an Application Load Balancer with AWS Certificate Manager can handle TLS instead of the reverse proxy.
These are highlighted picks. To see all the tools, check the Hosting & Cloud category.
Reverse Proxy Options for Strapi Self-Hosted
Routes to the Strapi container from Docker labels and renews Let's Encrypt certificates on its own. Set Strapi's public URL to the HTTPS address and enable proxy trust in its server config, or the admin panel and generated media URLs point at the container's internal address.
Automatic HTTPS from a few lines of config, the simplest fit for one Strapi container. Caddy has no default request-size limit, so media uploads through the admin panel work without extra settings; Strapi's own upload size limit is the one to raise.
Self-Hosted PaaS Options for Strapi Self-Hosted
Free and self-hosted, deploying the Strapi project from its Git repository with your Dockerfile, PostgreSQL provisioned beside it, and HTTPS through Coolify's bundled proxy. Add a persistent volume for the uploads folder, or media disappears on the next redeploy.
Strapi Self-Hosted Add-ons
Each addition below extends this stack with a capability the base stack works fine without. None are required: include the ones your product actually needs when building this stack, and skip the rest.
Tunnel Add-ons
Add a tunnel when you're self-hosting without a static IP or can't open inbound ports — a home server, a VPS behind restrictive network policies, or anywhere a reverse proxy alone can't reach the internet.
Makes the Strapi admin panel and API reachable over HTTPS through an outbound-only connection, with no inbound ports or static IP. Cloudflare's upload size limit on its free plan (100 MB per request) is the one to know if editors upload large video files.
Frequently Asked Questions about Strapi Self-Hosted
Why self-host Strapi instead of using Strapi Cloud?
Limits and cost per project. Strapi Cloud's Starter plan is $35/mo per project for 100,000 API requests and 50 GB of assets, without backups; Pro at $90/mo adds 1 million requests and weekly backups. Self-hosting the Community edition has no request, asset, or seat limits, and several projects can share one server. Strapi's paid features follow a separate license either way: Live Preview, Releases, and Content History come with the self-hosted Growth plan ($45/mo), Review Workflows and Audit Logs with Enterprise. What you give up is the managed side: builds, database backups, and upgrades become yours.
What does the server need to run?
Strapi's deployment docs list 2 GB of memory and 1 core as the minimum, and 4 GB with 2 or more cores as recommended; PostgreSQL on the same server is the reason to aim for 4 GB. Building the admin panel uses more memory than serving it, so on a 2 GB server build the Docker image in CI and only pull it on the server. Disk starts at 8 GB, with 32 GB recommended, and media uploads on local disk grow it fastest.
What needs backing up, and how do upgrades work?
PostgreSQL holds the content, and the uploads folder holds media unless an upload provider sends it to S3 or similar. Strapi's export command also packages content, media, and configuration into one archive. Minor versions are a package bump and rebuild. Major versions run through npx @strapi/upgrade major, which applies codemods to your code and only starts from the latest minor release; back up the code and database first, and test the frontend, since majors can change the API response format.
Strapi or Directus for a self-hosted headless CMS?
Both are self-hosted headless CMSs with generated APIs and an admin panel. Strapi is a Node.js project you own: content types are defined in the builder or in code, and custom logic goes into controllers and plugins, under the MIT license. Directus wraps a SQL database, including an existing one, and treats its tables as the content model; it's free under its BSL license for organizations under $5 million in revenue. Choose Strapi when developers will extend the CMS in code; choose Directus when the data already lives in a database or non-developers should shape the schema.
Why does the admin panel come out blank or broken after a Docker build?
Usually because NODE_ENV was set to production before installing dependencies. npm then skips devDependencies, which Strapi needs to compile the admin panel, and the build can look successful while producing an incomplete bundle. Install dependencies first, then set NODE_ENV=production and run the build. Remember too that the admin panel is compiled into the image: changing its configuration or adding a plugin means rebuilding, not just restarting.
Stacks Related to Strapi Self-Hosted
Airflow Self-Hosted
InfrastructureSelf-hosted Apache Airflow: the standard data-pipeline scheduler on your infrastructure.
n8n Self-Hosted
InfrastructureSelf-hosted n8n on your own server, with full control over the database, the host, and how it's exposed to the internet.
GitLab Self-Hosted
InfrastructureSelf-hosted GitLab with Docker: your code, your CI, your infrastructure.
Umami Self-Hosted
InfrastructureSelf-hosted Umami: cookie-free, privacy-first website analytics on a server you run.
Scores
Popularity3/5
Strapi is the most-starred headless CMS and a default pick for content tooling in web development; outside that audience the name still needs an introduction.
Learning Curve2/5
The admin builder is approachable for developers and content teams alike; running it is ordinary Docker plus a database.
Flexibility4/5
Custom content types, a plugin system, and a codebase you can extend, within the headless-CMS job it is built for.
Performance3/5
Serves content APIs well at small and medium scale; heavy editorial traffic eventually wants caching in front.
Portability5/5
Content exports as JSON, the store is plain PostgreSQL, and MySQL and SQLite are supported destinations if the next home prefers them.
Tools in the Strapi Self-Hosted Stack
Strapi Self-Hosted Pricing
Strapi's Community edition, PostgreSQL, and Docker are free, so the recurring cost is a server: $6-30/mo for the 2-4 GB Strapi recommends. Strapi Cloud starts at $35/mo per project for 100,000 API requests, without backups, so self-hosting pays off with several projects, heavy API traffic, or large media libraries. Paid editorial features such as Releases and Review Workflows need a self-hosted Growth ($45/mo) or Enterprise license.
2 GB of RAM is Strapi's minimum and 4 GB its recommendation with PostgreSQL on the same server; build the image in CI on smaller servers.
MIT-licensed Community edition with no seat, API-request, or content-type limits.
Traefik, Caddy, NGINX, Coolify, and Dokploy all self-host free, with free Let's Encrypt certificates.
Strapi Self-Hosted System Requirements
source- CPU
- 1 core minimum, 2 or more recommended
- RAM
- 2 GB minimum, 4 GB or more recommended
- Disk
- 8 GB minimum, 32 GB or more recommended
The official deployment-docs hardware table. The recommended tier, not the minimum, is the honest target once PostgreSQL shares the box, and admin-panel builds run heavier than the serving app, so count them against the memory figure or build elsewhere.