Guía de despliegue

Portainer vs Dokploy: ¿cuál desplegar en 2026?

Desplegar en un VPS Cloud →

Comparativa

Portainer vs Dokploy: ¿cuál desplegar en 2026?

Comparativas10 min de lectura10 pasos

Portainer y Dokploy son dos interfaces web para gestionar contenedores Docker en un VPS. Portainer es la herramienta histórica — estable, documentada, pero sacudida en 2026 por el fin de la edición Community y por CVEs con puntuación 9.4. Dokploy es el competidor de código abierto, listo para PaaS, que cubre exactamente lo que Portainer CE ya no ofrece. Esta guía resuelve la elección: arquitectura, licencias, seguridad, migración.

Contenido· Por qué autoalojar una interfaz de despliegue en un VPS1/14
  1. 01Por qué autoalojar una interfaz de despliegue en un VPS
  2. 02Lo que ganas al desplegar este template en tu VPS
  3. 03Portainer en 2026: el fin de la edición Community
  4. 04CVEs críticos de Portainer 2.x: verificar y parchear
  5. 05CVE de Dokploy: el secreto hardcoded (< 0.29.13)
  6. 06Prerequisitos para alojar Portainer o Dokploy
  7. 07Recursos mínimos recomendados
  8. 08Desplegar Dokploy en un VPS (≥ 0.29.13)
  9. 09Portainer como alternativa — instalación rápida
  10. 10Portainer 2.x vs Dokploy — comparativa completa 2026
  11. 11Cuándo quedarse en Portainer, cuándo pasar a Dokploy
  12. 12Migración de Portainer a Dokploy: pasos concretos
  13. 13Resolución de problemas: errores frecuentes
  14. 14Las dos herramientas no son siempre excluyentes

Por qué autoalojar una interfaz de despliegue en un VPS

Un VPS con Docker te deja una sola interfaz: la línea de comandos. Es suficiente para una máquina, tedioso para cinco e inmanejable para un equipo. Una interfaz web centraliza los logs, las actualizaciones de imágenes, las variables de entorno y los certificados TLS, sin obligarte a mantener un pipeline CI/CD completo desde el primer día.

Dos familias compiten: los gestores (Portainer, Yacht) que exponen Docker tal como es, y los PaaS ligeros (Dokploy, Coolify, CapRover) que añaden una capa de despliegue — ramas Git, dominios automáticos, certificados Let's Encrypt. La diferencia no es cosmética: determina si tus desarrolladores pueden desplegar solos o necesitan acceso SSH.

Lo que ganas al desplegar este template en tu VPS

  • Despliegue desde Git o Docker Hub en pocos clics, sin SSH
  • Gestión automática de certificados TLS mediante Let's Encrypt
  • Variables de entorno versionadas y aisladas por proyecto
  • Logs centralizados y terminal web desde el navegador
  • Panel de salud: CPU, RAM, estado de los contenedores
  • Gestión de volúmenes y redes Docker sin memorizar comandos

Portainer en 2026: el fin de la edición Community

Portainer CE (Community Edition) fue la referencia del sector durante seis años. En 2026, Portainer reestructuró su modelo de licencia: la edición Community queda limitada a Kubernetes o pasa a ser de pago (Portainer Business). Las instancias Portainer 2.x ya desplegadas siguen funcionando, pero CE ya no evoluciona.

Este cambio tiene varias consecuencias prácticas. Las nuevas instalaciones que buscan una interfaz Docker gratuita no encuentran una hoja de ruta clara para CE. Las imágenes portainer/portainer-ce:latest siguen existiendo y actualizándose, pero el canal comunitario ha perdido impulso. Y de forma crítica — Portainer 2.x ha acumulado dos CVEs con puntuación 9.4 que permanecen activos en cualquier instalación sin parchear.

Si todavía usas Portainer 2.x, la pregunta no es si migrar por principio: es si tu instancia está actualizada y si el riesgo es aceptable.

CVEs críticos de Portainer 2.x: verificar y parchear

Dos CVEs afectan a las versiones Portainer 2.33.0 a 2.40.x:

