Logotipo de Bitdoze

CloudPanel como proxy inverso: guía de configuración con Docker y Dockge

Configura CloudPanel como proxy inverso para Docker con Dockge. Guía paso a paso con la configuración del vhost de Nginx, SSL, reglas de firewall y refuerzo de la seguridad.

Dragos

Actualizado Publicado 37 min de lectura

CloudPanel como proxy inverso: guía de configuración con Docker y Dockge

CloudPanel es un panel de alojamiento ligero que gestiona aplicaciones PHP, Node.js y Python. Su función de proxy inverso te permite enrutar el tráfico hacia contenedores Docker que se ejecutan en el mismo VPS. Combínalo con Dockge, un gestor de Docker Compose para organizar y desplegar tus stacks de Docker, y tendrás un solo servidor que maneja tanto sitios alojados tradicionales como aplicaciones en contenedores.

Si solo necesitas un proxy inverso para contenedores Docker, herramientas como Nginx Proxy Manager o Traefik son más simples. Pero si también quieres alojar sitios PHP o Node.js junto a Docker, CloudPanel encaja muy bien. También hay otros paneles de servidor autoalojados que merece la pena comparar.

Probado con

CloudPanel CE v2.5.3 · Dockge v1.5.0 · Docker 29.x · Ubuntu 24.04 LTS

1. Requisitos previos

Antes de empezar, asegúrate de tener:

  • Un VPS con Ubuntu 24.04 LTS (o Ubuntu 22.04, Debian 12)
  • Mínimo 1 núcleo, 2 GB de RAM, 10 GB de disco
  • Un nombre de dominio con acceso al DNS (Cloudflare, Hetzner DNS, etc.)
  • Acceso SSH al servidor

Se admiten servidores ARM y x86_64.

2. Crear un servidor VPS

Recomiendo Hetzner para alojamiento en la UE (buena relación precio-rendimiento). Hostinger es una opción KVM económica y sólida. Para presencia global, DigitalOcean y Vultr funcionan bien. Para más detalles, consulta esta reseña de Hetzner y también puedes ver: DigitalOcean vs Vultr vs Hetzner

Los precios de los VPS subieron en todos los proveedores en 2026 — si estás reconsiderando alquilar un servidor, mira qué cambió y cuándo gana un mini PC.

DigitalOcean $100 gratis Vultr $100 gratis Hetzner €⁠20 gratis Hostinger VPS

Ubuntu 24.04 LTS es el SO recomendado para nuevas instalaciones.

3. Actualizar el servidor VPS

Actualiza siempre antes de instalar nada:

bash
apt update && apt -y upgrade && apt -y install curl wget sudo

Verifica la versión del SO:

bash
cat /etc/os-release

Deberías ver VERSION_ID="24.04" (o 22.04 / 12 en Debian).

4. Instalar CloudPanel

También he creado un curso que te ayudará a empezar con CloudPanel si eres principiante, consulta el Curso de configuración de CloudPanel

CloudPanel admite varios motores de base de datos. Elige el que prefieras:

MariaDB 10.11

bash
curl -sS https://installer.cloudpanel.io/ce/v2/install.sh -o install.sh; \
echo "6eac061df80f08b75224fcd7fce2f115e201696d8a6122e31abf7259a813b462 install.sh" | \
sha256sum -c && sudo CLOUD=hetzner DB_ENGINE=MARIADB_10.11 bash install.sh

MySQL 8.4

bash
curl -sS https://installer.cloudpanel.io/ce/v2/install.sh -o install.sh; \
echo "6eac061df80f08b75224fcd7fce2f115e201696d8a6122e31abf7259a813b462 install.sh" | \
sha256sum -c && sudo CLOUD=hetzner DB_ENGINE=MYSQL_8.4 bash install.sh

El checksum del instalador cambia

El checksum del instalador cambia con cada versión de CloudPanel. Si la verificación falla, obtén el checksum más reciente en la documentación oficial de instalación.

