CloudPanel es un panel de control de hosting gratuito basado en NGINX, PHP-FPM y MySQL o MariaDB, pensado para servir sitios PHP, Node.js, Python y estáticos con poco consumo de recursos. En este tutorial instalarás CloudPanel en un servidor Ubuntu 24.04 limpio, protegerás el acceso al panel, crearás un sitio PHP con su base de datos y su certificado de Let's Encrypt y verás cómo hacer lo mismo desde la línea de comandos con clpctl.

Requisitos previos

  • Un servidor recién instalado con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath. CloudPanel instala y configura su propio NGINX, PHP y base de datos, así que no lo instales sobre un servidor que ya aloje servicios. Solo funciona en máquinas virtuales o servidores físicos, no en contenedores LXC u OpenVZ.
  • Al menos 1 vCPU, 2 GB de RAM y 10 GB de disco, según los requisitos oficiales. Para varios sitios con tráfico, cuenta con 4 GB de RAM o más.
  • Acceso como root o con un usuario con privilegios sudo.
  • Un dominio (your_domain) con un registro DNS A que apunte a la IP pública del servidor, para el sitio de ejemplo y su certificado.
  • La IP pública desde la que administrarás el panel (your_ip).

Paso 1: Preparar el servidor

Actualiza el sistema antes de instalar para que el instalador parta de paquetes al día:

sudo apt update
sudo apt -y upgrade

Si la actualización ha instalado un kernel nuevo, reinicia:

[ -f /var/run/reboot-required ] && sudo reboot

Comprueba la versión del sistema y que el puerto 80 no esté ocupado por otro servidor web:

lsb_release -ds
sudo ss -tlnp | grep -E ':(80|443)\s' || echo "Puertos 80 y 443 libres"
Ubuntu 24.04.3 LTS
Puertos 80 y 443 libres

Paso 2: Ejecutar el instalador de CloudPanel

CloudPanel se instala con un script oficial. Para asegurarte de que el archivo descargado no ha sido alterado, compáralo con la suma SHA-256 que publica el proyecto en su página de instalación (cloudpanel.io/docs/v2/getting-started/other). La suma cambia con cada versión del instalador, así que cópiala de allí.

Descarga el instalador:

curl -sS https://installer.cloudpanel.io/ce/v2/install.sh -o install.sh

Verifica la suma. Sustituye checksum_from_docs por el valor publicado:

echo "checksum_from_docs  install.sh" | sha256sum -c
install.sh: OK

Si ves FAILED, no ejecutes el script: vuelve a descargarlo y comprueba de nuevo la suma en la documentación.

Elige el motor de base de datos con la variable DB_ENGINE. En Ubuntu 24.04 las opciones son MYSQL_8.4, MYSQL_8.0, MARIADB_12.3, MARIADB_11.4 y MARIADB_10.11. Esta guía usa MySQL 8.4:

sudo DB_ENGINE=MYSQL_8.4 bash install.sh

La instalación tarda entre 5 y 15 minutos según el servidor. Al terminar, el instalador muestra la URL de acceso al panel.

Comprueba que los servicios principales están en marcha:

systemctl is-active nginx mysql
active
active

Paso 3: Crear el usuario administrador

Hasta que creas el primer usuario, cualquiera que llegue al panel puede hacerlo, y hay bots que buscan instalaciones recién terminadas. Hazlo en cuanto acabe el instalador.

Abre https://your_server_ip:8443 en el navegador. CloudPanel usa de momento un certificado autofirmado: acepta el aviso con Avanzado y Continuar.

Rellena el formulario con tu nombre de usuario, correo y una contraseña robusta, y acepta los términos. Tras crear la cuenta entrarás directamente al panel.

Activa la autenticación en dos pasos desde el menú de tu usuario, en Account (arriba a la derecha), con una aplicación TOTP como Aegis, Google Authenticator o 1Password.

Paso 4: Proteger el acceso al panel

CloudPanel incluye un firewall integrado basado en UFW, que se gestiona desde el propio panel. Viene con reglas para los puertos 22 (SSH), 80 y 443 (web) y 8443 (panel) abiertos a cualquier origen.

Entra en Admin Area con el botón de la barra superior y abre Security. En la pestaña Firewall:

  1. Edita la regla del puerto 8443 y cambia Source de 0.0.0.0/0 a your_ip/32.
  2. Si tu IP es fija, haz lo mismo con el puerto 22.
  3. Guarda los cambios.

Comprueba desde SSH que las reglas se han aplicado:

sudo ufw status

En la salida, la regla del puerto 8443 debe mostrar tu IP en la columna From en lugar de Anywhere.

Si tu IP cambia con frecuencia y no puedes cerrar el puerto 8443, activa en su lugar Basic Auth en la pestaña del mismo nombre de Security. Añade una segunda contraseña delante del formulario de inicio de sesión.

