macrostack

Layer 5 · self-hosting reality check

What it actually takes to self-host PostHog

The docs say 16 GB. PostHog's stated floor is the equivalent of a Hetzner VM with 4 vCPU, 16 GB RAM and more than 30 GB of storage.. In practice you want 16 GB, and that number is not padded. ClickHouse, Kafka, Zookeeper, PostgreSQL, Redis/Valkey, Temporal with Elasticsearch, a headless Chromium and a few dozen PostHog services all share it (about 38 services in the hobby compose file).. Here is the honest version — real requirements, real monthly cost, what you will be maintaining, and the one thing that catches people out.

Usually reached from Amplitude alternatives, where PostHog is one of the picks.

Wondering whether you need to at all? Is Amplitude free? — what the free tier actually allows, and where the wall is.

RAM — documented minimum16 GB. PostHog's stated floor is the equivalent of a Hetzner VM with 4 vCPU, 16 GB RAM and more than 30 GB of storage.
RAM — what it really needs16 GB, and that number is not padded. ClickHouse, Kafka, Zookeeper, PostgreSQL, Redis/Valkey, Temporal with Elasticsearch, a headless Chromium and a few dozen PostHog services all share it (about 38 services in the hobby compose file).
CPU4 vCPU
DiskMore than 30 GB to start (the vendor's figure). ClickHouse event data and session-recording blobs grow from there.
Monthly cost$19–25/mo for a 16 GB Hetzner cloud server in the EU (the CX43 is $18.49 before VAT and IPv4, at June 2026 prices), or about $96/mo for 16 GB at DigitalOcean. ClickHouse, Kafka, Zookeeper, Postgres, Redis and object storage all run on that one box, so there is no separate bill, but they are why it needs 16 GB.
Setup time30 minutes for the script, then 5–10 minutes for migrations and TLS. Give it a week before you trust it.
How you install itRun the `deploy-hobby` script on a fresh Ubuntu VM with a domain's A record pointed at it. It writes the Docker Compose stack and gets a Let's Encrypt certificate. A beta TUI installer also exists.
Ongoing maintenanceRun `upgrade-hobby` often, because PostHog ships continuously from master with no tagged releases. Take a full backup before every upgrade, as the docs instruct. PostHog offers no customer support for self-hosted instances.
Where it stops scalingOne box. The docs' decision chart treats more than about 300k events, 1k recordings or 300k /flags calls a month as the point to reconsider, and the Kubernetes/Helm path for scaling out has been sunset.

The thing that catches people out

Self-hosted PostHog has no versions. The docs say PostHog publishes no CVEs and does no tagged releases for self-hosted, and security fixes ship continuously from master to the latest Docker image. The docs also call self-hosted deployments officially unsupported. You can't stay on a known-good release and take only patches: staying secure means taking every upstream change to a roughly 38-container stack, with a backup each time. Schedule `upgrade-hobby` weekly and snapshot the VM first. If something breaks, check the recent commits to docker-compose.hobby.yml.

When not to self-host PostHog

You send fewer than 1M events and 5k session recordings a month. PostHog Cloud's free tier covers that, and the self-host page's own decision chart sends you there. Skip it too if you need a paid feature: the docs say all paid-plan features are Cloud-only.

Every guide here carries this section. A site that only ever tells you to self-host is selling something — the useful answer is sometimes no.

Other Layer 5 self-hosting guides

Common questions

How much RAM does PostHog actually need?
16 GB, and that number is not padded. ClickHouse, Kafka, Zookeeper, PostgreSQL, Redis/Valkey, Temporal with Elasticsearch, a headless Chromium and a few dozen PostHog services all share it (about 38 services in the hobby compose file). in practice. The documented minimum is 16 GB. PostHog's stated floor is the equivalent of a Hetzner VM with 4 vCPU, 16 GB RAM and more than 30 GB of storage., which is the figure at which the process starts rather than the figure at which it works under real use. 4 vCPU alongside it.
What does self-hosting PostHog cost per month?
$19–25/mo for a 16 GB Hetzner cloud server in the EU (the CX43 is $18.49 before VAT and IPv4, at June 2026 prices), or about $96/mo for 16 GB at DigitalOcean. ClickHouse, Kafka, Zookeeper, Postgres, Redis and object storage all run on that one box, so there is no separate bill, but they are why it needs 16 GB. This is commodity VPS pricing and excludes your time, which is the larger cost for most people — budget for run `upgrade-hobby` often, because PostHog ships continuously from master with no tagged releases. Take a full backup before every upgrade, as the docs instruct. PostHog offers no customer support for self-hosted instances.
How long does it take to set up PostHog?
30 minutes for the script, then 5–10 minutes for migrations and TLS. Give it a week before you trust it., via Run the `deploy-hobby` script on a fresh Ubuntu VM with a domain's A record pointed at it. It writes the Docker Compose stack and gets a Let's Encrypt certificate. A beta TUI installer also exists..
When should I NOT self-host PostHog?
You send fewer than 1M events and 5k session recordings a month. PostHog Cloud's free tier covers that, and the self-host page's own decision chart sends you there. Skip it too if you need a paid feature: the docs say all paid-plan features are Cloud-only.
What is the most common mistake when self-hosting PostHog?
Self-hosted PostHog has no versions. The docs say PostHog publishes no CVEs and does no tagged releases for self-hosted, and security fixes ship continuously from master to the latest Docker image. The docs also call self-hosted deployments officially unsupported. You can't stay on a known-good release and take only patches: staying secure means taking every upstream change to a roughly 38-container stack, with a backup each time. Schedule `upgrade-hobby` weekly and snapshot the VM first. If something breaks, check the recent commits to docker-compose.hobby.yml.
The Macrostack brief

New swaps, worth your inbox.

A short, occasional email when we add a high-intent alternative or ship a new head-to-head. No spam, no selling your address — unsubscribe in one click.