Sustituye CLOUD=hetzner por tu proveedor (o elimínalo para instalaciones genéricas). Motores de base de datos disponibles: MARIADB_10.11, MARIADB_11.4, MYSQL_8.0, MYSQL_8.4. La instalación tarda entre 5 y 10 minutos.

CloudPanel admite sitios PHP, Node.js y Python. Si necesitas alojar aplicaciones Node.js con CloudPanel, la misma instalación sirve.

Verificar:

bash
systemctl status cloudpanel

El servicio debería mostrar active (running). Puedes acceder al panel de administración en https://serverIP:8443.

Si el checksum falla: el script de instalación se actualizó desde la publicación. Obtén el más reciente en la documentación de instalación de CloudPanel.

5. Protege CloudPanel inmediatamente

Haz esto a los pocos minutos de la instalación

CloudPanel ha tenido múltiples problemas de seguridad, incluidos errores de escalada de privilegios corregidos en v2.5.0-v2.5.2. CVE-2025-15241 (redirección abierta en el panel de administración) se corrigió en v2.5.2. Las instancias sin parches son un objetivo fácil para los bots. Estas son las tres cosas que debes hacer inmediatamente después de la instalación.

1. Crea la cuenta de administrador ahora. Los bots buscan instancias de CloudPanel sin configurar y pueden crear el usuario administrador antes que tú. Abre https://serverIP:8443 y configura tu cuenta de administrador en cuestión de minutos.

2. Restringe el puerto 8443 a tu IP. Usa el firewall de CloudPanel o UFW desde la línea de comandos:

bash
# Permite 8443 solo desde tu IP (reemplázala por tu IP real)
ufw allow from YOUR_IP_ADDRESS to any port 8443
ufw deny 8443

O hazlo desde el panel de CloudPanel: Admin Area > Security > Add Rule para incluir tu IP en la lista blanca del puerto 8443.

3. Actualiza CloudPanel a la última versión:

bash
clp-update

Esto corrige CVE-2025-15241 (redirección abierta en /admin/users mediante manipulación de la cabecera Referer) y las vulnerabilidades de escalada de privilegios corregidas en v2.5.0-v2.5.2.

Verificar:

bash
clp-version

Debería mostrar v2.5.2 o posterior.

Para un refuerzo completo, consulta cómo securizar tu servidor CloudPanel y mantener CloudPanel actualizado con regularidad.

6. Crear un subdominio de administración

Para acceder a CloudPanel detrás de un dominio propio con SSL, crea un registro DNS A para un subdominio (p. ej., panel.example.com) que apunte a la IP de tu servidor. Si usas Cloudflare, el proxy (nube naranja) funciona bien aquí.

Luego añade el subdominio en el panel de CloudPanel bajo Settings para proteger el área de administración.

Verificar: Visita https://panel.example.com. Deberías ver la página de inicio de sesión de CloudPanel con un certificado SSL válido.

7. Instalar Docker y Docker Compose

El método antiguo de instalación de Docker (fijando jammy en la fuente de apt) falla en Ubuntu 24.04. Usa el método oficial actual con detección dinámica del nombre en clave de la versión:

Funciona en Ubuntu 22.04 y 24.04

Este método detecta tu versión de Ubuntu automáticamente. No hace falta fijar el nombre de la versión.

bash
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Para una referencia completa de los comandos de Docker, consulta los comandos esenciales de Docker. Todo se explica también en la guía para instalar Docker en Ubuntu.

Verificar:

bash
sudo docker run hello-world
sudo systemctl status docker
docker compose version

docker compose version debería mostrar algo como Docker Compose version v2.x.x. Si falla, probablemente instalaste el docker-compose independiente obsoleto en lugar de docker-compose-plugin.

Caso de fallo: Si no se encuentra docker compose, elimina el paquete independiente antiguo e instala el plugin:

bash
sudo apt remove docker-compose
sudo apt install docker-compose-plugin

8. Instalar Dockge

Dockge se instalará dentro del directorio htdocs de un sitio de CloudPanel. La ventaja: las copias de seguridad rClone de CloudPanel capturan automáticamente Dockge y todos tus stacks de Docker juntos. El inconveniente: la recomendación oficial de Dockge es /opt/stacks y /opt/dockge. Ambos enfoques funcionan. El enfoque con htdocs te da copias de seguridad integradas con CloudPanel, mientras que /opt/stacks mantiene todo en rutas estándar.

Si tienes activada la copia de seguridad externa de CloudPanel, respaldarás todas las aplicaciones y Dockge de una vez. Consulta copias de seguridad remotas de CloudPanel para la configuración.

Dockge se mantiene activamente

Tras un periodo tranquilo (el mantenedor priorizó Uptime Kuma 2.0), Dockge v1.5.0 se publicó en marzo de 2025 con correcciones de seguridad, incluida la consola desactivada por defecto. El proyecto tiene más de 23k estrellas en GitHub y no está abandonado.

8.1 Crear un sitio de proxy inverso en CloudPanel

En Sites > Add Site elige Create a Reverse Proxy.

CloudPanel: crear un proxy inverso

Añade el dominio que quieras usar para Dockge, crea un usuario con contraseña y configura el puerto. Yo uso el puerto 5000 (host) que corresponde al puerto interno 5001 de Dockge. Puedes personalizarlo.

CloudPanel: crear un proxy inverso

8.2 Crear directorios para Dockge

Conéctate por SSH a tu servidor y navega al directorio del sitio de CloudPanel:

bash
cd /home/<user>/htdocs/<website>/
# Ejemplo:
cd /home/bitdoze-dockge/htdocs/dockge.bitdoze.com/

Sustituye <user> y <website> por los valores del paso 8.1.

Crea los directorios:

bash
mkdir dockge-stacks
mkdir dockge
  • dockge: los datos propios de Dockge y su archivo compose
  • dockge-stacks: donde vivirán todos tus stacks de aplicaciones Docker

Ventaja de las copias de seguridad

Guardar los stacks dentro del htdocs de CloudPanel significa que las copias de seguridad rClone de CloudPanel incluyen todas tus aplicaciones Docker automáticamente. Si prefieres la estructura oficial /opt/stacks de Dockge, ajusta los montajes de volúmenes en el archivo compose en consecuencia.

8.3 Desplegar Dockge con Docker Compose

Crea un archivo compose.yaml dentro del directorio dockge:

yaml
services:
  dockge:
    image: louislam/dockge:1
    restart: unless-stopped
    ports:
      - 5000:5001  # Host:Contenedor, ajusta el puerto del host según necesites
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data:/app/data
      - /home/<user>/htdocs/<website>/dockge-stacks:/home/<user>/htdocs/<website>/dockge-stacks
    environment:
      # Indica a Dockge dónde encontrar los stacks
      - DOCKGE_STACKS_DIR=/home/<user>/htdocs/<website>/dockge-stacks
      # Define la propiedad de los archivos de stack (opcional pero recomendado)
      # - PUID=1000
      # - PGID=1000
      # La consola está desactivada por defecto desde v1.5.0 por seguridad.
      # Actívala solo si entiendes el riesgo:
      # - DOCKGE_ENABLE_CONSOLE=true

Sustituye las rutas y el puerto por tus valores reales. Aquí tienes un ejemplo concreto:

yaml
services:
  dockge:
    image: louislam/dockge:1
    restart: unless-stopped
    ports:
      - 5000:5001
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data:/app/data
      - /home/bitdoze-dockge/htdocs/dockge.bitdoze.com/dockge-stacks:/home/bitdoze-dockge/htdocs/dockge.bitdoze.com/dockge-stacks
    environment:
      - DOCKGE_STACKS_DIR=/home/bitdoze-dockge/htdocs/dockge.bitdoze.com/dockge-stacks

