Strapi Self-Hosted

BeginnerWebsite

Self-hosted Strapi: an open-source headless CMS with PostgreSQL, on a server you control.

Published 27 September 2026

Core Tools
PostgreSQL
PostgreSQL
Docker
Docker
Strapi
Strapi
Hosting
Hetzner
Railway
Render
DigitalOcean
Hostinger
+1
Reverse Proxy
Traefik
Caddy
NGINX
Self-Hosted PaaS
Coolify
Dokploy

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

Hetzner

Deploy Strapi Self-Hosted on Hetzner

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

Deploy Strapi Self-Hosted on Railway

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.

Render

Deploy Strapi Self-Hosted on Render

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.

DigitalOcean

Deploy Strapi Self-Hosted on DigitalOcean

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.

Hostinger

Deploy Strapi Self-Hosted on Hostinger

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.

Amazon Web Services

Deploy Strapi Self-Hosted on Amazon Web Services

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

Traefik

Strapi Self-Hosted with Traefik

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.

Caddy

Strapi Self-Hosted with Caddy

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.

NGINX

Strapi Self-Hosted with NGINX

The most familiar proxy, with TLS through Certbot. Raise client_max_body_size, since NGINX's 1 MB default rejects most media uploads through the admin panel, and forward the protocol and host headers so Strapi builds HTTPS URLs.

Self-Hosted PaaS Options for Strapi Self-Hosted

Coolify

Strapi Self-Hosted with Coolify

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.

Dokploy

Strapi Self-Hosted with Dokploy

Free and self-hosted, building the Strapi project from Git behind its bundled Traefik, with a PostgreSQL service and scheduled database backups from the same dashboard. As with Coolify, mount a volume for uploads or use an S3 upload provider.

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.

Cloudflare Tunnel

Strapi Self-Hosted with Cloudflare Tunnel

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.

ngrok

Strapi Self-Hosted with ngrok

The quicker-start tunnel for letting a frontend preview or a webhook consumer reach a Strapi instance on your own machine. Its free-tier limits suit development rather than a production content API.

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.

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

Databases

DevOps & CI/CD

Hosting (choose one)

Reverse Proxy or PaaS (choose one)

Reverse Proxy

Self-Hosted PaaS

Add-ons (optional — add any, or none)

Tunnel

Strapi Self-Hosted Pricing

From ~$5/mo Free to start

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.

Server (any provider)$6-30/mo

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.

Strapi Community + PostgreSQLFree (open source)

MIT-licensed Community edition with no seat, API-request, or content-type limits.

Exposure (reverse proxy or PaaS)Free (open source)

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.