Picking the wrong self-hosted PaaS costs you 6 to 12 months. Six to 12 months of fighting your platform instead of shipping product. The Coolify vs Dokku vs CapRover decision is the most common one I see solo founders defer because the comparison content online is mostly stars-on-GitHub posts and not actual operational experience. We run Coolify in production for the studio site and the lesson-planning monorepo, ran Dokku for two years before that, and tested CapRover for a side project. Here is the honest comparison.
What each one is
A short framing.
Coolify is a self-hosted PaaS with a web UI, multi-server support, native Docker Compose, and a maintained commercial backing. Born around 2021 as an open-source Heroku alternative. Significantly more polished than competitors as of 2026.
Dokku is the original Heroku-clone, mature since 2013. Single server by default. CLI-driven (with optional UIs from third parties). Excellent buildpack support.
CapRover is a self-hosted PaaS with a web UI, originated around 2019. Single-server by default with multi-server cluster mode via Docker Swarm. Slightly less active than Coolify as of 2026.
All three are open source. All three deploy Docker containers. All three handle TLS. All three are alternatives to Heroku, Render, Fly, and Vercel for self-hosted use cases.
The honest comparison table
Real production criteria, not feature checkboxes.
| Dimension | Coolify | Dokku | CapRover |
|---|---|---|---|
| Setup time (fresh server) | 15 min | 10 min | 10 min |
| Web UI quality | Excellent | Third-party only | Good |
| Multi-server support | Native | Limited | Via Docker Swarm |
| Deploy from Git | Yes, polished | Yes, mature | Yes |
| Native Docker Compose | Yes | Limited | No |
| Buildpacks | Heroku-compatible | Excellent | Heroku-compatible |
| TLS / Let's Encrypt | Automatic | Plugin-based, automatic | Automatic |
| Database management | Built-in (Postgres, MySQL, others) | Plugin-based | Plugin-based |
| Backup story | Built-in (S3-compatible) | Manual or plugin | Plugin |
| Update cadence | Frequent | Stable, less frequent | Moderate |
| Monitoring / logs | Built-in dashboard | CLI-first | Built-in |
| Active development | Very active | Stable, mature | Active |
A few key elaborations.
Coolify is the most polished
Coolify has invested heavily in the user experience. The dashboard is clean, the resource creation flow is guided, and the deployment status is visible. For a solo founder who would rather not learn a CLI for everything, it is the best of the three.
Dokku is the most mature
Dokku has been in production at thousands of companies since 2013. The CLI is stable, the buildpack support is excellent, and the operational story is well-documented. If you prefer the discipline of a CLI and you do not want a web UI in the deployment loop, Dokku is the most reliable choice.
CapRover is in the middle
CapRover sits between the two. The web UI is decent, the multi-server story is more mature than Dokku's, the polish is below Coolify's. We tested it; we did not pick it. It is a fine choice; we have not had a reason to ship it in production.
Why we run Coolify
Honest reporting on what tipped our decision.
We run Coolify on a Proxmox homelab CT (container 103). It deploys the studio site (draftedby.com), the lesson-planning monorepo (PrepareMesCours, DraftMyLesson, PrzygotujLekcje), the analytics stack (Umami self-hosted), and a few other apps. The homelab story is in our solo dev DevOps homelab writeup.
The reasons we picked Coolify:
- The web UI is genuinely useful. When something breaks, we want to see what is happening without SSH.
- Native Docker Compose support. Apps with multiple containers (a web service, a worker, a database) deploy as a unit.
- Multi-server is real. We can add a second server to the same Coolify control plane.
- The backup story is built-in. We push to S3-compatible storage on a schedule. One configuration screen, done.
- The team is responsive. We have filed issues. They get answered. The development is active.
The honest tradeoffs:
- Coolify changes fast. Updates ship every few weeks. We have had two minor regressions in 18 months. Nothing destructive, both fixed within a week.
- Some patterns assume the web UI. Pure-CLI workflows are possible but not the primary path.
- The Docker daemon DNS quirk. This is not Coolify's fault per se, but the way Coolify configures the Docker daemon means DNS misbehavior surfaces as build failures. We have a documented fix.
The Docker DNS quirk worth knowing
A specific recurring failure pattern across self-hosted PaaS. Your Docker daemon points to a single internal DNS resolver (AdGuard, Pi-hole, or similar). When that resolver hiccups, every container build that fetches Google Fonts, npm registry, or any external API fails with EAI_AGAIN or getaddrinfo.
The symptom: builds randomly fail. Same code, retry, succeeds. Common across Coolify and Dokku setups on homelabs.
The fix: either add a fallback resolver to /etc/docker/daemon.json or whitelist the affected domains in your DNS sinkhole. We have a Coolify-specific skill that handles this on our infrastructure. It is the single most-recurring class of build failure we see across the three PaaS options.
This is unrelated to picking Coolify vs Dokku vs CapRover. It is unrelated to the PaaS itself. It is a property of running Docker in a homelab with a single-resolver setup. Worth flagging because it accounts for 30% of "my deploy is broken" tickets.
When Dokku wins
Dokku is the right choice if:
- You prefer CLI over UI. The CLI is excellent and the discipline of CLI-first is real.
- You want Heroku-style buildpacks first. Dokku's buildpack support is the most mature.
- You are running a single server with multiple apps. Dokku is purpose-built for this case.
- You want minimum surface area. Dokku is small, focused, and stable.
We ran Dokku for two years on a previous infrastructure. It was reliable, no downtime we did not cause ourselves. We moved to Coolify when our app count grew and we wanted multi-server support without setting up Swarm by hand.
When CapRover wins
CapRover is the right choice if:
- You want a web UI but Coolify's velocity is too high for your taste.
- You are already comfortable with Docker Swarm for multi-server.
- You prefer a slightly more conservative project.
We do not have CapRover in production but the side-project test was fine. The polish is a half-step below Coolify; the maturity is a half-step above.
When none of these is the right answer
Three cases where self-hosted PaaS is not the right choice:
You have no operational capacity at all
If you are uncomfortable SSH-ing into a server, the self-hosted PaaS path is not for you. Render, Fly, Railway, Vercel, or another managed PaaS will save you operational time at higher monthly cost.
The math: if your time is worth 80 EUR per hour and you spend 4 hours per month managing a self-hosted PaaS, the managed alternative needs to cost less than 320 EUR per month above your VPS bill to be worth it. For most small SaaS, that is the right side of the line.
You have one app and it fits on a serverless platform
A static site on Cloudflare Pages or Vercel is simpler than a self-hosted PaaS. Use the simpler option until you have a reason not to.
You need full Kubernetes for a specific reason
If you genuinely need Kubernetes (multi-region, complex scheduling, GPU workloads, advanced networking), neither Coolify nor Dokku nor CapRover is your platform. Use Kubernetes directly or a managed K8s offering.
For most solo founders, "I think I need Kubernetes" turns out to be wrong. The Kubernetes operational tax is real and the benefits do not show up below a certain scale.
The deployment workflow
A practical concern: what does "deploy a Next.js app to Coolify" look like in 2026?
The realistic workflow:
- Push to your Git remote. Coolify watches the branch.
- Coolify pulls the code, runs the build inside Docker. It uses your Dockerfile.
- The image is tagged and the previous container is replaced. Health check before traffic switches.
- TLS is handled automatically via Let's Encrypt.
For a Next.js app, the Dockerfile uses standalone output. Detailed in our Next.js 15 standalone Docker writeup. The PaaS is the orchestrator; the Dockerfile is the build instructions.
Total time from git push to live: 1 to 4 minutes for a small app, 4 to 10 minutes for a larger one. Comparable to managed PaaS.
Database in a self-hosted PaaS
A real question: do you run your database inside the PaaS or as a separate, dedicated service?
We run Postgres separately from our PaaS apps. The reasons are explained in detail in our self-hosting Postgres writeup. The short version is that databases have different operational profiles than stateless apps and benefit from being on dedicated infrastructure with focused backup and monitoring.
Coolify can run Postgres for you as a managed resource inside the PaaS. We use this for ephemeral or low-stakes apps. We do not use it for production data.
The on-call story
Self-hosted PaaS means you are the on-call. When the server goes down at 3 AM, you are the one who fixes it.
Mitigations:
- A second machine you can fail over to, even manually.
- Off-host backups that survive the primary host going dark.
- Health checks and uptime monitoring that alert you before the customer does.
- Documentation of how to recover that you can read at 3 AM with a panicked brain.
We have all four. Not because we are paranoid, but because each one costs 30 minutes to set up and saves a multi-hour incident the day something does go wrong.
The right self-hosted PaaS is the one you can debug at 3 AM with a tired brain. Polish matters. So does the size of the surface you have to understand.
Cost comparison
Approximate monthly costs for a small SaaS portfolio.
| Setup | Monthly cost |
|---|---|
| Single Hetzner CX22 + Coolify, 5 apps | 4 EUR (server) + 0 EUR (Coolify OSS) = 4 EUR |
| Single VPS + Dokku, 5 apps | 4 EUR + 0 EUR = 4 EUR |
| Render free + paid tier, 5 apps | ~20-50 USD per month |
| Vercel + Vercel Postgres for 5 apps | Highly variable, often 100+ USD |
| Fly.io for 5 apps | ~30-80 USD depending on usage |
Self-hosted is dramatically cheaper at the scale of a small studio. The trade is operational time. We covered the broader infrastructure economics in our solo dev DevOps homelab writeup.
If you have time but no money, self-hosted PaaS is the right call. If you have money but no time, managed PaaS. If you have neither, you should probably not be running a SaaS yet.
What we would test first
If you are picking a self-hosted PaaS in 2026:
- Spin up a fresh VPS (Hetzner CX22 is fine, around 4 EUR per month).
- Install Coolify first. Deploy one of your apps. Time how long until it is live.
- If Coolify works for you, ship. If something feels off, try Dokku next.
- Skip CapRover unless you have a specific reason to test it after the other two.
- Set up off-host backups before you put anything important on the server.
The whole evaluation takes a weekend. If you spend more than a weekend, you are over-investigating.
TL;DR
Coolify is the polished default for solo founders in 2026. Dokku is the disciplined CLI choice with the longest track record. CapRover is the middle option that wins when neither extreme fits. The Coolify vs Dokku vs CapRover decision is mostly about whether you want a web UI or a CLI as your primary surface. Pick once, ship, and stop comparing. The 6 months you will not spend evaluating is worth more than the marginal feature differences.



