Por qué elegir CapRover en lugar de un PaaS en la nube
Desplegar en un VPS sin preparar obliga a configurar manualmente Nginx, los certificados TLS, Docker y los reinicios en cada release. CapRover elimina esa fricción: se apoya en Docker Swarm para orquestar sus contenedores, genera los certificados Let's Encrypt y ofrece un despliegue mediante git push o con una imagen Docker precompilada. Su catálogo «One-Click Apps» cubre WordPress, PostgreSQL, Redis, MongoDB, Ghost y más de un centenar de servicios adicionales, cada uno en su propio contenedor. Donde Heroku o Render facturan por dyno o por hora de cómputo, CapRover funciona en su VPS al precio fijo mensual de su servidor — es la opción natural para los desarrolladores y las agencias que quieren la productividad de un PaaS sin sufrir su factura variable.
Las ventajas concretas de CapRover
- Despliegue mediante
git pushocaprover deploysin reconfigurar el servidor en cada release. - SSL Let's Encrypt automático y renovado para cada dominio y subdominio de aplicación.
- Catálogo One-Click: más de 100 servicios (bases de datos, CMS, herramientas DevOps) en unos pocos clics.
- Escalado horizontal nativo mediante Docker Swarm: añada nodos worker sobre la marcha sin modificar sus aplicaciones.
- Interfaz web con logs en directo, variables de entorno, persistencia de datos y monitorización con Netdata.
- Webhooks de compilación integrables con GitHub Actions, GitLab CI o Bitbucket para un CI/CD completo.
- Actualización de CapRover desde el panel en un clic, sin tocar el servidor.
Requisitos de hardware y de red
CapRover reserva RAM para Docker Swarm y para su motor de compilación. Un VPS de 2 GB de RAM y 1 vCPU basta para proyectos personales y algunas aplicaciones pequeñas; suba a 4 GB de RAM y 2 vCPU en cuanto aloje varias aplicaciones con sus bases de datos. Prevea 30 GB de SSD como mínimo, porque cada compilación Docker consume espacio temporal. Se recomienda encarecidamente un dominio wildcard — por ejemplo *.apps.votredomaine.com — para que CapRover genere subdominios sobre la marcha para cada aplicación. Los puertos 80, 443 y 3000 (panel de administración) deben estar abiertos. Desde la versión 1.14, CapRover requiere Docker con una versión de API 1.43 como mínimo; la versión 1.14.1 corrige un problema de compatibilidad introducido por Docker v29, que había elevado ese mínimo a 1.44. Compruebe su versión con docker version | grep API antes de cualquier actualización.
Instalar CapRover y desplegar su primera aplicación
Lanzar la instalación con un solo comando
En un Ubuntu limpio y sin Docker preinstalado, ejecute
docker run -p 80:80 -p 443:443 -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock -v /captain:/captain caprover/caprover. CapRover inicializa Docker Swarm y arranca su panel de administración en el puerto 3000. La imagen Docker lo instala todo automáticamente — no hay ninguna dependencia que preinstalar.Configurar el dominio wildcard
Cree un registro DNS de tipo
Awildcard que apunte*.apps.votredomaine.coma la IP de su VPS. En el panel de administración (http://VOTRE_IP:3000), indique ese dominio raíz. CapRover lo utiliza como sufijo para todas sus aplicaciones y activa HTTPS mediante Let's Encrypt en un clic.Instalar la CLI e iniciar sesión
En su equipo de desarrollo:
npm install -g caprovery despuéscaprover login. Indique la URLhttps://captain.apps.votredomaine.comy la contraseña definida en el paso anterior. La CLI memoriza la conexión para los despliegues siguientes. Si ha activado la autenticación de dos factores, utilice un token de aplicación en lugar de la contraseña.Preparar el archivo captain-definition
Añada un archivo
captain-definitionen la raíz de su proyecto. El formato v2 (recomendado) se reduce a dos líneas:{ "schemaVersion": 2, "dockerfilePath": "./Dockerfile" }. Para desplegar una imagen Docker precompilada en lugar de compilar desde el código fuente, sustituyadockerfilePathpor"imageName": "votre-image:tag". El formato v1 condockerfileLinessigue soportado, pero se considera legacy.Crear la aplicación y desplegar
En el panel, cree una aplicación llamada
mon-api. Después, desde su repositorio Git:caprover deploy. CapRover construye la imagen según sucaptain-definition, la envía a Docker Swarm y expone la aplicación enhttps://mon-api.apps.votredomaine.com. Para un despliegue sin cortes, CapRover conmuta el tráfico solo después de que el nuevo contenedor responda a los health checks.Añadir una base de datos y persistir los datos
Desde la pestaña One-Click Apps, instale PostgreSQL. CapRover crea la base de datos en un contenedor dedicado y genera las variables de entorno (
POSTGRES_PASSWORD,POSTGRES_HOST…). Vincule su aplicación mediante esas variables en la pestaña «App Configs» y active después un Persistent Directory en la pestaña homónima para que los datos sobrevivan a los redespliegues. Los volúmenes se almacenan en/var/lib/docker/volumes/captain--NOM_DU_VOLUME/_dataen el host.
Integrar CapRover en un pipeline CI/CD de GitHub Actions
CapRover expone un webhook de compilación por aplicación, accesible en la pestaña «Deployment» de cada app. Ese webhook desencadena un despliegue completo en cada llamada HTTP POST. Para integrarlo con GitHub Actions, guarde tres secretos en su repositorio: CAPROVER_SERVER (la URL de su instancia), APP_NAME (el nombre de la aplicación en CapRover) y APP_TOKEN (el token de despliegue que se muestra en la pestaña Deployment). Hay una acción oficial disponible en el GitHub Marketplace (caprover/deploy-from-github): se encarga de construir el tar de despliegue y de enviarlo a CapRover en un solo paso. Ejemplo de job mínimo: después de un npm run build que produce una carpeta dist/, cree un archivo comprimido que contenga dist/ y su captain-definition, y a continuación invoque la acción con sus tres secretos. La combinación de webhook y GitHub Actions sustituye con ventaja a la CLI local en los equipos: un push a main desencadena un despliegue automático y ninguna clave de acceso al servidor circula entre los desarrolladores.
Pasar a un clúster multinodo con Docker Swarm
CapRover se apoya de forma nativa en Docker Swarm: añadir capacidad se hace desde el panel sin reconfigurar sus aplicaciones. En el menú «Cluster», introduzca la IP del nuevo nodo, la clave SSH root asociada y la IP de su nodo maestro tal como se ve desde ese nuevo nodo. CapRover instala Docker en el destino y lo integra en el Swarm. Una restricción importante: el clúster necesita un registro Docker privado configurado por defecto, porque el nodo maestro debe poder enviar las imágenes construidas a los nodos worker. CapRover propone desplegar uno automáticamente. Otra restricción que conviene conocer: las aplicaciones con un Persistent Directory activado solo pueden ejecutarse en un único nodo (Docker Swarm no comparte los volúmenes de archivos entre hosts). Para escalar una aplicación con estado, opte por una base de datos externa o por un servicio de almacenamiento de objetos.
Hacer copias de seguridad de su instancia CapRover
CapRover ofrece una copia de seguridad nativa desde el panel: «Settings → Export Backup». El archivo generado contiene la configuración de todas sus aplicaciones, las variables de entorno y los parámetros de Nginx. No contiene los datos de los volúmenes persistentes. Para respaldar una base de datos PostgreSQL alojada mediante One-Click, el método recomendado es un pg_dump planificado con cron, con archivado hacia un almacenamiento externo. Los volúmenes Docker están accesibles en /var/lib/docker/volumes/; una copia de esas carpetas, con la base de datos detenida, constituye una copia de seguridad de bajo nivel. Pruebe siempre la restauración en un VPS de staging antes de confiar en una copia de seguridad en producción.
Resolución de problemas: los errores más habituales
Estos son los mensajes de error realmente encontrados en las issues de GitHub y en los foros de CapRover, con sus causas y sus correcciones.
Errores frecuentes y sus correcciones
502 Bad Gatewayen el panel o en una aplicación después del despliegue. Causa más frecuente: la aplicación no se enlaza al puerto correcto. Compruebe el campocontainerHttpPorten App Configs (debe corresponder al puerto en el que escucha su aplicación). En las aplicaciones que arrancan despacio, CapRover puede activar el contenedor antes de que esté listo: aumente el plazo del health check o añada un archivoCHECKSen la raíz del proyecto. Si el 502 afecta al panel en sí después de reiniciar el VPS, espere 60 segundos — el serviciocaptain-captainse reinicializa al arrancar.App build failed/Build took too long. El builder de Docker fue eliminado por el OOM killer (memoria insuficiente). Añada 2 GB de swap:fallocate -l 2G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile. Para que el swap sea persistente, añada/swapfile swap swap defaults 0 0en/etc/fstab. En una compilación Node.js, paseNODE_OPTIONS=--max-old-space-size=512en las variables de entorno para limitar la huella de memoria.Error: minimum supported Docker API is 1.43(o 1.44). Docker v29 elevó el mínimo requerido y rompió las instancias de CapRover anteriores a la 1.14.1. Actualice CapRover desde el panel (Settings → Check for Updates) antes de actualizar Docker o, a la inversa, actualice CapRover primero si Docker ya está en v29.Verification Faileddurante la configuración del SSL. Los registros DNS aún no se han propagado, o el puerto 80 está bloqueado por un cortafuegos. Compruebe la apertura de los puertos conufw statusy espere la propagación DNS condig +short *.apps.votredomaine.com. Cloudflare en modo proxy naranja bloquea Let's Encrypt en HTTP-01: ponga el DNS en gris (DNS-only) durante la generación del certificado, o utilice un certificado wildcard en DNS-01.caprover loginfalla conECONNREFUSED. El puerto 3000 no es accesible desde su equipo. Compruebeufw allow 3000en el servidor. Si todavía no tiene un dominio captain configurado, apunte directamente a la IP:http://VOTRE_IP:3000. Una vez configurado el dominio raíz en el panel, la URL de la CLI pasa a serhttps://captain.apps.votredomaine.com.- Despliegue desde GitHub en bucle infinito (restart loop). Causado por un
captain-definitionausente o mal formado, o por un Dockerfile que no termina correctamente. Compruebe los logs de la compilación desde el panel o condocker service logs captain--mon-app. UnCMDausente en el Dockerfile hace que el contenedor salga de inmediato, algo que CapRover interpreta como un fallo.
Asegure el puerto 3000 limitándolo a su IP fija: ufw allow from VOTRE_IP to any port 3000 && ufw deny 3000. Active la autenticación de dos factores en el panel (Settings → Two-Factor Auth) y genere un token de aplicación por proyecto para el CI/CD — nunca la contraseña de administrador en una variable de GitHub. Para las compilaciones que consumen mucha RAM, dimensione primero el swap en lugar de subir de plan: 2 GB de swap en un VPS de 2 GB de RAM bastan para la mayoría de los stacks Node/Python. Active Netdata (disponible en One-Click Apps) para vigilar CPU, RAM y red desde el panel de CapRover sin herramienta externa.
CapRover frente a las alternativas PaaS de código abierto
Desplace la tabla
| Criterio | CapRover | Dokku | Coolify |
|---|---|---|---|
| Interfaz web | Sí, completa | No (solo CLI) | Sí, completa |
| Despliegue | CLI, webhook, imagen | `git push` | Git, Docker, imagen |
| Orquestación | Docker Swarm | Docker (standalone) | Docker (standalone) |
| Clúster multinodo | Sí (Swarm nativo) | No | Parcial (experimental) |
| Catálogo One-Click | 100+ apps | Plugins CLI | 50+ plantillas |
| RAM mínima del VPS | 2 GB | 1 GB | 2 GB |
| Actualizaciones desde el panel | Sí | Mediante CLI/script | Sí |
Desplegar CapRover en un clic desde el Marketplace de ServOrbit
ServOrbit ofrece CapRover directamente en su Marketplace: un VPS Ubuntu 24.04 con Docker preinstalado, Docker Swarm inicializado y el contenedor caprover/caprover arrancado en menos de 60 segundos. Desde tu panel, abre Marketplace → Despliegue → CapRover, haz clic en Desplegar, y el panel de administración responde en el puerto 3000 en cuanto finaliza el aprovisionamiento.
La contraseña de inicio de sesión por defecto es captain42 — cámbiala inmediatamente en Ajustes → Captain Settings. La configuración del dominio comodín (necesario para las apps desplegadas mediante CapRover) se hace desde el mismo panel, en pocos clics.