El generador de compose de Dockge puede ayudarte a crear el archivo compose exacto.

Dockge v1.5.0 desactivó la consola web por defecto

La terminal integrada (Console) ahora está desactivada por defecto por motivos de seguridad. Para reactivarla, añade DOCKGE_ENABLE_CONSOLE=true en la sección environment. Actívala solo si entiendes el riesgo. La edición de compose funciona bien sin ella.

Inicia Dockge:

bash
cd /home/<user>/htdocs/<website>/dockge
docker compose up -d

Verificar:

bash
docker compose ps
curl -I http://localhost:5001

El contenedor debería mostrar running y curl debería devolver HTTP/1.1 200 OK.

8.4 Apuntar el dominio a Dockge

En tu proveedor de DNS, crea un registro A para el subdominio de Dockge (p. ej., dockge.example.com) que apunte a la IP de tu servidor.

8.5 Crear un certificado SSL

En CloudPanel, ve a Sites > Manage Site > SSL/TLS y genera un certificado de Let’s Encrypt.

Verificar: Visita https://dockge.example.com. Deberías ver la interfaz de Dockge con un candado en el navegador.

Nota: CloudPanel v2.5.0 corrigió un error por el que el directorio .well-known se eliminaba durante la renovación de SSL. Si tuviste problemas con la renovación del certificado en versiones anteriores, actualizar CloudPanel debería resolverlo.

8.6 Acceder a Dockge y crear el usuario administrador

La primera vez que accedas a Dockge se te pedirá crear un nombre de usuario y una contraseña. Hazlo de inmediato.

8.7 Abrir los puertos del firewall de CloudPanel

El firewall de CloudPanel bloquea la mayoría de los puertos por defecto (solo están abiertos 22, 80, 443 y 8443). Si necesitas acceso directo a puertos para aplicaciones Docker que no pasan por el proxy inverso de CloudPanel, abre los rangos de puertos:

Ve a Admin Area > Security > Add Rule y abre los rangos que necesites:

Puertos abiertos en CloudPanel

Esto es opcional si todas tus aplicaciones pasan por el proxy inverso de CloudPanel (que es el enfoque recomendado).

9. Proteger la configuración del proxy inverso

La configuración por defecto del proxy inverso de CloudPanel usa try_files $uri @reverse_proxy;, lo que puede exponer archivos de los stacks como .env y otros secretos. La configuración mejorada de abajo corrige eso, además de añadir soporte para WebSocket y las cabeceras de proxy adecuadas.

9.1 Configuración mejorada del proxy de Nginx

En CloudPanel, ve a Sites > Select your site > Vhost Editor. Sustituye el bloque de proxy por defecto por:

nginx
location / {
  proxy_pass {{reverse_proxy_url}};
  proxy_http_version 1.1;
  proxy_set_header X-Forwarded-Host $host;
  proxy_set_header X-Forwarded-Server $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header Host $http_host;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "Upgrade";
  proxy_pass_request_headers on;
  proxy_max_temp_file_size 0;
  proxy_connect_timeout 900;
  proxy_send_timeout 900;
  proxy_read_timeout 900;
  proxy_buffer_size 128k;
  proxy_buffers 4 256k;
  proxy_busy_buffers_size 256k;
  proxy_temp_file_write_size 256k;
}

Cabeceras clave explicadas:

  • X-Forwarded-Proto $scheme: indica a la aplicación backend si la petición original llegó por HTTP o HTTPS. Sin esto, las aplicaciones detrás del HTTPS de CloudPanel pueden generar enlaces inseguros.
  • Upgrade / Connection "Upgrade": habilita el soporte de WebSocket para aplicaciones en tiempo real (chat, paneles en vivo, las actualizaciones de la propia interfaz de Dockge).
  • Los ajustes de búfer y tiempo de espera evitan problemas con subidas grandes y conexiones de larga duración.

Por qué es importante

Con la configuración por defecto, los archivos dentro de los directorios de stacks de Dockge (como los archivos .env con contraseñas de base de datos) pueden accederse directamente desde el navegador. Esta configuración mejorada enruta todas las peticiones a través del proxy inverso, impidiendo el acceso directo a los archivos.

9.2 Proteger archivos sensibles

Para una capa extra de protección, añade este bloque a tu configuración de Vhost:

nginx
# Protege los archivos sensibles
location ~* \.(php|sql|log|config|env)$ {
    deny all;
}

Esto bloquea el acceso directo a archivos con extensiones como .php, .sql, .log, .config y .env, que a menudo contienen credenciales o datos de configuración.

9.3 Añadir autenticación básica

Para una capa adicional de seguridad en tus sitios de Dockge o aplicaciones:

  1. Ve al panel de administración de CloudPanel
  2. Navega a Sites > Select your site > Security
  3. Añade un nombre de usuario y una contraseña para la autenticación básica

Se pedirán credenciales a los usuarios antes de acceder a la aplicación.

10. Despliega tu primera aplicación

Ya está todo listo. Accede a Dockge y empieza a desplegar aplicaciones.

Añadir compose en Dockge

A continuación tienes algunas aplicaciones que puedes desplegar en Dockge:

Para cada aplicación, el flujo de trabajo es:

  1. Crea un proxy inverso en CloudPanel: igual que hiciste para Dockge, crea un sitio como Reverse Proxy con el dominio y el puerto de la aplicación
  2. Apunta el dominio al servidor: añade un registro A en tu proveedor de DNS
  3. Crea un certificado SSL: ve a CloudPanel en Sites > Manage Site > SSL/TLS y genera un certificado de Let’s Encrypt

11. Copias de seguridad

Configura las copias de seguridad antes de desplegar aplicaciones en producción, no después.

Activa las copias de seguridad externas rClone de CloudPanel hacia S3, Dropbox, Google Drive o cualquier almacenamiento remoto. Ve a Admin Area > Backups y configura la integración con rClone.

Si tus stacks se guardan dentro del directorio htdocs (el enfoque de esta guía), se incluyen automáticamente en las copias de seguridad de CloudPanel. Si usas /opt/stacks, necesitas una estrategia de copias de seguridad independiente.

Consulta copias de seguridad remotas de CloudPanel para la configuración detallada.

Si estás en Hetzner, también puedes activar los snapshots de Hetzner para copias de seguridad a nivel de servidor.

También he creado un curso que te ayudará a empezar con CloudPanel si eres principiante, consulta el Curso de configuración de CloudPanel

12. Solución de problemas

La verificación del checksum falla durante la instalación de CloudPanel

El script de instalación y el checksum cambian con cada versión de CloudPanel. Si la verificación falla, vuelve a obtener el checksum más reciente de la documentación de instalación de CloudPanel y reemplázalo en el comando de instalación.

El daemon de Docker no arranca tras la instalación

Comprueba si hay paquetes conflictivos del repositorio por defecto de Ubuntu:

bash
sudo systemctl status docker

Si Docker no arranca, elimina el paquete conflictivo docker.io:

bash
sudo apt remove docker.io
sudo systemctl start docker
sudo systemctl enable docker

Verifica: sudo docker run hello-world

No se puede acceder a Dockge mediante el dominio

Comprueba esto en orden:

  1. El DNS se ha propagado: dig +short yourdomain.com debería devolver la IP de tu servidor
  2. El firewall de CloudPanel tiene el puerto abierto (si usas acceso directo por puerto)
  3. El contenedor de Dockge está en ejecución: docker compose ps
  4. El mapeo de puertos en compose.yaml coincide con el puerto de la configuración del proxy inverso de CloudPanel
  5. El certificado SSL está emitido: compruébalo en Sites > Manage Site > SSL/TLS
El certificado SSL no se emite
  • El DNS debe estar completamente propagado antes de solicitar un certificado (compruébalo con dig)
  • El directorio .well-known debe ser accesible desde internet
  • Si usas Cloudflare con el proxy activado (nube naranja), desactívalo temporalmente para la emisión del certificado y luego reactívalo
  • CloudPanel v2.5.0 corrigió un error por el que .well-known se eliminaba durante la renovación. Asegúrate de estar en la última versión.
Los stacks de Dockge aparecen como 'not managed' tras actualizar

Verifica que la variable de entorno DOCKGE_STACKS_DIR de tu compose.yaml coincida con la ruta real donde están tus stacks. Luego reinicia Dockge:

bash
docker compose restart
Los bots crearon la cuenta de administrador antes que yo

Esto ocurre cuando el puerto 8443 está abierto al mundo y tardas en crear la cuenta de administrador. Hay dos opciones:

  1. Si aún no has configurado nada: reinstala CloudPanel y crea la cuenta de administrador en cuestión de minutos
  2. Si necesitas recuperarla: restringe el puerto 8443 a tu IP de inmediato y luego consulta las opciones de recuperación de CloudPanel en su documentación

Consulta la sección 5 para saber cómo evitarlo.

13. Alternativas a CloudPanel + Dockge

Esta configuración funciona bien cuando necesitas sitios PHP/Node.js junto a contenedores Docker en el mismo VPS. Pero si tu carga de trabajo es puramente Docker, hay opciones más simples:

Stack Ideal para Inconveniente
CloudPanel + Dockge (esta guía) Sitios PHP/Node + Docker en el mismo VPS Panel de código cerrado; su historial de seguridad requiere atención
Dokploy Aplicaciones nativas de Docker con proxy inverso integrado Sin alojamiento PHP/Node fuera de Docker
Coolify Sustituto PaaS completo para ambos Mayor consumo de recursos
Nginx Proxy Manager Solo proxy inverso simple Sin gestión de sitios ni gestor de archivos

Si estás evaluando herramientas de gestión de Docker en concreto, consulta las alternativas a Portainer como Dockge para una comparación más profunda. Para una visión más amplia de los paneles, mira la comparativa de paneles de servidor autoalojados.

Preguntas frecuentes

¿Puedo usar CloudPanel con Docker en servidores ARM?

Sí, tanto CloudPanel como Dockge admiten ARM y x86_64. Usa Ubuntu 24.04 ARM64 en proveedores como Hetzner (instancias CAX) o el nivel gratuito de Oracle Cloud.

¿Por qué no usar simplemente Nginx Proxy Manager o Traefik en lugar de CloudPanel?

CloudPanel te da un gestor de archivos, alojamiento PHP/Node.js, gestión de bases de datos, cron jobs y firewall, además del proxy inverso. Si solo necesitas un proxy inverso para aplicaciones Docker, Nginx Proxy Manager o Traefik son más simples y con menos partes móviles. Si también alojas sitios PHP, CloudPanel encaja mejor.

¿Es seguro ejecutar Docker junto a CloudPanel?

Sí, pero mantén CloudPanel actualizado con clp-update. CloudPanel gestiona Nginx en el host; los contenedores Docker se ejecutan de forma aislada. El riesgo principal son las instancias de CloudPanel sin parches, no la coexistencia con Docker en sí.

¿Cómo actualizo Dockge?

Navega al directorio compose de Dockge y descarga la última imagen:

bash
cd /home/<user>/htdocs/<website>/dockge
docker compose pull
docker compose up -d

Dockge mostrará una notificación de actualización en la interfaz cuando haya una nueva versión disponible.

¿La copia de seguridad de CloudPanel incluye mis stacks de Docker?

Solo si guardas los stacks dentro del directorio htdocs de CloudPanel (el enfoque de esta guía). Si usas /opt/stacks, necesitas una estrategia de copias de seguridad independiente para tus datos de Docker.