HestiaCP es un panel de control de alojamiento gratuito y de código abierto, derivado de VestaCP, que gestiona desde una interfaz web los sitios, el correo, el DNS, las bases de datos y los certificados SSL de un servidor. En este tutorial instalarás HestiaCP en un servidor Ubuntu 24.04 limpio (los pasos son idénticos en Debian 12), protegerás el panel con un certificado de Let's Encrypt y crearás un dominio web, un buzón de correo y una base de datos MariaDB tanto desde la interfaz como desde la línea de comandos.

Requisitos previos

Para seguir esta guía necesitas:

  • Un servidor recién instalado con Ubuntu 24.04 LTS, Ubuntu 22.04 LTS o Debian 12 de 64 bits, por ejemplo un VPS de CubePath. HestiaCP debe instalarse sobre un sistema limpio: sin Apache, Nginx, MySQL ni Postfix instalados previamente.
  • Acceso como root o con un usuario con privilegios sudo.
  • Al menos 1 GB de RAM y 10 GB de disco. Si vas a activar el antivirus ClamAV y SpamAssassin, cuenta con 2 GB de RAM o más.
  • Un nombre de host completo (FQDN) para el servidor, por ejemplo panel.your_domain, con un registro DNS A apuntando a la IP pública del servidor (your_server_ip). Es necesario para emitir el certificado del panel y para que el correo saliente sea aceptado.
  • Si vas a usar correo, un registro PTR (DNS inverso) de your_server_ip que coincida con ese nombre de host.

Paso 1: Preparar el servidor

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

sudo apt update
sudo apt upgrade -y

Asigna al servidor su nombre de host definitivo. Sustituye panel.your_domain por el tuyo:

sudo hostnamectl set-hostname panel.your_domain

Comprueba que el nombre se resuelve a la IP pública del servidor:

hostname -f
getent hosts panel.your_domain
panel.your_domain
203.0.113.10    panel.your_domain

Si UFW está activo, desactívalo para que no choque con el cortafuegos de HestiaCP:

sudo ufw status
sudo ufw disable

Paso 2: Descargar el instalador

HestiaCP se instala con un script oficial alojado en su repositorio de GitHub. Descárgalo en lugar de ejecutarlo directamente con una tubería, así puedes revisarlo antes:

wget https://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh

Consulta la ayuda para ver todas las opciones disponibles. Cada componente (Apache, PHP-FPM, Exim, Dovecot, ClamAV, SpamAssassin, BIND, MariaDB, PostgreSQL, etc.) se activa o desactiva con una opción --nombre yes|no:

sudo bash hst-install.sh --help

Si lo prefieres, la documentación oficial de HestiaCP incluye un generador de comandos de instalación en el que eliges los componentes y obtienes la línea exacta.

Paso 3: Ejecutar la instalación

La configuración por defecto instala Nginx como proxy delante de Apache, PHP-FPM, Exim y Dovecot para el correo, BIND para DNS, MariaDB, vsftpd, Fail2ban y el cortafuegos de iptables. Es una buena base para un servidor de hosting generalista.

Este ejemplo desactiva ClamAV y SpamAssassin, que consumen mucha memoria en servidores pequeños. Sustituye el correo y el nombre de host por los tuyos:

sudo bash hst-install.sh \
  --hostname panel.your_domain \
  --email admin@your_domain \
  --clamav no \
  --spamassassin no

El instalador muestra un resumen de los componentes, te pide confirmación y, en modo interactivo, pregunta los datos que falten. La instalación tarda entre 10 y 20 minutos. Al terminar verás un mensaje con la URL y las credenciales del administrador:

Congratulations!

You have successfully installed Hestia Control Panel on your server.

Ready to get started? Log in using the following credentials:

	Admin URL:  https://panel.your_domain:8083
	Username:   admin
	Password:   ************

Guarda la contraseña en un gestor de contraseñas; el instalador también la envía al correo indicado. Reinicia el servidor cuando el instalador lo sugiera:

sudo reboot

Tras el reinicio, comprueba que el servicio del panel está activo y escuchando en el puerto 8083:

sudo systemctl status hestia --no-pager
sudo ss -tlnp | grep 8083
LISTEN 0      511          0.0.0.0:8083       0.0.0.0:*    users:(("nginx",pid=1234,fd=6))

Paso 4: Acceder al panel y asegurarlo

Abre https://panel.your_domain:8083 en el navegador. Al principio el panel usa un certificado autofirmado, así que el navegador mostrará un aviso; acéptalo solo esta vez e inicia sesión con el usuario admin.

Las herramientas de línea de comandos de HestiaCP están en /usr/local/hestia/bin y se añaden al PATH de las sesiones de root. Abre una sesión de root para usarlas:

sudo -i

Emite un certificado de Let's Encrypt para el nombre de host del panel, que también se usará en los servicios de correo:

v-add-letsencrypt-host

Recarga la página del panel: el aviso del certificado ya no debería aparecer.

