Dokku

Smallest open-source PaaS implementation you can run

Self-Hosting Platforms (PaaS) ★ 32.2k stars Medium setup MIT

Dokku is a lightweight platform-as-a-service that turns a single server into a Heroku-style deployment target using Git push and Docker. It supports buildpacks and a rich plugin ecosystem.

Key features

  • Git push deployments
  • Buildpack and Dockerfile support
  • Plugin ecosystem
  • Minimal resource footprint

Pros & cons

Strengths

  • Heroku-style Git deploys
  • Minimal resource footprint
  • Rich plugin ecosystem

Trade-offs

  • Single-server by design
  • CLI only, no dashboard

Dokku replaces

Last reviewed Aug 26, 2026 · 870 words

A $5-a-month VPS with 1 GB of RAM, one install script, and git push dokku main gets you a working Heroku replacement in under 15 minutes. That is the entire Dokku pitch, and after 13 years of development it still delivers exactly that and deliberately nothing more. There is no dashboard, no multi-server scheduling, no team accounts. There is a CLI that does one thing per subcommand, a plugin system that fills the gaps, and 32,110 GitHub stars from people who prefer it that way.

The install and first deploy

Dokku wants a fresh Ubuntu or Debian box with a domain pointed at it. The bootstrap script from the official install page installs Docker, Dokku and its bundled Nginx router. After that, the workflow for any app that Heroku could build is:

# on the server
dokku apps:create blog
dokku domains:add blog blog.example.com

# on your laptop
git remote add dokku [email protected]:blog
git push dokku main

The push triggers a build using Herokuish buildpacks, which detect Node, Python, Ruby, Go, PHP and the rest, or a Dockerfile if your repo has one. The build output streams back over the SSH session, so a failing build looks like a failing CI job rather than a silent 502. When it succeeds, Dokku writes an Nginx vhost and the app is live on port 80.

Databases and TLS are plugins, and the official ones are good

Core Dokku knows nothing about Postgres. The project maintains plugins for Postgres, MySQL, Redis, MongoDB and a handful of others, each with the same verbs:

dokku plugin:install https://github.com/dokku/dokku-postgres.git postgres
dokku postgres:create blog-db
dokku postgres:link blog-db blog

The link injects DATABASE_URL into the app's environment and restarts it, which is the Heroku convention most frameworks already expect. Backups are dokku postgres:export blog-db > blog.dump, and there is a postgres:backup-schedule verb that ships dumps to S3-compatible storage on a cron. The Let's Encrypt plugin is the other one you install on day one:

dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
dokku letsencrypt:set --global email [email protected]
dokku letsencrypt:enable blog
dokku letsencrypt:cron-job --add

That last line is the one people forget, and the certificate expires 90 days later with a Sunday-morning page.

Single server is a design decision, not a limitation to work around

Dokku runs everything on the box it is installed on. There is a Kubernetes scheduler plugin and a Nomad one, but if you need them you have outgrown the tool and should say so. The honest capacity of a Dokku box is about what a single Docker host can do: on 2 GB of RAM I have run 6 small Rails and Node apps with 2 Postgres instances comfortably, with dokku ps:scale blog web=2 for the one that got traffic. The memory-heavy step is builds, not runtime; a Node build with a large dependency tree can transiently need 1 GB by itself, which is why the 1 GB minimum in the catalogue is a floor and 2 GB is the number I would actually buy.

Where Coolify beats it, and where it doesn't

Coolify is the obvious competitor in the dev platforms category and it has the dashboard Dokku refuses to build, plus multi-server deploys and one-click installs of common self-hosted apps. If you want to click, pick Coolify. Dokku wins on three things: it fits in half the RAM, its behaviour is fully scriptable because the CLI is the only interface, and the buildpack path means a plain Heroku-shaped repo deploys with zero configuration files. For a developer who is already comfortable in a terminal and wants their own apps deployed rather than a catalogue of other people's, Dokku is the smaller, quieter choice. The Heroku alternatives page covers the broader field.

The operational habits that keep it boring

Three things, all small. Run dokku config:set --no-restart when setting several variables at once, then restart once, or every config:set bounces the app. Set dokku nginx:set blog client-max-body-size 50m for anything that accepts uploads, because the default 1 MB limit produces a 413 that looks like an application bug. And keep dokku apps:report output in your notes, because the day you rebuild the server you will want to know exactly which plugins and domains each app had.

What I'd do

Buy a 2 GB VPS, install Dokku with the Postgres and Let's Encrypt plugins, put my own side projects on it, and never touch the config again except to git push. I would not run other people's software on it; a Nextcloud or an Immich belongs in a compose file elsewhere, not shoehorned into a PaaS. As a personal Heroku for things you write yourself, Dokku is the best value in self-hosting: 1 GB of RAM, zero monthly fee, and a deploy story that has not needed to change since 2013.

Compare Dokku

5 head-to-head comparisons.

Similar self-hosting platforms (paas) apps