Dokku: A Single-Server PaaS That Puts Heroku-Style Deploys on Your Own Hardware
A docker-powered PaaS that helps you build and manage the lifecycle of applications
At a glance
- What is it?
- Dokku is a Docker-powered PaaS that runs on a single VM and turns git push into application deployment. This review covers its installation, workflow, limitations, and where it fits compared to full platform alternatives.
- Who is it for?
- Adopt Dokku if you run a single VM, want Heroku-style git push deploys without a control plane, and can accept its Ubuntu or Debian-only install base and single-host scaling ceiling. Skip it if you need multi-node orchestration, managed services, or Windows support; those needs point to Kubernetes or a cloud PaaS.
- 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 received new commits within the last day.
- 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 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The Problem: Heroku-Style Simplicity Without the Vendor Lock-In
Dokku solves a specific pain: you want the developer experience of Heroku, where you push code with git and the platform builds, runs, and manages the app, but you do not want to hand your workloads to a third-party cloud. The README calls it a 'Docker powered mini-Heroku' and 'the smallest PaaS implementation you've ever seen.' That is the core promise. It is for a single operator who owns one VM and wants to deploy multiple applications without writing Dockerfiles and systemd units by hand. The target user is someone comfortable with SSH and a Linux shell, because the entire interaction model is command-line driven. It is not for teams that need autoscaling or multi-region failover. The scope is deliberately narrow: one server, one platform, and a deployment flow that mirrors the PaaS giants.
How It Works: Git Push as the Deployment Trigger
The mechanism is straightforward: Dokku runs on a server and listens for git pushes over SSH. When you push to a remote that points at the Dokku host, it triggers a build process that uses Docker to create an image from your code, then runs that image as a container. The README does not detail the internal buildpack detection or Dockerfile handling, but the description 'Docker powered' tells you the runtime is container-based. The lifecycle management covers building, running, and presumably stopping or restarting applications, though the README only mentions 'build and manage the lifecycle of applications.' The key architectural point is that Dokku is not a distributed system. It runs on a single VM, which means all apps share that host's resources. The documentation, linked but not reproduced, likely explains how domains and SSL are managed, but the README only shows the initial configuration steps: setting a global domain and adding SSH keys.
Installation: A Bootstrap Script and Two Commands
Installation is a two-step process from a fresh VM. The README specifies supported operating systems: Ubuntu 22.04 or 24.04 (amd64 or arm64), and Debian 11 or later (amd64 or arm64). You download a bootstrap script and run it with sudo. The exact commands are: 'wget -NP . https://dokku.com/install/v0.38.27/bootstrap.sh' followed by 'sudo DOKKU_TAG=v0.38.27 bash bootstrap.sh'. The DOKKU_TAG variable pins the version, which is good for reproducibility. After the script finishes, you configure a global domain with 'dokku domains:set-global' and add user access with 'dokku ssh-keys:add'. The README notes that if an SSH keypair exists on the VM before installation, it is imported automatically; otherwise you must add it manually. That is a concrete dependency: you need SSH access to the server, and the deployment workflow relies on that keypair. The unattended installation method is mentioned but not detailed, so for automation you would need to consult the linked docs.
Limitations: Single Host, Narrow OS Support, and a Manual Upgrade Path
The most obvious limitation is that Dokku is a single-server PaaS. You cannot scale horizontally by adding nodes; the README never mentions clustering or multi-host orchestration. If your app outgrows one VM, you are looking at a migration to something like Kubernetes, which is a different beast. Second, the OS support is narrow: only specific Ubuntu and Debian versions, and only amd64 or arm64 architectures. If you run CentOS, Fedora, or Alpine, Dokku is not for you. Third, the upgrade process is not automatic. The README points to documentation for upgrading, but the installation command pins a tag, which implies you must manually run a new bootstrap or follow a documented upgrade procedure. The release cadence is active, with three patches in a month (v0.38.27, v0.38.26, v0.38.25), so you will need to keep up. Finally, the README does not mention any built-in backup or disaster recovery, so you must handle data persistence yourself. For stateful applications, that is a serious consideration.
Comparison: Dokku vs. Kubernetes and Managed PaaS
The natural alternatives are Kubernetes and managed PaaS offerings like Heroku. Kubernetes solves the multi-node problem with a control plane, pod scheduling, and service discovery, but it requires significant operational expertise and a cluster of machines. Dokku trades that complexity for a single host. You get a simpler mental model: one server, git push, done. Heroku, the commercial PaaS, offers managed databases, add-ons, and automatic scaling, but you give up control over the underlying infrastructure and pay per resource. Dokku gives you root access to the VM and no per-app fees, but you manage the OS, Docker, and any add-on services yourself. The difference in approach is stark: Dokku is a thin layer over Docker on one host, while Kubernetes is a distributed system and Heroku is a fully managed platform. If your load fits on one server, Dokku's simplicity wins. If you need elasticity or managed services, the alternatives are worth the complexity.
Maintenance and Upgrade Cost
The README does not describe a maintenance routine, but the pinning of versions during installation suggests that upgrades are manual and deliberate. You must track releases, read the upgrade documentation, and run the appropriate commands. The recent release history shows a steady stream of patches, so maintenance is ongoing. The project is under the MIT License, which means you can modify and redistribute it freely, but you are responsible for your own support. The README lists GitHub Issues and a Slack channel as support channels, which is community-driven, not a commercial SLA. For a production deployment, you should factor in time to test upgrades on a staging VM before applying to production. The documentation link for upgrading is the first place to look, but the README does not give specifics on rollback or data migration, so you should verify those details before relying on it.
Who Should Adopt It and What to Verify First
Dokku is a fit for a developer or small team that wants to self-host a handful of applications on a single VPS and values the git push workflow. It is also a good learning tool for understanding how a PaaS works under the hood, since you can inspect the Docker containers and the surrounding shell scripts. It is not a fit for organizations that need multi-tenancy, horizontal scaling, or a managed database service out of the box. Before adopting, verify that your target VM runs a supported Ubuntu or Debian version, ensure you have an SSH keypair ready or know the 'dokku ssh-keys:add' command, and read the upgrade documentation to understand the version-jump process. Also, check whether your application's build process works with Docker, because Dokku relies on Docker images. The README does not mention Windows or macOS support, so those platforms are out. If you accept the single-host constraint, Dokku delivers a compact, self-contained PaaS that you control completely.
Editorial conclusion
Adopt Dokku if you run a single VM, want Heroku-style git push deploys without a control plane, and can accept its Ubuntu or Debian-only install base and single-host scaling ceiling. Skip it if you need multi-node orchestration, managed services, or Windows support; those needs point to Kubernetes or a cloud PaaS. Before adopting, verify your exact Ubuntu or Debian version is supported, confirm you have an SSH keypair ready or know how to add one after install, and read the upgrade documentation to understand the version-jump process from your current release. The project's release cadence (three patch releases in under a month) shows active maintenance, but the real test is whether your application's build and runtime requirements fit Dokku's Docker-based model.
Community notes