Por qué elegir Dokku para su VPS
Donde otros PaaS incorporan una interfaz web y un orquestador completo, Dokku sigue siendo deliberadamente minimalista: se trata de un conjunto de scripts de shell que pilotan Docker. Usted envía su código con git push dokku main, Dokku detecta el lenguaje mediante los buildpacks de Heroku o un Dockerfile, construye la imagen y publica la aplicación. Todo se gestiona por línea de comandos, lo que lo hace extremadamente ligero y previsible.
CapRover, Coolify y Easypanel ofrecen todos una interfaz gráfica, pero a un coste de memoria muy superior. CapRover recomienda 2 GB de RAM como mínimo; Coolify 4 también requiere 2 GB por su PostgreSQL integrado; Easypanel necesita 2 GB en cuanto hay un build activo. Dokku, en cambio, funciona desde 512 MB de RAM para una aplicación ligera y no añade ningún componente de control permanente.
Las ventajas concretas de Dokku
- Huella de memoria mínima: funciona desde 512 MB de RAM para una app ligera, 1 GB con comodidad.
- Despliegue por
git push, como en Heroku, con detección automática del lenguaje mediante buildpacks. - Soporte nativo de buildpacks de Heroku (Node, Python, Ruby, Go, PHP…) y de Dockerfiles.
- Plugins oficiales para PostgreSQL, MySQL, Redis y MongoDB, gestionados íntegramente por CLI.
- Plugin Let's Encrypt para HTTPS automático con renovación integrada vía cron.
- Zero-downtime deploys gracias a health checks configurables antes de la conmutación del contenedor.
- Rollback instantáneo mediante
dokku tagsydokku deploysobre una imagen anterior. - Inyección automática de variables de conexión (DATABASE_URL, REDIS_URL) en el
plugin:link.
Requisitos dimensionados para Dokku
Dokku es el PaaS más económico en recursos de esta serie.
RAM. 512 MB es suficiente para una aplicación ligera. Prevea 1 GB para un uso habitual y 2 GB en cuanto sus builds usen buildpacks (Node, Ruby, Python compilan en memoria) o aloje una base de datos en el mismo VPS. Para varias aplicaciones en paralelo con PostgreSQL, apunte a 4 GB.
CPU. 1 vCPU es suficiente para aplicaciones ligeras. Las fases de build de buildpack son intensivas en CPU pero no bloquean el despliegue.
Disco. Cuente con 20 GB de SSD mínimo.
Swap. En un VPS de 1 o 2 GB de RAM, añada siempre 2 GB de swap para evitar que el OOM killer del kernel mate un build de Node o Ruby.
Sistema. Ubuntu 22.04 LTS o 24.04 LTS recién instalado, sin Docker ni Nginx preinstalados. Los puertos 22 (SSH), 80 y 443 deben estar abiertos.
DNS. Configure un dominio por aplicación o un dominio wildcard *.your-domain.com apuntando a la IP del VPS.
Instalar Dokku v0.38.x y desplegar una primera aplicación
Descargar y ejecutar el script oficial de arranque
En un Ubuntu 22.04 o 24.04 LTS recién instalado, descargue el script de instalación y ejecútelo:
wget -NP . https://dokku.com/bootstrap.sh sudo DOKKU_TAG=v0.38.x bash bootstrap.shEl script instala Docker (si está ausente), Nginx y Dokku. La operación dura de dos a cinco minutos.
Configurar el dominio global y añadir su clave SSH
Defina el dominio raíz que Dokku usará para construir los subdominios de las aplicaciones:
dokku domains:set-global your-domain.comA continuación, añada su clave SSH pública para autorizar los despliegues:
cat ~/.ssh/id_ed25519.pub | ssh [email protected] "dokku ssh-keys:add admin"Crear una aplicación y configurar el remote de Git
En el servidor, cree la aplicación objetivo:
dokku apps:create my-appEn su equipo local, añada Dokku como remote de Git:
git remote add dokku [email protected]:my-appDokku creará automáticamente el subdominio
my-app.your-domain.com.Aprovisionar una base de datos PostgreSQL
Instale el plugin oficial de PostgreSQL (una vez por servidor):
dokku plugin:install https://github.com/dokku/dokku-postgres.gitCree una base de datos y enlácela con la aplicación:
dokku postgres:create my-db dokku postgres:link my-db my-appEl
linkinyecta automáticamente la variableDATABASE_URLen el contenedor de la aplicación.Desplegar la aplicación por primera vez
Desde su repositorio local, envíe a Dokku:
git push dokku mainDokku detecta el lenguaje, descarga el buildpack correspondiente, construye la imagen Docker y arranca el contenedor. El proceso se muestra en tiempo real en el terminal.
Activar HTTPS con Let's Encrypt
Instale el plugin Let's Encrypt (una vez por servidor):
dokku plugin:install https://github.com/dokku/dokku-letsencrypt.gitDefina el correo para las notificaciones y active el certificado:
dokku letsencrypt:set my-app email [email protected] dokku letsencrypt:enable my-appActive la renovación automática:
dokku letsencrypt:cron-job --add
Gestionar varias aplicaciones y variables de entorno
Dokku gestiona cada aplicación en un contenedor aislado. Puede alojar tantas aplicaciones como soporte su VPS.
Variables de entorno. Use dokku config:set para inyectar secretos o parámetros de configuración:
dokku config:set my-app NODE_ENV=production \
SECRET_KEY=changemeStaging vs producción. La práctica habitual es crear dos aplicaciones en el mismo servidor:
dokku apps:create my-app-staging
dokku apps:create my-app-productionDominios personalizados. Para asociar un dominio existente:
dokku domains:add my-app your-domain.comActualizaciones zero-downtime y rollback
Dokku gestiona el zero-downtime mediante checks de salud antes de la conmutación. Configure un fichero CHECKS en la raíz de su proyecto:
WAIT=10
TIMEOUT=60
/healthz Application is upTags y rollback. Dokku conserva las imágenes Docker de despliegues anteriores como tags. Para revertir:
dokku tags:list my-app
dokku tags:deploy my-app v3Para crear un tag de seguridad antes de un despliegue arriesgado:
dokku tags:create my-app stable-before-migrationPlugins esenciales
PostgreSQL. El más utilizado. Comandos adicionales útiles: dokku postgres:backup my-db para un volcado manual, dokku postgres:connect my-db para acceso psql interactivo.
Redis.
dokku plugin:install https://github.com/dokku/dokku-redis.git
dokku redis:create my-cache
dokku redis:link my-cache my-appInyecta la variable REDIS_URL en el contenedor.
Cron (planificador). Cree un fichero app.json en la raíz de su proyecto:
{
"cron": [
{ "command": "php artisan schedule:run", "schedule": "* * * * *" }
]
}Dokku vs CapRover vs Easypanel — comparativa 2026
Desplace la tabla
| Criterio | Dokku 0.35 | CapRover 1.x | Easypanel 2.x |
|---|---|---|---|
| RAM en reposo | ~100 MB (Nginx + daemon) | ~400 MB (Swarm + supervisor) | ~350 MB (Traefik + API) |
| Interfaz gráfica | No — solo CLI | Sí (panel web) | Sí (panel moderno) |
| Buildpacks | Heroku buildpacks (CNB) | captain-definition / Docker | Nixpacks o Dockerfile |
| Despliegue Git | git push nativo | CLI caprover + webhook | Webhook GitHub / GitLab |
| Plugins / marketplace | ~100 plugins oficiales | Catálogo One-Click (~150 apps) | Marketplace integrada (~200 apps) |
| Zero-downtime | Sí (fichero CHECKS) | Sí (rolling Docker Swarm) | Sí (Traefik labels) |
| Rollback | dokku tags:deploy | Reconstrucción desde imagen | Redespliegue desde Git |
| Multi-servidor | No nativo | Sí (Docker Swarm multi-nodo) | Sí (agentes remotos) |
| Kubernetes | No | No (solo Docker Swarm) | No |
| Licencia | MIT | Apache 2.0 | Propietaria (plan gratuito) |
| Curva de aprendizaje | Baja (CLI sencilla) | Moderada | Baja (interfaz intuitiva) |
Swap recomendado desde 1 GB de RAM. En un VPS ligero, añada 2 GB de swap antes de cualquier otra cosa: un build de Node o Python sin swap es eliminado regularmente por el OOM killer.
Fichero CHECKS. Sin este fichero, Dokku conmuta en cuanto arranca el contenedor, antes de que la aplicación esté lista para responder.
Rotación de logs. Los logs de Docker crecen sin límite por defecto. Configure la rotación en /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": { "max-size": "50m", "max-file": "3" }
}Resolución de errores frecuentes
error: failed to push some refs — permiso denegado.
Compruebe que su clave SSH está registrada: dokku ssh-keys:list. Si está ausente, añádala con dokku ssh-keys:add admin < ~/.ssh/id_ed25519.pub.
! [remote rejected] — hook pre-receive rechazado.
Este error indica un fallo de build en el lado de Dokku. Consulte los logs detallados con dokku logs my-app.
La aplicación devuelve 502 Bad Gateway.
Compruebe el estado del proceso: dokku ps:report my-app. Causa frecuente: la aplicación no escucha en el puerto declarado en el Procfile.
letsencrypt:enable falla — timeout del challenge HTTP-01.
El desafío ACME requiere que el dominio resuelva a la IP del VPS antes de la activación. Verifique la propagación DNS: dig +short my-app.your-domain.com.
El build es eliminado por el kernel (OOM) — Killed.
El OOM killer intervino por falta de memoria. Añada swap o migre a un VPS con 2 GB de RAM.
Para ir más lejos
Dokku cubre el despliegue de aplicaciones de contenedor único en un VPS. Si su arquitectura evoluciona hacia varios servicios interdependientes, varias alternativas de la misma familia complementan este enfoque: CapRover añade una interfaz gráfica y un modo clúster Docker Swarm. Easypanel simplifica la gestión multi-servicio con Nixpacks y un marketplace de aplicaciones. Todas estas herramientas funcionan en un VPS Cloud de ServOrbit con Ubuntu LTS.