Dokku: Open Source alternative to Heroku in 2026
Dokku is the original 'mini-Heroku': a single-command-line PaaS that uses buildpacks or Dockerfiles and deploys with a simple `git push`.
Audit Snapshot
View notes βLicense β Matches GitHub
GitHub β Active
Latest release β v0.38.31 Β· 16 days ago
Docker Compose β Official installer, no compose
Production β Not production-tested by AltFreeStack
Dokku vs. Heroku
Pros
- The simplest and most minimal of the whole PaaS group
Things to consider
- No official web dashboard (third-party plugins exist)
Quick Docker installation guide
This tool doesn't install via a plain docker-compose.yml β it uses the project's own official installer. Review it before running it. See the full step-by-step guide β
π‘ Official SaaS or self-hosted with AltFreeStack?
- On the official cloud: a recurring monthly fee and usage limits on Heroku.
- On your own VPS: 100% free software on your own server, with no artificial row, project or user limits.
# Dokku se instala con su script oficial de bootstrap directamente sobre
# el servidor (gestiona el Docker del host), no mediante un
# docker-compose.yml:
wget -NP . https://dokku.com/install/v0.35.15/bootstrap.sh
sudo DOKKU_TAG=v0.35.15 bash bootstrap.sh
This docker-compose corresponds to an actively maintained project β last commit today.
This docker-compose not working for you? Report it on GitHub βTechnical profile
- License
- MIT
- Category
- Deployment, PaaS & Hosting
- Replaces
- Heroku
- Tech stack
- BashDocker
Key features
- Deploy with git push, just like Heroku
- Supports buildpacks and Dockerfiles
- Hundreds of community plugins
π Connect your domain with free SSL
Step 1 β Set up the DNS
In your domain registrar's dashboard (Cloudflare, Namecheap, GoDaddy...), create a record:
- Type
- A
- Name/Host
- @ (root domain) or a subdomain, e.g. app
- Content/Value
- Your server's public IP
Wait 5 to 15 minutes for the record to propagate across the internet.
Step 2 β Automatic reverse proxy with Caddy
One single file, no Nginx config or manual certificates β Caddy issues and renews Let's Encrypt HTTPS on its own.
Create a file called Caddyfile:
yourdomain.com {
reverse_proxy localhost:YOUR_APP_PORT
}Start Caddy with this command (pulls the image and runs it in the background):
docker run -d -p 80:80 -p 443:443 --name caddy --restart always -v $PWD/Caddyfile:/etc/caddy/Caddyfile -v caddy_data:/data caddy