Después, en la interfaz web, abre el icono de usuario de la esquina superior derecha y, en la configuración de la cuenta admin, activa la autenticación en dos pasos. El usuario admin tiene control total del servidor, así que no lo uses para alojar sitios: crea un usuario normal para cada cliente o proyecto.

Paso 5: Crear un usuario y un dominio web

HestiaCP organiza todo por usuarios del panel: cada dominio, buzón y base de datos pertenece a uno. Crea un usuario para tus sitios (sustituye la contraseña y el correo):

v-add-user webuser 'your_strong_password' webuser@your_domain

Añade el dominio your_domain a ese usuario. El comando crea el host virtual, la zona DNS y el dominio de correo si esos servicios están instalados:

v-add-web-domain webuser your_domain

Antes de pedir el certificado, el registro A de your_domain (y de www.your_domain si lo usas) debe apuntar a your_server_ip. Cuando la resolución sea correcta, emite el certificado:

v-add-letsencrypt-domain webuser your_domain

Comprueba que el sitio responde por HTTPS:

curl -I https://your_domain
HTTP/2 200
server: nginx

Los archivos del sitio están en /home/webuser/web/your_domain/public_html. Puedes subirlos por SFTP con el usuario webuser o desde el gestor de archivos del panel.

Desde la interfaz, lo mismo se hace en la pestaña Web con Añadir dominio web; en la edición del dominio puedes elegir la versión de PHP, activar la redirección a HTTPS y usar el instalador de aplicaciones (WordPress, Nextcloud y otras) incluido en el panel.

Paso 6: Crear un buzón de correo

Si el dominio de correo no se creó automáticamente en el paso anterior, añádelo:

v-add-mail-domain webuser your_domain

Crea un buzón info@your_domain:

v-add-mail-account webuser your_domain info 'your_strong_password'

Lista los buzones del dominio para confirmarlo:

v-list-mail-accounts webuser your_domain

Para que el correo llegue a su destino, publica en tu DNS los registros MX, SPF, DKIM y DMARC. Si la zona DNS está alojada en el propio HestiaCP se crean solos; si usas un DNS externo, en la pestaña Correo abre el dominio y usa la opción que muestra los registros DNS necesarios para copiarlos a tu proveedor.

Paso 7: Crear una base de datos

Crea una base de datos MariaDB para una aplicación. HestiaCP antepone el nombre del usuario del panel al nombre de la base de datos y del usuario de la base de datos:

v-add-database webuser app appuser 'your_strong_password' mysql
v-list-databases webuser
DATABASE        USER             HOST       TYPE   CHARSET  QUOTA  SPND  DATE
--------        ----             ----       ----   -------  -----  ----  ----
webuser_app     webuser_appuser  localhost  mysql  utf8mb4  0      no    2026-09-25

La aplicación se conectará a localhost con la base de datos webuser_app y el usuario webuser_appuser. Desde la interfaz también puedes abrir phpMyAdmin en la pestaña Bases de datos.

Paso 8: Revisar el cortafuegos y las copias de seguridad

Lista las reglas del cortafuegos que gestiona HestiaCP:

v-list-firewall

Si necesitas abrir un puerto nuevo, hazlo desde Configuración del servidor > Cortafuegos en el panel o con v-add-firewall-rule. Por ejemplo, para permitir un servicio en el puerto TCP 8443:

v-add-firewall-rule ACCEPT 0.0.0.0/0 8443 TCP 'Mi servicio'

HestiaCP hace copias de seguridad diarias de cada usuario en /backup mediante una tarea cron. Lanza una copia manual para comprobar que funciona:

v-backup-user webuser
ls -lh /backup

Guardar las copias en el mismo disco no te protege ante la pérdida del servidor. En la edición de cada usuario o en la configuración del servidor puedes añadir un destino remoto (SFTP, FTP o almacenamiento compatible con S3 mediante rclone).

Solución de problemas

  • El instalador se detiene diciendo que ya hay paquetes instalados. HestiaCP necesita un sistema limpio. Reinstala el sistema operativo en lugar de intentar desinstalar Apache, MySQL o Postfix a mano.
  • Let's Encrypt falla al emitir el certificado. Comprueba con dig +short your_domain que el registro A apunta a your_server_ip y que el puerto 80 es accesible desde Internet. Los registros del panel están en /var/log/hestia/.
  • No puedes acceder al puerto 8083. Revisa si hay un cortafuegos externo delante del servidor y que la regla del puerto 8083 aparece en v-list-firewall. Si Fail2ban ha bloqueado tu IP tras varios intentos fallidos, desbloquéala con v-delete-firewall-ban your_ip HESTIA.

Conclusión

Ya tienes HestiaCP funcionando con el panel protegido por HTTPS, un usuario sin privilegios de administración, un sitio web con certificado de Let's Encrypt, un buzón de correo y una base de datos. Como siguientes pasos, configura un destino remoto para las copias de seguridad, revisa las plantillas de Nginx y PHP-FPM en Web > Editar dominio para adaptar cada sitio y activa las actualizaciones automáticas de HestiaCP desde la configuración del servidor.