CVE-2026-44848 (CVSS 9.4) — Los endpoints /plugins/* no están protegidos por autenticación. Un atacante no autenticado puede consultar y modificar los plugins Docker de tu host a través de la API de Portainer.

CVE-2026-44849 (CVSS 9.4) — El mecanismo de restricciones Swarm puede ser eludido: un usuario de Portainer con derechos reducidos puede ejecutar acciones normalmente reservadas al administrador en un clúster Swarm.

Versiones corregidas: 2.33.8, 2.39.2, 2.41.0.

Para verificar tu versión:

docker exec portainer /app/portainer --version

Para actualizar:

docker pull portainer/portainer-ce:latest
docker stop portainer
docker rm portainer
docker run -d \
  --name=portainer \
  --restart=always \
  -p 8000:8000 -p 9443:9443 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest

Si estás por debajo de 2.33.8 o 2.39.2 según tu rama, actualiza antes de seguir usando la instancia. Portainer expuesto en internet sin este parche es un vector de intrusión directo en tu host Docker.

CVE de Dokploy: el secreto hardcoded (< 0.29.13)

Dokploy tampoco está exento de vulnerabilidades. CVE-2026-45631 (CVSS 10.0) afecta a las versiones anteriores a 0.29.13: un secreto de autenticación estaba hardcoded en el código fuente, permitiendo a cualquiera que conociera ese secreto autenticarse en cualquier instancia Dokploy.

Este CVE está corregido desde la versión 0.29.13. Para verificar y actualizar:

# Verificar la versión instalada
docker exec dokploy dokploy --version

# Actualizar mediante el script oficial
curl -sSL https://dokploy.com/install.sh | sh

Dokploy usa BETTER_AUTH_SECRET como clave de sesión. En una instalación anterior a 0.29.13, este valor era estático en el código. Tras actualizar, verifica que tu docker-compose.yml de Dokploy declara un valor aleatorio fuerte:

grep BETTER_AUTH_SECRET /etc/dokploy/docker-compose.yml

Si la variable está vacía o ausente, genera un nuevo valor y reinicia:

export BETTER_AUTH_SECRET=$(openssl rand -hex 32)

Prerequisitos para alojar Portainer o Dokploy

Ambas herramientas funcionan sobre Docker. Dokploy requiere algo más de recursos, ya que incluye una base de datos PostgreSQL y un proxy Traefik además del servicio principal.

Recursos mínimos recomendados

  • Portainer 2.x: 1 vCPU, 512 MB RAM, Docker 20+ — funciona en el VPS más pequeño
  • Dokploy: 2 vCPU, 2 GB RAM, Docker 24+ — PostgreSQL y Traefik añaden ~400 MB al arranque
  • Un dominio o subdominio apuntando a tu VPS (Dokploy lo necesita para los certificados automáticos)
  • Puertos 80 y 443 abiertos si usas Let's Encrypt vía Traefik (Dokploy)
  • Acceso SSH root o sudo para la instalación inicial

Desplegar Dokploy en un VPS (≥ 0.29.13)

  1. Instalación mediante el script oficial

    El método más sencillo y actualizado:

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

    El script instala Docker si es necesario, genera un docker-compose.yml en /etc/dokploy/, crea un BETTER_AUTH_SECRET aleatorio y arranca todo.

  2. Verificar el BETTER_AUTH_SECRET

    Tras la instalación, confirma que la variable se generó correctamente:

    grep BETTER_AUTH_SECRET /etc/dokploy/docker-compose.yml

    Deberías ver una cadena aleatoria de 64 caracteres. Si la variable está vacía, genera una nueva y reinicia:

    sed -i "s/BETTER_AUTH_SECRET=/BETTER_AUTH_SECRET=$(openssl rand -hex 32)/" /etc/dokploy/docker-compose.yml
    docker compose -f /etc/dokploy/docker-compose.yml up -d
  3. Acceder a la interfaz y crear la cuenta de administrador

    Dokploy escucha en el puerto 3000 por defecto. Abre http://<ip-de-tu-vps>:3000 en el navegador. La primera visita te invita a crear la cuenta de administrador. Hazlo inmediatamente — la interfaz es pública hasta que exista esta cuenta.

  4. Configurar tu dominio y activar HTTPS

    En los ajustes de Dokploy → Server → Domain, introduce tu FQDN (dokploy.tudominio.com). Traefik obtiene automáticamente un certificado Let's Encrypt vía ACME HTTP-01. Tu DNS debe apuntar al VPS antes de este paso.

  5. Actualizar Dokploy

    Dokploy expone un botón Update en sus ajustes, o usa el script:

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

    El script es idempotente: actualiza la imagen sin borrar tu configuración ni tus proyectos.

Portainer como alternativa — instalación rápida

Si prefieres quedarte con Portainer (instancia existente o elección deliberada), el comando de referencia:

docker run -d \
  --name=portainer \
  --restart=always \
  -p 9443:9443 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest

Acceso en https://<ip>:9443. Sustituye latest por 2.41.0 para fijar la versión y evitar actualizaciones silenciosas.

Portainer 2.x vs Dokploy — comparativa completa 2026

Desplace la tabla

CriterioPortainer 2.xDokploy
LicenciaCE gratuita (solo Docker)Código abierto (Apache 2.0)
Futuro CELimitado — CE 3.0 Kubernetes/pagoHoja de ruta activa, comunidad creciente
CVEs activosCVE-2026-44848 + 44849 (CVSS 9.4) si < 2.41.0CVE-2026-45631 (CVSS 10.0) si < 0.29.13
RAM mínima512 MB2 GB (PostgreSQL + Traefik incluidos)
Despliegue GitNo (solo imágenes Docker)Sí (GitHub, GitLab, Gitea, Bitbucket)
Certificados TLSManual (proxy inverso externo)Automático Let's Encrypt vía Traefik
Templates de appsSí (biblioteca integrada)Sí (Docker Compose importado)
Registro privadoSíSí
CI/CD integradoNoWebhooks Git + notificaciones
KubernetesSí (BE de pago)No (Docker Compose / Swarm)
Multi-servidorSí (endpoints)Sí (agentes remotos)
InterfazMadura y exhaustivaModerna, orientada a proyectos

Cuándo quedarse en Portainer, cuándo pasar a Dokploy

Quedarse en Portainer 2.x tiene sentido en tres situaciones: ya gestionas un clúster Docker Swarm o Kubernetes con configuraciones complejas; tienes equipos que dominan la interfaz con runbooks documentados; o necesitas el nivel de detalle sobre redes y volúmenes que Portainer expone de forma nativa.

En estos casos, la condición innegociable es estar en una versión parcheada (2.33.8, 2.39.2 o 2.41.0) y restringir el acceso a la interfaz: nunca expongas el puerto 9000/9443 directamente en internet, coloca Portainer detrás de un proxy inverso con autenticación adicional si usuarios no administradores acceden a él.

Migrar a Dokploy es la decisión correcta si: empiezas desde cero en un VPS nuevo; quieres que tus desarrolladores desplieguen desde Git sin SSH; gestionas múltiples dominios y no quieres mantener Nginx/Traefik manualmente; o buscas una alternativa tras el cambio de CE 3.0 para tu uso con Docker.

Migración de Portainer a Dokploy: pasos concretos

  1. Exportar tu inventario de Portainer

    Antes de migrar, lista tus stacks y contenedores activos:

    docker ps --format 'table {{.Names}}	{{.Image}}	{{.Status}}'
    docker volume ls
    docker network ls --filter driver=bridge

    Para cada stack de Portainer, obtén el docker-compose.yml desde la interfaz (Stacks → tu stack → Editor) o desde el sistema de archivos.

  2. Hacer copia de seguridad de los volúmenes de datos

    Los volúmenes con nombre contienen tus datos de aplicación. Hazles copia de seguridad antes de cualquier operación:

    docker run --rm \
      -v <nombre_volumen>:/data \
      -v $(pwd):/backup \
      alpine tar czf /backup/<nombre_volumen>.tar.gz /data

    Repite para cada volumen crítico.

  3. Instalar Dokploy en el mismo VPS o en uno dedicado

    Si migras en el mismo host, detén Portainer primero para liberar los puertos:

    docker stop portainer && docker rm portainer

    Luego ejecuta la instalación de Dokploy (ver procedimiento arriba). Dokploy usa Traefik en los puertos 80/443 — verifica que ningún otro servicio los ocupe.

  4. Recrear tus proyectos en Dokploy

    En Dokploy, crea un Compose Project para cada stack de Portainer:
    1. Proyectos → Nuevo proyecto
    2. Añade un servicio de tipo Docker Compose
    3. Pega tu docker-compose.yml o apunta a tu repositorio Git
    4. Configura las variables de entorno desde la pestaña Environment
    5. Asigna un dominio — Dokploy configura Traefik automáticamente

  5. Verificar y cambiar el DNS

    Despliega primero en un subdominio de prueba (test.tudominio.com). Una vez validado, actualiza tus entradas DNS para apuntar a Dokploy. Traefik emite los certificados automáticamente en cuanto el DNS se propaga.

Resolución de problemas: errores frecuentes

Portainer — interfaz inaccesible tras actualización
Verifica que el volumen portainer_data esté correctamente montado. Una actualización sin volumen con nombre parte de una base vacía y vuelve a solicitar la creación de la cuenta de administrador.

Portainer — TLS handshake error en el puerto 9443
Portainer genera un certificado autofirmado. Tu navegador avisa correctamente. Coloca Portainer detrás de un proxy inverso (nginx, Caddy) con un certificado real para acceso seguro en producción.

Dokploy — Traefik no genera un certificado
Causa más frecuente: el DNS aún no se ha propagado hacia el VPS. Verifica con dig +short tudominio.com. Traefik espera una respuesta DNS válida antes de lanzar el challenge ACME. Si el DNS es correcto, verifica que el puerto 80 esté abierto (ufw allow 80).

Dokploy — despliegue Git que falla silenciosamente
Revisa los logs del servicio en la interfaz (Deployments → pestaña Logs). El error más común es un BETTER_AUTH_SECRET ausente o una clave SSH no configurada para repositorios privados. Dokploy ofrece un botón Generate SSH Key en los ajustes del proyecto para repositorios privados de GitLab/GitHub.

Las dos herramientas no son siempre excluyentes

Portainer puede gestionar varios endpoints Docker remotos desde una sola interfaz — incluido un VPS donde esté instalado Dokploy. Algunos equipos mantienen Portainer como herramienta de observación y Dokploy como herramienta de despliegue. No es un antipatrón si los roles están claramente separados. El coste: dos superficies que parchear. Si has elegido esta arquitectura, asegúrate de que ambas herramientas están actualizadas — consulta los CVEs al inicio del artículo.

Para ir más lejos: alternativas a Portainer CE 3.0, guía completa de despliegue con Dokploy y la actualización crítica de CVE Dokploy 2026.

Despliega Dokploy en tu VPS en minutos

En un VPS de ServOrbit con acceso root, Dokploy se instala manualmente y configura Docker, Traefik y los certificados TLS. Instala una versión ≥ 0.29.13, parcheada y lista para producción.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva