Best self-hosted PaaS in 2026: six tools compared
Best self-hosted PaaS in 2026: six tools compared
Last month I sat with a 4 GB VPS, a Next.js app and a Postgres database, and spent two evenings reading six documentation sites to answer one question: which self-hosted PaaS do I put on this box? Every comparison I found was either written by one of the vendors or stopped at a star count. I did the dull thing. I opened each project's own docs and repository, wrote down what they claim, and checked the one I build against its own repo.
I work on Levelrail, so you should discount my opinion of it. I tried to keep the table below limited to things you can verify, and I say where each tool beats mine.
TL;DR
| Tool | How it reaches your server | Best at | Watch out for |
|---|---|---|---|
| Coolify | SSH from a web app | Broad one-click catalog, polished UI | You manage the host over SSH, cloud tier is paid |
| Levelrail | Agent that dials out over mTLS | Logs, metrics, traces and one-command rollback built in | Smaller one-click catalog than the largest, an agent on each extra server |
| Dokploy | Docker Swarm plus Traefik | Swarm clustering, templates | Part of the repo is under a proprietary license |
| CapRover | Docker Swarm plus nginx | Long track record, simple app store | Apache 2.0 with an appendix that limits some use |
| Dokku | Commands on the host, git push | Smallest PaaS, Heroku workflow | One server, no web dashboard in core |
| Kamal | SSH from your laptop or CI | Almost no moving parts | No control plane, no UI |
What "self-hosted PaaS" means here
A self-hosted PaaS turns a plain Linux server into something that builds your code, runs containers, issues HTTPS certificates and lets you roll back. All six tools do that. They differ in how they talk to the server, what they run underneath, and how much of the platform is one process you have to keep alive.
I sorted them by that last point, because on a small VPS it decides everything.
The six, from their own documentation
Coolify
Coolify describes itself as an open source, self-hostable platform for deploying applications, databases and services on servers you control, and its docs say it "connects to each server over SSH" <!-- source: https://coolify.io/docs/get-started/introduction -->. The README claims more than 360 one-click services <!-- source: https://github.com/coollabsio/coolify/blob/main/README.md --> and lists Git push deploys, pull request previews, rollbacks to retained images, multi-server management, and a dashboard, API, CLI or MCP surface. The repository is under the Apache License 2.0 <!-- source: https://github.com/coollabsio/coolify/blob/main/LICENSE -->, and the project sells a hosted tier.
Where it wins: the catalog and the dashboard. If you want to click a service and get a database with generated credentials, that is why people recommend it by default.
Levelrail
Levelrail is an Apache 2.0 platform that runs as one Go binary with a node agent per extra server. The agent dials out over mutual TLS and talks to the Docker Engine API directly, so managed nodes need no inbound port, and a level-triggered reconciler converges each node toward desired state (docs/comparison.md in the repo). A deploy counts as healthy only after the readiness probe passes, and Levelrail pins earlier images so cleanup cannot remove a rollback target (docs/comparison.md, docs/rollback.md).
Where it wins: metrics, logs, traces and alerts ship in the core, so there is no second stack to install. Where it loses: its one-click catalog is smaller than the largest ones here, and it needs an agent on each extra server where Coolify and Kamal only need SSH.
Dokploy
Dokploy's docs describe an open source alternative to Heroku, Vercel and Netlify built on Docker and Traefik <!-- source: https://docs.dokploy.com/docs/core -->. Its README lists multi-node scaling with Docker Swarm, remote servers, database backups to external storage, CPU, memory and network monitoring, and "+600 Templates" <!-- source: https://github.com/Dokploy/dokploy/blob/canary/README.md -->. The license file is Apache 2.0 for most of the repo, with everything under a /proprietary directory under a separate license I could not read <!-- source: https://github.com/Dokploy/dokploy/blob/canary/LICENSE.MD -->.
Where it wins: if Swarm is already how you think about clusters, Dokploy gives you a modern dashboard on top of it, and its template count is the highest I could verify.
CapRover
CapRover's README says it uses Docker, nginx, Let's Encrypt and NetData behind a simple interface, with "Docker Swarm under the hood" and no lock-in: remove it and your apps keep working <!-- source: https://github.com/caprover/caprover/blob/master/README.md -->. The install guide asks for an AMD64 or ARM64 server with at least 1 GiB of RAM and 5 GiB of free disk, a wildcard domain, and public ports 80, 443 and 3000 <!-- source: https://caprover.com/docs/get-started.html -->. The license is Apache 2.0 plus an appendix that restricts modifying its paid service features and redistributing competing paid versions <!-- source: https://github.com/caprover/caprover/blob/master/LICENSE -->.
Where it wins: it has been around a long time, the app store is simple, and the "no lock-in" claim is the most concrete I found.
Dokku
Dokku calls itself a "Docker powered mini-Heroku" and the "smallest PaaS implementation you've ever seen", under the MIT License <!-- source: https://github.com/dokku/dokku/blob/master/README.md -->. It builds from a Git push, with a Dockerfile or buildpacks, runs on one server, and needs 1 GB of memory for the Docker scheduler <!-- source: https://dokku.com/docs/getting-started/installation/ -->.
Where it wins: a single server where you want the least software between you and Docker. Nothing on this list beats it on simplicity there.
Kamal
Kamal comes from 37signals, who say they used it to move HEY and other applications to their own hardware. The site calls it "basically Capistrano for Containers", and you list server IPs in a config file <!-- source: https://kamal-deploy.org/ -->. Its companion kamal-proxy moves traffic to a new instance only after health checks pass and drains the old one <!-- source: https://github.com/basecamp/kamal-proxy -->. A rollback starts a new container from an older image still on the host, with nothing downloaded from the registry <!-- source: https://kamal-deploy.org/docs/commands/rollback/ -->.
Where it wins: it has no server component at all. If a dashboard is optional for you, there is nothing to keep running.
Side by side
| Coolify | Levelrail | Dokploy | CapRover | Dokku | Kamal | |
|---|---|---|---|---|---|---|
| Reaches servers by | SSH | Reverse-dialed agent | Swarm | Swarm | Host commands | SSH |
| Proxy | Proxy on each server | Embedded Caddy | Traefik | nginx | Pluggable | kamal-proxy |
| Web dashboard | Yes | Yes | Yes | Yes | Not in core | No |
| Several servers | Yes | Yes | Yes (Swarm) | Yes (Swarm) | One server | Yes |
| License | Apache 2.0 | Apache 2.0 | Apache 2.0 plus proprietary dir | Apache 2.0 plus appendix | MIT | Not checked |
| Templates claimed | 360+ | 447 in my local build | 600+ | App store | Plugins | None |
I left the Kamal license cell at "Not checked" because I did not open its license file, rather than guess. The Levelrail count of 447 comes from levelrail-cli templates list --json against a local build of the v1.0.1 release branch, and it will move as the release does.
Footprint on a small box
CapRover documents 1 GiB RAM and Dokku 1 GB for its Docker scheduler. Neither Coolify nor Dokploy gave a number on the pages I read, so I will not invent one. For Levelrail, the repo's README reports about 200 MB of RAM and roughly 1.5 percent of one CPU at idle, from one run on a 2 vCPU, 8 GB test box on 2026-10-19 with no app load (README.md, method in docs/benchmarks.md). The minimal install profile lowers the doctor floors to 512 MiB and one core (docs/profiles.md). I started the control plane locally with two apps running and it sat at about 165 MB resident, on a dev build, on a Mac. Treat that as a sanity check, not a benchmark.
The idle figure is not what surprises people. The second stack you bolt on for logs is.
A tested example: search logs with no logging stack
On a throwaway local control plane I deployed a small Compose file that prints JSON log lines, then searched them by a structured field:
levelrail-cli compose deploy shop -f compose.yaml levelrail-cli logs search shop-shop --field status=500 --since 10m --limit 3 It printed the three newest matching JSON lines, with a footer saying showing 3 of 11 matching lines. In the docs I read, Dokku, Kamal and CapRover show container logs, but searching by field or keeping history across restarts means bringing your own tooling. Coolify shows deployment and runtime logs in its UI, and I did not test its search.
Which one I would pick
One server, one app, you like the shell: Dokku or Kamal, in that order if you want a Git push or a CI step respectively.
You want a polished dashboard and a long list of one-click apps on servers you SSH into: Coolify.
You already run Swarm or want Swarm clustering with a modern UI: Dokploy. CapRover if you prefer the older, simpler route.
You want deploys that wait for readiness, a one-command rollback, and logs, metrics and traces in the same binary, and want it all in one binary: Levelrail.
FAQ
What is the lightest self-hosted PaaS?
Kamal has no server component, so it adds nothing at idle. Dokku is a set of scripts on the host with no separate web service. Among tools with a control plane, check each project's own footprint numbers before you trust a claim, including mine.
Is Coolify better than Dokploy?
Neither is better across the board. Coolify manages servers over SSH and has the more mature catalog and UI. Dokploy builds on Docker Swarm, which matters if you want Swarm clustering. Read both license files first, since Dokploy has a proprietary directory.
Can I move between these tools?
Your containers and volumes stay Docker objects, so the data moves. The config does not. Levelrail ships dry-run importers for Coolify, Dokploy, CapRover, Dokku and Compose files (docs/migrate-to-levelrail.md). I have not tested the other direction for any pair.
Do I need Kubernetes instead?
If you need it, you will know. None of these six require it, and Levelrail treats a Kubernetes compatibility layer as a non-goal.
Bottom line
Pick the tool whose failure mode you can live with: Kamal and Dokku fail by being too bare, Coolify and Dokploy by asking for more host and more trust in a web app, CapRover by age, Levelrail by asking you to run an agent on every extra server. Would these claims still hold if you reran them on your own VPS next quarter?
Sources checked
- https://coolify.io/docs/get-started/introduction
- https://github.com/coollabsio/coolify/blob/main/README.md
- https://github.com/coollabsio/coolify/blob/main/LICENSE
- https://docs.dokploy.com/docs/core
- https://github.com/Dokploy/dokploy/blob/canary/README.md
- https://github.com/Dokploy/dokploy/blob/canary/LICENSE.MD
- https://caprover.com/docs/get-started.html
- https://github.com/caprover/caprover/blob/master/README.md
- https://github.com/caprover/caprover/blob/master/LICENSE
- https://dokku.com/docs/getting-started/installation/
- https://github.com/dokku/dokku/blob/master/README.md
- https://kamal-deploy.org/
- https://kamal-deploy.org/docs/commands/rollback/
- https://github.com/basecamp/kamal-proxy
原文:https://www.a8q9.cn/en/article/best-self-hosted-paas-in-2026-six-tools-compared-e08dce.html