Virtualmin es un panel de control de alojamiento de código abierto construido sobre Webmin. Gestiona "servidores virtuales": cada uno agrupa un dominio con su sitio web, buzones de correo, zona DNS, bases de datos y usuario del sistema. En este tutorial instalarás la edición gratuita Virtualmin GPL en un servidor Ubuntu 24.04 limpio con el script oficial, completarás el asistente inicial y crearás un servidor virtual con HTTPS de Let's Encrypt, tanto desde la interfaz web 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 (también valen Ubuntu 22.04, Debian 12, Rocky Linux 9 o AlmaLinux 9), por ejemplo un VPS de CubePath. El instalador debe ejecutarse sobre un sistema limpio, sin Apache, Nginx, MySQL ni Postfix instalados.
- Acceso como
rooto con un usuario con privilegiossudo. - Al menos 2 GB de RAM (con antivirus y antispam activados, 4 GB) y 20 GB de disco.
- Un nombre de host completo para el servidor, por ejemplo
server.your_domain, con un registro DNSAque apunte a la IP pública del servidor (your_server_ip). - Un dominio (
your_domain) apuntando también ayour_server_ippara el primer sitio.
Paso 1: Preparar el servidor
Actualiza el sistema:
sudo apt update
sudo apt upgrade -y
Asigna el nombre de host definitivo. El instalador de Virtualmin lo usa para configurar el correo y el certificado del panel:
sudo hostnamectl set-hostname server.your_domain
hostname -f
server.your_domain
Si has activado UFW, desactívalo: el instalador configura su propio cortafuegos con firewalld y abre los puertos de los servicios que instala.
sudo ufw disable
Paso 2: Descargar y ejecutar el instalador
Virtualmin se instala con un script oficial que añade sus repositorios, instala Webmin, Virtualmin y todos los servicios, y los configura. Descárgalo y revísalo:
curl -fsSL https://download.virtualmin.com/virtualmin-install.sh -o virtualmin-install.sh
less virtualmin-install.sh
El script admite dos conjuntos de paquetes: LAMP (Apache, opción por defecto) y LEMP (Nginx). Consulta todas las opciones con:
sudo sh virtualmin-install.sh --help
Ejecuta la instalación. Este ejemplo usa la pila LAMP por defecto, la más probada en Virtualmin; añade --bundle LEMP si prefieres Nginx:
sudo sh virtualmin-install.sh
El script pide confirmación y tarda entre 10 y 20 minutos. Al terminar muestra la URL del panel:
[SUCCESS] Installation Complete!
[SUCCESS] If there were no errors above, Virtualmin should be ready
[SUCCESS] to configure at https://server.your_domain:10000 (or https://your_server_ip:10000).
Comprueba que Webmin, que sirve la interfaz de Virtualmin, está activo y escucha en el puerto 10000:
sudo systemctl status webmin --no-pager
sudo ss -tlnp | grep 10000
Comprueba también que el cortafuegos permite el puerto del panel:
sudo firewall-cmd --list-all
La salida debe incluir el puerto 10000/tcp junto a los servicios web, de correo y DNS.
Paso 3: Completar el asistente posinstalación
Abre https://server.your_domain:10000 en el navegador y acepta el aviso del certificado autofirmado. Inicia sesión con root y su contraseña, o con tu usuario sudo: Webmin permite el acceso a cualquier usuario que pueda usar sudo sin restricciones.
La primera vez se abre el Post-Installation Wizard. Las opciones recomendadas son:
- Memory use: si el servidor tiene poca RAM, no precargues las bibliotecas de Virtualmin.
- Virus scanning y Spam filtering: actívalos solo si tienes 4 GB de RAM o más y vas a alojar correo.
- Database servers: activa MariaDB y desactiva PostgreSQL si no lo vas a usar.
- MariaDB password: define la contraseña del usuario root de MariaDB.
- DNS configuration: indica el servidor DNS primario si vas a delegar zonas a este servidor; si tu DNS está en otro proveedor, puedes omitirlo.
- Password storage: guarda las contraseñas con hash.
Al terminar el asistente, Virtualmin ejecuta una comprobación de la configuración. Puedes relanzarla en cualquier momento desde SSH:
sudo virtualmin check-config
La salida debe terminar indicando que la configuración es correcta:
.. your system is ready for use by Virtualmin
Paso 4: Emitir un certificado para el panel
Para que el panel deje de usar un certificado autofirmado, en la interfaz ve a Webmin > Webmin Configuration > SSL Encryption, abre la pestaña Let's Encrypt, comprueba que el nombre de host es server.your_domain y pulsa Request Certificate. Debe existir un registro A para ese nombre y el puerto 80 debe estar accesible.
Recarga la página: el navegador ya no debería mostrar el aviso.
Paso 5: Crear un servidor virtual
Un servidor virtual crea a la vez el usuario del sistema, el directorio del sitio, el host virtual de Apache, la zona DNS, el dominio de correo y una base de datos.
Desde la interfaz, ve a Virtualmin > Create Virtual Server, escribe your_domain en Domain name, define la contraseña del administrador del dominio y pulsa Create Server.
Desde la línea de comandos, el equivalente es:
sudo virtualmin create-domain --domain your_domain --pass 'your_strong_password' --default-features
--default-features activa las funciones marcadas por defecto en la plantilla del servidor (web, SSL, DNS, correo y base de datos). Lista los dominios para verificarlo:
sudo virtualmin list-domains
Domain Username Description
------------------------------ -------------------- --------------------
your_domain your_domain
El nombre del usuario del sistema se deriva del dominio. Los archivos del sitio están en /home/<usuario>/public_html, y el usuario puede subirlos por SFTP.
Paso 6: Activar HTTPS con Let's Encrypt
Cuando los registros A de your_domain y www.your_domain apunten a your_server_ip, solicita el certificado:
sudo virtualmin generate-letsencrypt-cert --domain your_domain
Virtualmin instala el certificado en Apache, Postfix y Dovecot para ese dominio y lo renueva automáticamente. Comprueba el sitio:
curl -I https://your_domain
HTTP/1.1 200 OK
Server: Apache
En la interfaz, la misma operación está en Server Configuration > SSL Certificate > Let's Encrypt del servidor virtual.
Paso 7: Crear un buzón y una base de datos
Crea un buzón info@your_domain:
sudo virtualmin create-user --domain your_domain --user info --pass 'your_strong_password'
sudo virtualmin list-users --domain your_domain
Si tu DNS está en otro proveedor, publica allí los registros MX, SPF y DKIM que muestra Virtualmin en Server Configuration > DNS Records (o en Email Settings > DomainKeys Identified Mail para DKIM).
Importantemuchos proveedores limitan el puerto 25 saliente para evitar spam. Si el correo no sale, confirma con tu proveedor que el puerto 25 está permitido en tu servidor.
Para una aplicación, crea una base de datos MariaDB asociada al dominio:
sudo virtualmin create-database --domain your_domain --name app_db --type mysql
sudo virtualmin list-databases --domain your_domain
La aplicación se conectará a localhost con el usuario y la contraseña del administrador del servidor virtual.
Paso 8: Programar copias de seguridad
Haz una copia de todos los servidores virtuales para comprobar que el proceso funciona:
sudo mkdir -p /backup/virtualmin
sudo virtualmin backup-domain --dest /backup/virtualmin --all-domains --all-features --newformat
ls -lh /backup/virtualmin
Con --newformat se genera un archivo por dominio. Para las copias periódicas, ve a Backup and Restore > Scheduled Backups en la interfaz, elige los dominios, un destino remoto (SSH, FTP o almacenamiento compatible con S3) y una programación diaria. Guardar las copias solo en el propio servidor no te protege ante su pérdida.
Solución de problemas
- No puedes acceder al puerto 10000. Comprueba con
sudo systemctl status webminque el servicio está activo y consudo firewall-cmd --list-allque el puerto está permitido. Revisa también el cortafuegos externo, si lo hay. check-configinforma de que el nombre de host no se resuelve. El registroAdeserver.your_domaindebe existir yhostname -fdebe devolver ese nombre.- La solicitud de Let's Encrypt falla. Verifica con
dig +short your_domainque el dominio apunta al servidor y que el puerto 80 está abierto. Siwww.your_domainno tiene registro DNS, la validación de ese nombre fallará.
Conclusión
Ya tienes Virtualmin GPL en Ubuntu 24.04 con el panel protegido por un certificado válido, un servidor virtual con HTTPS, un buzón, una base de datos y copias de seguridad probadas. Como siguientes pasos, ajusta la plantilla de servidor en System Settings > Server Templates para definir los valores por defecto de los nuevos dominios, configura las copias programadas a un destino remoto y revisa los límites de cuota de cada servidor virtual.
