DEV Community

pickuma
pickuma

Posted on • Originally published at pickuma.com

Coolify vs Dokku vs CapRover: self-host PaaS compared in 2026

Self-hosting a PaaS used to mean weekends lost to Nginx, systemd, and SSL renewals that broke at 3am. Coolify, Dokku, and CapRover all promise to compress that work into a git push and a web dashboard. They get there through different stacks, and the wrong pick costs you migration time you won't get back.

We deployed the same three-service app — a Node API, a Postgres database, and a static Astro frontend — to each platform on a fresh $12/mo Hetzner CX22 (2 vCPU, 4GB RAM). What follows is what we hit, where each one bent, and which we'd reach for on the next project.

Architecture decides what breaks

Dokku is the oldest of the three (2013) and the leanest: a few thousand lines of Bash glue around Docker, designed to run on a single host. App lifecycles live in ~/dokku/<app> directories. There's no web UI in the core — you ssh in and run dokku apps:create, dokku domains:add, dokku certs:add. A community plugin (dokku-letsencrypt) handles TLS. Plugins are first-class: Postgres, Redis, MongoDB, Clickhouse all ship as dokku-postgres, dokku-redis, etc., and they wire env vars into your app automatically when you dokku <db>:link.

CapRover sits on Docker Swarm. That choice is the whole story: you get multi-node orchestration, rolling deploys, and a one-click app store (over 100 apps as of writing) out of the box, but you also inherit Swarm's quirks — overlay network DNS oddities, volume placement headaches, and a deprecation cloud since Docker shifted focus to Kubernetes. The web dashboard is the primary interface; the CLI exists but is secondary.

Coolify v4 rewrote the platform on Laravel + Docker Compose (no Swarm, no Kubernetes by default). v4 added multi-server support, so one Coolify instance can deploy to many remote Docker hosts over SSH. The UI is the most polished of the three — closest to Vercel or Render in feel — and it's the only one with a built-in S3-compatible backup story for databases and a managed-Postgres-style UX.

None of these are a Heroku replacement for stateful workloads at scale. Single-node Dokku and single-node CapRover have no HA story without external work. Coolify v4's multi-server mode helps but does not give you cross-region failover. If you need that, you're shopping for Kubernetes, Nomad, or a managed PaaS, not a self-hosted one.

Where each one actually fits

Pick Dokku when: you have one server, you live in the terminal, and you want the smallest moving-parts footprint. Memory baseline is around 150MB. The plugin ecosystem is mature — Dokku has been around twice as long as the others and the community plugins have been hammered on for a decade. The cost: no web UI in core, no built-in multi-server, no out-of-the-box backup scheduling. If you can't ssh, you can't operate Dokku.

Pick CapRover when: you want a web dashboard, one-click apps (Ghost, Nextcloud, Plausible, MinIO are common picks), and you don't mind being on Docker Swarm. Memory baseline is around 400MB. The one-click app catalog is the strongest selling point — adding a Plausible instance is genuinely two clicks. Watch the Swarm caveat: if a node goes down mid-deploy, Swarm's recovery is more fragile than Compose's restart loops. Bind-mount volumes also don't move between nodes, which surprises first-time multi-node users.

Pick Coolify when: you want the modern UX, your team has people who aren't comfortable in SSH, and you'll plausibly outgrow a single host within 12 months. Memory baseline is around 700MB (the heaviest of the three — it runs Laravel, a database, Redis, and Soketi for itself). In exchange you get: per-app TLS via Caddy, push-to-deploy from GitHub/GitLab with previews, an actual database backup scheduler with S3 destinations, and a real audit trail. v4 is younger and breaks more often than Dokku — check the GitHub issues for your stack before committing.

A note on community velocity: Coolify is the most actively developed (multiple releases per month, around 45k GitHub stars), CapRover is steady (around 13k stars, monthly-ish releases), Dokku is mature and slow-moving (around 30k stars, releases when needed). Velocity cuts both ways — Coolify breaks more often, Dokku has more sharp edges that nobody has filed off in five years.

Ops cost, the part nobody benchmarks

The total cost of running these is not the server. It's the time you spend recovering from upgrades.

Dokku upgrades are mostly painless because there's almost nothing to upgrade — you apt upgrade dokku and re-run dokku plugin:update. We have seen Postgres plugin updates require a careful read of the changelog (volume layout changes between major Postgres versions).

CapRover upgrades go through the dashboard. The Swarm-level upgrades (Docker version, Swarm state) are the ones to worry about; the CapRover layer itself is a single container restart. We hit one Swarm gotcha during a Docker 25 to 26 upgrade where the overlay network needed manual recreation — a documented issue with documented recovery, but not fun at the time.

Coolify v4 upgrades are the most invasive — schema migrations on every minor version, occasional breaking config changes during the v4 stabilization period (we're past the worst of it as of 2026 but not all the way clear). Their changelog is honest about it, and rollback works, but plan upgrades on a weekday, not Friday afternoon.

For any of these, treat the host as cattle: keep Postgres dumps off-box (rclone to S3/B2 on a cron), version your app config in Git, and rehearse a full rebuild on a throwaway VPS once per quarter. The platform that lets you ssh in and fix things at 2am is worth more than the one with the prettier dashboard.

FAQ


Originally published at pickuma.com. Subscribe to the RSS or follow @pickuma.bsky.social for new reviews.

Top comments (0)