🟡 Intermediate

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í:

  1. Dockerfile — najexplicitnejšie, najviac kontroly.
  2. Cloud Native Buildpacks (default v moderných verziách) — pre Node.js, Python, Ruby, Go, Java auto-detect.
  3. 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 :link jednoduchý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ň na on-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 v CHECKS sú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 run spúšťa nový kontajner — ak chceš shell v bežiacej app, použi dokku 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ší ako git push, ale občas vynechá súbory — pri prvom raze verifikuj.
  • Buildpacks cache v /var/lib/dokku/data/storage/buildpacks občas korumpuje build — dokku repo:purge-cache myapp fix.
  • dokku letsencrypt:enable vyž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-caddy plugin).
  • GitOps — pri väčšej škále upgrade z git push na FluxCD/ArgoCD.
  • Helm — Kubernetes ekvivalent (pri prerastaní Dokku).
  • GitHub-Actions — typicky predchádza git push dokku v CI pipeline.