Dokku: a Docker-powered mini-PaaS you install on your own VM
A docker-powered PaaS that helps you build and manage the lifecycle of applications
At a glance
- What is it?
- Dokku turns a single Ubuntu or Debian host into a git-push deployment target. Here is what the install script does, where the design breaks down, and how it differs from Coolify.
- Who is it for?
- Adopt Dokku if you already run Ubuntu 22.04/24.04 or Debian 11+ hosts, you are comfortable on the command line, and you want git-push deploys without a control plane. Do not adopt it if you need a web dashboard, multi-node scheduling, or a managed upgrade path, none of which the README offers.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 3 days ago.
- What is it written in?
- Mainly Shell, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 26, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What Dokku actually replaces
The README opens with a one-line definition: "Docker powered mini-Heroku. The smallest PaaS implementation you've ever seen." That sentence is the whole product thesis. You have a server. You have applications. You want the Heroku workflow (git push, buildpack detection, a running container behind a proxy) without paying per dyno or operating a Kubernetes cluster. Dokku is aimed at that gap.
The audience is narrow on purpose. The requirements section asks for a fresh VM, not an existing machine you have customized: Ubuntu 22.04 or 24.04 on amd64 or arm64, or Debian 11 and later. It also asks for an SSH keypair, and states that if the keypair exists before installation it is imported automatically; otherwise you add it afterward with dokku ssh-keys:add. So the intended user is a developer or small team who owns a box and is willing to treat it as dedicated infrastructure.
What it is not: a multi-tenant platform. Nothing in the README describes a scheduler, a control plane, or node pooling. One host runs the apps you push to it.
The mechanism: bootstrap script, plugins, and Docker underneath
Dokku is written in Shell, and the repository layout reflects that. The top level holds a dokku entrypoint, a plugins/ directory, a contrib/ directory with a dependencies.json manifest, and a Makefile that resolves each external binary by name and architecture. The Makefile pulls docker-image-labeler, docker-container-healthchecker, lambda-builder, netrc, procfile-util, sshcommand and gliderlabs-sigil from that manifest, and it points STACK_URL at gliderlabs/herokuish with PREBUILT_STACK_URL set to gliderlabs/herokuish:latest-24. Herokuish is the buildpack runner; the other binaries handle labelling, health checks, Procfile parsing and SSH command dispatch.
The Dockerfile shows the host-side shape. It starts from phusion/baseimage:noble-1.0.3, removes systemd, installs Docker CE plus the buildx and compose plugins from Docker's own apt repository, downloads pack and nixpacks into /usr/bin, and sets DOKKU_INIT_SYSTEM=sv. It also declares build arguments such as DOKKU_TAG, DOKKU_HOSTNAME=dokku.invalid, DOKKU_VHOST_ENABLE=false and DOKKU_WEB_CONFIG=false. Those defaults tell you something about the intended posture: hostname and vhost routing are off until you configure them.
So the data flow is: you push a git repository over SSH, Dokku selects a builder (Herokuish buildpacks, pack, or nixpacks, based on what the image installs), produces a Docker image, and runs it on the same host's Docker daemon. Configuration, domains and process scaling are managed through the dokku CLI, which is a set of plugin commands rather than a daemon API.
Install Dokku and deploy a first app
The README gives the install path for the latest stable release. Run these as a user with sudo access. The bootstrap script is versioned in its URL, and DOKKU_TAG is passed explicitly, so the installed version is pinned rather than floating.
wget -NP . https://dokku.com/install/v0.38.27/bootstrap.sh
sudo DOKKU_TAG=v0.38.27 bash bootstrap.shAfter the script finishes, the README says to complete the installation by configuring the server domain with dokku domains:set-global and user access with dokku ssh-keys:add. If your SSH key was present on the machine before install, the README states it was imported already and the second step is only needed for additional keys.
dokku domains:set-global
dokku ssh-keys:addWith access configured, the deployment model is a git remote. The README does not print a full deploy transcript, so treat the remote name and app creation as the documented convention rather than a copied example: you add the host as a git remote and push, and Dokku builds and starts the app from that push. For unattended installs, the README points to the Debian installation docs instead of the interactive script.
Where the single-host model bites
The honest limitation is in the requirements line: a fresh VM. Dokku installs Docker, replaces the init system assumptions of the base image (the Dockerfile removes systemd and sets DOKKU_INIT_SYSTEM=sv), and claims the dokku user and SSH path. Putting it on a server that already runs other workloads is not a documented path. If you have an existing box with services you care about, the README gives you no migration story for it.
Second, there is no built-in high availability. Everything runs on one Docker daemon on one machine. A host failure takes the applications with it, and nothing in the README describes failover, replication, or a way to spread apps across hosts. If your availability target requires more than one node, Dokku is the wrong tool and a clustered scheduler is the right one.
Third, upgrades are a documented process, not an automatic one. The README devotes a short section to upgrading and links to the upgrading docs rather than describing the steps inline. That means version drift is your responsibility: the bootstrap script installs a pinned tag, and moving between tags is a manual operation you have to read about before running.
Finally, the interface is the CLI. There is no web dashboard in the README, and DOKKU_WEB_CONFIG defaults to false in the Dockerfile. Teams that expect a browser UI for logs, environment variables and deployments will find the workflow unfamiliar.
Dokku versus Coolify
Coolify is the comparison people search for, and the difference is architectural rather than cosmetic. Dokku is a set of shell plugins and CLI commands that you drive over SSH on a host you administer; the README describes installation on a fresh VM and configuration through dokku subcommands. Coolify is presented as a self-hosted platform with a management interface, which changes the daily workflow: you click through a panel instead of typing plugin commands.
That distinction drives the trade-offs. A panel lowers the barrier for teammates who do not live in a terminal, and it typically manages multiple servers from one place. Dokku's model keeps the surface small: the repository is Shell plus a handful of Go binaries resolved through contrib/dependencies.json, and the state lives on the host you control. If your team is comfortable with SSH and git remotes, Dokku's smaller surface is easier to reason about. If you need a UI or multi-server orchestration from day one, Coolify's approach fits better, and choosing Dokku means building that layer yourself.
Licence and the cost of staying current
Dokku is MIT licensed, with the LICENSE file attributing copyright to Jeff Lindsay. MIT is permissive: you can use, modify and redistribute it, including in commercial settings, provided the copyright notice and permission notice are retained. That is the extent of what the repository states; it is not legal advice, and if you redistribute Dokku inside a product you should read the LICENSE file yourself rather than rely on a summary.
The practical cost is maintenance attention, not licence fees. Releases are frequent and versioned in the v0.38.x line, with v0.38.27 dated 2026-08-12, v0.38.26 dated 2026-08-09, and v0.38.25 dated 2026-07-22. The last push to the repository was on 2026-08-12. Frequent patch releases mean security and bug fixes arrive quickly, but they also mean the tag in your bootstrap URL ages. Someone has to track the upgrading docs and decide when to move. On a single host, that upgrade is a maintenance window you schedule, not a rolling operation.
Editorial conclusion
Adopt Dokku if you already run Ubuntu 22.04/24.04 or Debian 11+ hosts, you are comfortable on the command line, and you want git-push deploys without a control plane. Do not adopt it if you need a web dashboard, multi-node scheduling, or a managed upgrade path, none of which the README offers. Before you commit, verify the exact DOKKU_TAG in the bootstrap URL matches a release you have read about, confirm your SSH key is imported (or run dokku ssh-keys:add), and check the upgrading docs for the version you are leaving.
Frequently asked questions
What exactly is Dokku?
Dokku describes itself as a Docker-powered mini-Heroku and the smallest PaaS implementation it knows of. You install it on a fresh Ubuntu or Debian VM and manage applications through the dokku CLI and git pushes.
What is Dokku used for?
It builds and runs applications on a single host: you push a git repository, Dokku builds a Docker image from it, and the app runs on the same machine's Docker daemon. Domains, SSH access and app configuration are handled through dokku commands.
Is Dokku free to use?
The repository is MIT licensed, with copyright attributed to Jeff Lindsay, so there is no licence fee to run it. The README does mention sponsorship and backing through OpenCollective and Patreon, which are optional funding channels rather than a paid tier.
How do I install Dokku?
The README's install steps download the versioned bootstrap script and run it with sudo, passing DOKKU_TAG. Afterward you set the global domain with dokku domains:set-global and add keys with dokku ssh-keys:add if your key was not present before installation.
What does the name Dokku mean?
The README does not explain the origin of the name, and no repository file given here defines it. The project documentation is silent on this, so any meaning you find elsewhere is not sourced from the project itself.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/dokku-dokku)
Community notes