Paso 5: Crear un sitio PHP

Vuelve al área principal con el botón de la barra superior y pulsa Add Site. Elige Create a PHP Site y completa el formulario:

  • Application: Generic para una aplicación PHP propia, o la plantilla de tu aplicación (WordPress, Laravel, etc.).
  • Domain Name: your_domain.
  • PHP Version: la versión que necesite tu aplicación, por ejemplo 8.4.
  • Site User y Site User Password: un usuario del sistema propio para este sitio. Sus archivos quedan aislados de los del resto de sitios.

Pulsa Create. CloudPanel crea el usuario, el virtual host de NGINX y el pool de PHP-FPM. Los archivos del sitio van en:

/home/site_user/htdocs/your_domain

Crea una página de prueba como el usuario del sitio para confirmar que PHP funciona. Sustituye site_user por el nombre que has elegido:

echo '<?php echo "PHP " . PHP_VERSION . " en CloudPanel\n";' | sudo -u site_user tee /home/site_user/htdocs/your_domain/index.php

Consulta el sitio desde el propio servidor, sin depender aún del DNS:

curl -s -H "Host: your_domain" http://127.0.0.1/
PHP 8.4.13 en CloudPanel

Paso 6: Emitir el certificado de Let's Encrypt

Con el registro DNS A apuntando al servidor, abre el sitio en el panel, ve a la pestaña SSL/TLS y, en Actions, elige New Let's Encrypt Certificate. Añade www.your_domain si también quieres cubrirlo (y tiene su propio registro DNS) y pulsa Create and Install.

Comprueba el resultado desde cualquier equipo:

curl -I https://your_domain
HTTP/2 200
server: nginx
content-type: text/html; charset=UTF-8

CloudPanel renueva automáticamente los certificados de Let's Encrypt antes de que caduquen.

Paso 7: Crear una base de datos

En el sitio, abre la pestaña Databases y pulsa Add Database. Indica el nombre de la base de datos, un usuario y su contraseña. El servidor de base de datos escucha en 127.0.0.1:3306, que es lo que tu aplicación debe usar como host.

Verifica el acceso con el usuario que acabas de crear:

mysql -h 127.0.0.1 -u your_db_user -p -e "SHOW DATABASES;"

Tras introducir la contraseña deberías ver tu base de datos en la lista. Para administrarla desde el navegador, el panel incluye un acceso a phpMyAdmin en la misma pestaña.

Paso 8: Automatizar con clpctl

Todo lo anterior se puede hacer también con clpctl, la herramienta de línea de comandos de CloudPanel, útil para scripts y para crear muchos sitios. Se ejecuta como root.

Crea un sitio PHP:

sudo clpctl site:add:php --domainName=www.your_domain --phpVersion=8.4 --vhostTemplate='Generic' --siteUser=site_user2 --siteUserPassword='your_strong_password'

Crea una base de datos para ese sitio:

sudo clpctl db:add --domainName=www.your_domain --databaseName=app_db --databaseUserName=app_user --databaseUserPassword='your_strong_password'

Emite e instala el certificado de Let's Encrypt:

sudo clpctl lets-encrypt:install:certificate --domainName=www.your_domain

Sustituye your_strong_password por contraseñas robustas y distintas. Ten en cuenta que los argumentos de la línea de comandos quedan en el historial de la shell: bórralo o antepón un espacio al comando si tu shell está configurada para ignorarlo.

Solución de problemas

No recuerdas la contraseña del administrador. Restablécela desde SSH con clpctl:

sudo clpctl user:reset:password --userName=your_admin_user --password='your_new_password'

Te has bloqueado el acceso al puerto 8443. Entra por SSH (o por la consola del panel de CubePath si también cerraste el 22) y abre temporalmente el puerto con sudo ufw allow 8443/tcp. Después corrige la regla en Admin Area > Security > Firewall.

El certificado de Let's Encrypt no se emite. Comprueba que el dominio resuelve a la IP del servidor con dig +short your_domain y que el puerto 80 está abierto a cualquier origen. Let's Encrypt valida el dominio a través de HTTP.

Error 502 en el sitio. Suele indicar que el pool de PHP-FPM no responde. Revisa el servicio de la versión de PHP que usa el sitio:

sudo systemctl status php8.4-fpm --no-pager

Conclusión

Tienes CloudPanel instalado en Ubuntu 24.04 con el panel restringido a tu IP y protegido con autenticación en dos pasos, y un sitio PHP con base de datos y certificado de Let's Encrypt. Como siguientes pasos, configura las copias de seguridad remotas en Admin Area > Backups, activa Varnish Cache en los sitios que lo admitan y crea usuarios adicionales en Admin Area > Users con acceso solo a los sitios que gestionen.