🚀 Dokploy — Tu Propio PaaS Self-Hosted

Vercel/Heroku, pero en tu VPS

Plataforma de despliegue gratuita y open source que convierte cualquier servidor propio (VPS o dedicado) en un PaaS. Despliegas con git push, obtienes SSL automático, proxy reverso, bases de datos y métricas, sin pagar por usuario ni ancho de banda y sin vendor lock-in.

  • 🌐 Web: dokploy.com
  • 📜 Licencia: open source
  • 🧰 Stack: Docker · Traefik · Next.js · PostgreSQL
  • 🖥️ Requisitos mínimos: 2 GB RAM · 30 GB disco
  • 🎥 Fuente: video de Nicolás Schürmann (HolaMundo) — URL por confirmar

1️⃣ Qué es Dokploy

Una alternativa autoalojada a Vercel, Heroku o Netlify. En lugar de pagar una plataforma gestionada, montas la tuya en un servidor y conservas el control de la infraestructura.

Características principales

CapacidadDetalle
Multi-lenguajeNode.js, Python, PHP, Go, Ruby y más.
Integración GitGitHub, GitLab, Bitbucket, Gitea o Git estándar, con despliegues continuos.
InfraestructuraGestión de dominios, SSL automático (Let’s Encrypt / Traefik) y bases de datos: PostgreSQL, MySQL, Redis, MongoDB, etc.
Escalabilidad horizontalEmpiezas con un servidor y agregas más vía Docker Swarm, distribuyendo la carga entre máquinas.
Empaquetado automáticoDockerfile, docker-compose, Nixpacks y Railpack.

Railpack vs Nixpacks

Railpack detecta lenguaje y dependencias y arma el contenedor sin que escribas un Dockerfile. En el video, Nixpacks falló con Node 26; Railpack resolvió la versión sin problema.


2️⃣ Arquitectura interna

Dokploy se compone de cuatro capas:

Internet
   │
   ▼
┌─────────────────────────────┐
│ Traefik (reverse proxy)     │  ← 80/443, SSL, enrutamiento por dominio
└──────────────┬──────────────┘
               │
   ┌───────────┴───────────┐
   ▼                       ▼
┌──────────────┐   ┌──────────────────┐
│ Panel Next.js│   │ Contenedores app │
│ (admin)      │   │ APIs y DBs       │
└──────┬───────┘   └──────────────────┘
       │
       ▼
┌──────────────┐
│ PostgreSQL   │  ← credenciales, configs, estados, registros
└──────────────┘
CapaFunción
Proxy reverso (Traefik)Recibe todo el tráfico HTTP/HTTPS externo y lo enruta al contenedor correcto.
Panel de administraciónApp web en Next.js para proyectos, métricas y configuración.
Base de datos internaPostgreSQL: credenciales, configuración, estados de servicios y registros.
Capa de contenedoresApps, APIs y bases de datos en contenedores Docker aislados.

3️⃣ Forward Proxy vs Reverse Proxy

Paréntesis conceptual clave para entender dónde encaja Traefik.

Forward ProxyReverse Proxy
PosiciónEntre los clientes (oficina/red local) e Internet.Entre Internet y los servidores/contenedores internos.
Actúa en nombre deLos clientes.Los servidores.
UsosFiltrar páginas, bloquear tráfico peligroso, registrar actividad saliente.Recibir peticiones a un dominio y reenviarlas al contenedor/puerto interno.
EjemploProxy corporativo.Traefik en Dokploy.

Cómo enruta Traefik

Un usuario pide holamundo.io o chanchitofeliz.com. Traefik recibe la petición en 80/443, inspecciona dominio o ruta y la manda al contenedor interno correspondiente.


4️⃣ Requisitos y preparación del servidor

  • Mínimo recomendado: 2 GB RAM y 30 GB disco.
  • El disco importa: la compilación y la descarga de imágenes Docker consumen espacio temporal.
  • Entorno del video: VPS de HostGator con 2 GB DDR5 y 50 GB NVMe, imagen limpia de Ubuntu 22.04 LTS.
  • Definir contraseña de root para entrar por consola.

2 GB es el piso, no lo cómodo

Los builds de Node pueden quedarse sin memoria en 2 GB. Si el presupuesto lo permite, 4 GB RAM evita OOM durante compilaciones. El propio video muestra un caso ajustado.


5️⃣ Instalación paso a paso

1. Acceso SSH

ssh -p 22022 root@<IP_DEL_SERVIDOR>

