Dokku — mini-Heroku na vlastnom serveri
Dokku je open-source PaaS (Platform as a Service) postavený nad Dockerom, ktorý ti dáva Heroku-like skúsenosť na vlastnom serveri za zlomok ceny. Princíp je jednoduchý: git push dokku main a Dokku zbuilduje image, prepáli sieťové porty, vyrieši TLS, prelinkuje databázy a aplikácia beží.
Dokku je single-host (na rozdiel od Kubernetes), čo je presne tá voľba, keď máš 5-100 aplikácií a nepotrebuješ federovaný klastr.
1. Pre koho je Dokku správna voľba
- Solo dev / small team s 5-50 aplikáciami, ktorý nechce stavať K8s stack.
- Side-projects a portfólio servery — jeden VPS, dokku, zatlačíš git push a hotovo.
- Internal tools vo firme, ktoré nemajú nárok na plnú DevOps prácu.
- Migrácia z Heroku — Dokku rešpektuje Heroku buildpacks aj Procfile, takže projekt často beží bez zmeny.
Kedy nepoužiť Dokku:
- Multi-host orchestrácia, auto-scaling, blue-green s viacerými nodmi → Kubernetes alebo Nomad.
- Striktné compliance (PCI-DSS, HIPAA) s auditom — Dokku nemá enterprise audit logy.
- Workloady s viac ako ~64 GB RAM alebo > 16 vCPU per app — jeden hardware narazí na strop.
2. Architektúra na jednu obrazovku
Dokku je iba bash skripty + Docker s pluginovou architektúrou:
- dokku CLI — frontend, ktorý parsuje príkazy.
- Docker — runtime pre kontajnery aplikácií.
- Buildpacks (Cloud Native Buildpacks) alebo Dockerfile alebo
Dockerfile.dokku— build mechanizmus. - nginx / Caddy / Traefik ako reverse proxy — vyberáš si v inštalácii.
- Pluginy ako
dokku-postgres,dokku-mysql,dokku-redis— pridávajú managed služby. - Letsencrypt plugin — automatické TLS certifikáty.
Žiaden control-plane, žiadne etcd, žiadny scheduler. Iba bash + docker daemon.
3. Typický life-cycle aplikácie
# Server (raz)
ssh root@server "wget -nv -O - https://dokku.com/install/v0.37.7/bootstrap.sh | bash"
# Vytvor app
ssh dokku@server apps:create myapp
ssh dokku@server postgres:create myapp-db
ssh dokku@server postgres:link myapp-db myapp
# Lokálne
git remote add dokku dokku@server:myapp
git push dokku main # build + deploy
# Domain + TLS
ssh dokku@server domains:add myapp myapp.example.com
ssh dokku@server letsencrypt:enable myapp
# Logy & status
ssh dokku@server logs myapp -t
ssh dokku@server ps:report myapp
Aplikácia je live za 2-3 minúty od apps:create.
4. Buildpacks vs Dockerfile
Dokku detekuje build metódu v poradí:
Dockerfile— najexplicitnejšie, najviac kontroly.- Cloud Native Buildpacks (default v moderných verziách) — pre Node.js, Python, Ruby, Go, Java auto-detect.
- Herokuish (legacy) — staré Heroku buildpacks.
Pre produkčné apps odporúčame Dockerfile — explicitnú kontrolu nad image-om. Pre prototypovanie sú buildpacks bez údržbové práce ideálne.
5. Plugin ekosystém
Najpoužívanejšie pluginy:
- dokku-postgres, dokku-mysql, dokku-redis, dokku-mongo — managed služby s
:linkjednoduchým príkazom. - dokku-letsencrypt — automatické TLS, auto-renew cez cron.
- dokku-registry — push do externého Docker registry (GHCR, ECR).
- dokku-clickhouse, dokku-elasticsearch, dokku-rabbitmq, dokku-prometheus — pre špecifické storage/observability potreby.
- dokku-graphite — metriky aplikácií.
- dokku-acl — multi-user prístup, audit log (čiastočný).
- dokku-maintenance — "503 Maintenance" stránka počas updatu.
Pluginy sú jednoduché bash skripty + Docker volá — vlastný plugin napíšeš za odpoludnie.
6. Produkčné praktiky
restart-policy=unless-stopped— defaultne nastavené. Nikdy nemeň naon-failure:N— pri reštarte Dokku stratíš kontajnery.dokku ps:scale myapp web=2— viac inštancií tej istej app (load-balancuje sa cez nginx upstream).dokku ps:set-restart-policy myapp unless-stopped— kontrola na úrovni jednej app.zero-downtime-deploy— Dokku robí checks (HTTP) pred prepnutím trafiku. Konfigurácia vCHECKSsúbore v repo.docker-options— pre limity (--memory 512m), labels, networky.dokku resource:limit --memory 512 myapp— memory limit per process type.
7. Bežné gotcha
dokku runspúšťa nový kontajner — ak chceš shell v bežiacej app, použidokku enter.- Caddy plugin strippuje single-quoted hodnoty z
caddy.header.*labels — používaj len dvojité úvodzovky v hodnotách. git:from-archive(tar deploy) je rýchlejší akogit push, ale občas vynechá súbory — pri prvom raze verifikuj.- Buildpacks cache v
/var/lib/dokku/data/storage/buildpacksobčas korumpuje build —dokku repo:purge-cache myappfix. dokku letsencrypt:enablevyžaduje port 80 voľný — ak používaš Caddy/Cloudflare proxy, treba DNS-01 challenge namiesto HTTP-01.
8. Vzťah k iným technológiám
- Docker je runtime; Dokku je orchestrátor pre single-host.
- Kubernetes je iné weighting class — Dokku nahrádza pre 5-100 apps, K8s preberá pri > 200 apps alebo multi-host.
- Nomad je alternatíva pre orchestračnú vrstvu, ale s vyššou réžiou.
- Heroku je managed verzia; Dokku je self-hosted s rovnakou DX.
- Coolify, Caprover, Dokploy sú open-source alternatívy s lepším web-UI, ale menšou maturitou.
Súvisiace témy
- Docker — runtime pod Dokku.
- Caddy — moderný reverse proxy, často spárovaný s Dokku (cez
dokku-caddyplugin). - GitOps — pri väčšej škále upgrade z
git pushna FluxCD/ArgoCD. - Helm — Kubernetes ekvivalent (pri prerastaní Dokku).
- GitHub-Actions — typicky predchádza
git push dokkuv CI pipeline.