El puerto 22022 es el del ejemplo; usa el que te asigne tu proveedor.

2. Script instalador

curl -sSL https://dokploy.com/install.sh | sh

El script:

  1. Instala dependencias.
  2. Instala Docker si no está.
  3. Levanta Traefik y PostgreSQL.
  4. Levanta el contenedor de Dokploy.

curl | sh

Es cómodo, pero ejecuta código remoto como root. Si te importa la cadena de suministro, descarga el script, revísalo y ejecútalo localmente.

3. Dashboard

Tras un par de minutos, la terminal indica que el servicio está en el puerto 3000:

http://<IP_DEL_SERVIDOR>:3000

4. Cuenta administrador

En el primer acceso se crea el usuario inicial: nombre, correo y contraseña.


6️⃣ Configurar proyecto y aplicación

Crear el proyecto

  • Proyecto de ejemplo: Shorty (acortador de enlaces).
  • Dokploy ofrece plantillas de un clic vía Docker Compose: WordPress, Ghost, n8n, Uptime Kuma, etc.
  • En el video se salta el onboarding para desplegar código propio.

Explorar el dashboard

  • Monitoring: CPU, RAM, disco, almacenamiento de Docker, red e I/O en tiempo real.
  • Contenedores Docker: vista del estado de cada contenedor.

Crear el servicio

  1. En Shorty → Create Service → Application.
  2. Nombre: Node React Web app.

Conectar GitHub

  1. Settings → Git Providers.
  2. Agregar GitHub creando automáticamente una GitHub App.
  3. Dar permisos solo al repositorio del proyecto (shorty).

Configurar el despliegue

CampoValor
ProviderGitHub
CuentaLa del usuario
Repositorioshorty
Ramamain
Trigger TypeOn Push
Build TypeRailpack

On Push hace que cada push a main dispare un despliegue automático.


7️⃣ Primer despliegue, 502 y variables de entorno

  1. Pulsar Deploy y seguir los logs de compilación en tiempo real mientras Railpack prepara las capas.
  2. En Domains, asociar un dominio propio o generar uno temporal con sslip.io, apuntando al puerto interno 3000.

El error 502

Al abrir el dominio, la web devuelve 502 Bad Gateway.

Diagnóstico:

  • Ir a Logs de la aplicación.
  • Los contenedores se crean pero pasan a estado Exited inmediatamente.

Causa: faltan variables de entorno obligatorias para que la app arranque.

Solución:

  1. Ir a la pestaña Environment.
  2. Agregar las variables necesarias:
NODE_ENV=production
PORT=3000
  1. Pulsar Save.
  2. La app se reinicia; al recargar la URL, carga correctamente.

Lección de troubleshooting

502 + contenedor Exited casi siempre significa que el proceso murió al arrancar, no que el proxy esté mal. Revisar logs del contenedor antes de tocar Traefik.


8️⃣ Probar el flujo CI/CD

  1. En el editor local (Neovim), modificar Login.jsx y cambiar el título a "Hola Mundo Shorty".
  2. Con lazygit, hacer commit: "Nuevo título en pantalla de login".
  3. git push a main.
  4. En Dokploy, Deployments detecta el webhook de GitHub y muestra Running para el nuevo commit.
  5. Al terminar en verde (Done), recargar el navegador: el cambio ya está en producción.
push → webhook GitHub → build Railpack → deploy contenedor → SSL/Traefik → producción

9️⃣ Conclusión

Dokploy da las comodidades de un PaaS moderno:

  • Despliegues con git push
  • SSL automático
  • Proxy reverso
  • Soporte multi-servidor
  • Métricas

Sin tarifas elevadas por usuario o ancho de banda, sin vendor lock-in y sobre infraestructura propia.


⚠️ Notas prácticas

  • Seguridad del panel: el dashboard en :3000 debería quedar detrás de firewall/VPN o de un dominio con SSL y auth. No exponerlo abierto a Internet.
  • Backups: la PostgreSQL interna guarda credenciales y configuración; respaldarla es parte del plan.
  • Multi-servidor: Docker Swarm suma capacidad, pero también complejidad operativa (redes, volúmenes, estado).
  • Builds: vigilar RAM y disco durante compilaciones; limpiar imágenes huérfanas.
  • Dependencia del proveedor: aunque evitas el lock-in de Vercel/Heroku, dependes de tu VPS y de tu operación.
  • Plantillas: WordPress, Ghost, n8n y Uptime Kuma son atajos útiles para empezar; revisar sus requisitos y actualizaciones.

🔗 Enlaces relacionados