inoxio.ispconfig3
Rol de Ansible: Instala y personaliza ISPConfig 3 en Ubuntu Bionic
La función inoxio.ispconfig3 te ayudará a instalar ISPConfig en tu máquina con Ubuntu 18.04. Sigue las instrucciones del tutorial de howtoforge.com y permite personalizaciones que se explicarán en los siguientes segmentos. También implementa Molecule como un entorno de prueba y contiene algunos consejos si deseas usar Molecule por tu cuenta.
Requisitos
- Máquina con Ubuntu 18.04
Dependencias
- oefenweb.apt
Variables de Rol
Mail, PHPMyAdmin y Roundcube establecerán principalmente las contraseñas de administrador de las aplicaciones mencionadas. Mail también necesitará un correo electrónico desde el cual pueda enviar correos.
ISPConfig es la parte más importante, contiene muchas variables diferentes. La mayoría de ellas se pueden traducir en el autoinstall.php de ISPConfig. También es importante notar que la contraseña de mysql_root_password se usará para la configuración del módulo MariaDB.
Variables del Playbook: Las siguientes variables son necesarias en el playbook (excepto las contraseñas, que se generarán si se omiten). Hay chequeos que verifican que estas variables estén presentes en el playbook. Las variables por defecto se pueden sobrescribir en el playbook.
Mail
: Esto establecerá todas las variables necesarias para configurar una nueva lista de correo.
Creará automáticamente una lista de correo con los parámetros dados.
mail_admin_email
: Correo que enviará/recibirá actualizaciones de Mailman.mail_admin_password
: (Opcional) Contraseña para el administrador de Mailman. Si no se establece una contraseña, se generará una y se mostrará al final de la ejecución del rol.mail_base_domain
: Dominio base para Mailman.phpmyadmin_hostname
: Dominio base para phpMyAdmin.roundcube_admin_password
: (Opcional) Contraseña para el inicio de sesión del administrador en Roundcube. Si no se establece una contraseña, se generará una y se mostrará al final de la ejecución del rol.
ispconfig
: Esto contiene la mayor parte de la configuración para tu instalación de ISPConfig.
Por favor revisa el ejemplo proporcionado por ISPConfig.
Puedes encontrarlo aquí.
ispconfig_admin_password
: (Opcional) Contraseña para el inicio de sesión del administrador de ISPConfig. Si no se establece una contraseña, se generará una y se mostrará al final de la ejecución del rol.ispconfig_mysql_root_password
: (Opcional) Contraseña del usuario root, elige una segura. Incluso si tu base de datos no está expuesta. Si no se establece una contraseña, se generará una y se mostrará al final de la ejecución del rol.ispconfig_mysql_ispconfig_password
: (Opcional) Contraseña para MySQL. Si no se establece una contraseña, se generará una y se mostrará al final de la ejecución del rol.ispconfig_mysql_master_root_password
: (Opcional) Contraseña para el usuario root de la base de datos maestra. Si no se establece una contraseña, se generará una y se mostrará al final de la ejecución del rol.ispconfig_hostname
: Nombre del host de ISPConfig.roundcube_hostname
: Nombre del host de Roundcubequota_mounts
: Es una lista de todos los directorios que serán remontados para cuota. Ver sección "Cuota".
Variables por defecto:
language
: Idioma del sistemamailing_list_name
: Establece la lista de Mailman. Se recomienda establecerla como Mailman (ver el ejemplo de playbook).- Por Defecto:
Mailman
- Por Defecto:
ispconfig_install_mode
: Establece el modo que deseas; si solo quieres instalarlo regularmente, se recomienda usar el predeterminado.- Por Defecto:
standard
- Por Defecto:
ispconfig_hostname
: Esto se utiliza para tu FQDN donde puedes establecer el nombre de tu sitio.ispconfig_mysql_hostname
: Ubicación donde se está ejecutando la base de datos MySQL. Si solo utilizas este rol, el valor predeterminado es suficiente.- Por Defecto:
localhost
- Por Defecto:
ispconfig_mysql_root_user
: Nombre del usuario root. En la mayoría de los casos, este será solo 'root'. Si personalizas tu ISPConfig, configúralo como desees. También establecerá el nombre del usuario root en la configuración de MariaDB.- Por Defecto:
root
- Por Defecto:
ispconfig_mysql_database
: Base de datos que será inicializada en la configuración de MariaDB y utilizada por ISPConfig.- Por Defecto:
dbISPConfig
- Por Defecto:
ispconfig_mysql_ispconfig_user
: Usuario que será creado dentro de la base de datos MySQL.- Por Defecto:
ISPConfig
- Por Defecto:
ispconfig_mysql_port
: Puerto utilizado por MariaDB, que también se utiliza para la inicialización de la base de datos.- Por Defecto:
3306
- Por Defecto:
ispconfig_mysql_charset
: Conjunto de caracteres de la base de datos.- Por Defecto:
utf8
- Por Defecto:
ispconfig_http_server
: Establece el servidor HTTP que se ejecuta detrás del sitio de ISPConfig.- Por Defecto:
apache
- Por Defecto:
ispconfig_ispconfig_port
: Puerto que utilizará el sitio web.- Por Defecto:
8080
- Por Defecto:
ispconfig_ispconfig_use_ssl
: Utiliza SSL para conectarse a ISPConfig.- Por Defecto:
y
- Por Defecto:
ispconfig_join_multiserver_setup
: Se une a múltiples servidores.- Por Defecto:
n
- Por Defecto:
ispconfig_mysql_master_hostname
: Ubicación de la base de datos MySQL maestra. En la mayoría de los casos,localhost
es suficiente.- Por Defecto:
localhost
- Por Defecto:
ispconfig_configure_mail
: Configuración de Mailman para ISPConfig.- Por Defecto:
y
- Por Defecto:
ispconfig_configure_jailkit
: Configuración de Jailkit para ISPConfig.- Por Defecto:
y
- Por Defecto:
ispconfig_configure_ftp
: Configuración de PureFTP para ISPConfig.- Por Defecto:
y
- Por Defecto:
ispconfig_configure_dns
: Configuración de DNS para ISPConfig.- Por Defecto:
y
- Por Defecto:
ispconfig_configure_nginx
: Configuración de NGINX para ISPConfig.- Por Defecto:
n
- Por Defecto:
ispconfig_configure_apache
: Configuración de Apache para ISPConfig.- Por Defecto:
y
- Por Defecto:
ispconfig_configure_firewall
: Configuración de cortafuegos para ISPConfig.- Por Defecto:
y
- Por Defecto:
ispconfig_install_ispconfig_web_interface
: Configuración de la interfaz web para ISPConfig.- Por Defecto:
y
- Por Defecto:
ispconfig_do_backup
: Configuración de respaldo para ISPConfig.- Por Defecto:
yes
- Por Defecto:
ispconfig_mysql_master_database
: Base de datos que contiene la información para ISPConfig.- Por Defecto:
dbISPConfig
- Por Defecto:
ispconfig_reconfigure_permissions_in_master_database
: Establece los permisos necesarios para ISPConfig en la base de datos.- Por Defecto:
no
- Por Defecto:
ispconfig_reconfigure_services
: Reconfigura todos los servicios.- Por Defecto:
yes
- Por Defecto:
ispconfig_create_new_ispconfig_ssl_cert
: Crea un nuevo certificado (no será necesario).- Por Defecto:
no
- Por Defecto:
ispconfig_reconfigure_crontab
: Configura el cronjob.- Por Defecto:
yes
- Por Defecto:
ispconfig_configure_webserver
: Configura el servidor web.quota_mounts
: Lista de directorios que la cuota supervisará.- Por Defecto:
/
- Por Defecto:
Cuota
La lista quota_mounts
en defaults/main.yml contiene todos los directorios que se editarán en el archivo fstab para habilitar la cuota en ellos. Si la lista está vacía, la cuota no se habilitará. Puedes sobrescribir esta lista agregando la variable de cuota en el playbook (ver sección "Variables de Rol"). Si el núcleo de tu máquina no contiene los módulos de cuota, debes mantener la lista vacía. Este es el caso para máquinas de AWS que utilizan el núcleo linux-aws.
Múltiples versiones de PHP
Puedes especificar múltiples versiones de PHP en vars/main.yml, que serán instaladas.
Ejemplo de Playbook
Esto muestra un ejemplo de cómo podrías configurar tu playbook.
- role: inoxio.ispconfig3
mail_admin_email: email@tu-empresa.com
mail_base_domain: tu-empresa.com
ispconfig_hostname: ispconfig.tu-empresa.com
roundcube_hostname: mail.tu-empresa.de
Todo lo demás mencionado en las variables del rol se puede encontrar en defaults/main.yml.
Todas las configuraciones para el rol de ISPConfig se toman del archivo de configuración para la configuración de Apache2.
Consulta este enlace
para más información.
Puedes encontrar configuraciones de ejemplo en autoinstall.php para ISPConfig.
Iniciar como VM y ejecutar pruebas con Molecule
Todo aquí se toma de https://Molecule.readthedocs.io/en/latest/. Es conveniente tener todo en un solo lugar.
Esto te ayudará a ejecutar roles de Ansible en una máquina virtual real sin preocuparte por el estado de la VM.
Para iniciar el rol y ejecutar el entorno de prueba necesitarás Molecule. Lo siguiente explicará cómo configurar todo y ejecutar las pruebas.
- Instalar virtualenv
- Instala virtualenv
sudo apt install virtualenv
- Crea virtualenv dentro de tu carpeta
virtualenv --no-site-packages .venv
Esto contendrá todos los paquetes instalados. Esta es la forma más limpia de evitar que tu sistema tenga desorden por paquetes.
- Instala virtualenv
- Inicia virtualenv
- Ejecutarás este comando cada vez que reinicies tu consola o ingreses a una nueva sesión.
source .venv/bin/activate
- Instala el paquete Molecule
pip3 install Molecule ansible
- Necesitarás instalar la API de Python para el driver que utilizarás; en el caso de este rol, será Vagrant.
- Ejecuta este comando si ves
(.venv)
al principio de tu línea de consola. pip install python-vagrant
Estos son los requisitos que debes cumplir antes de empezar con Molecule. A continuación, se explicará cómo puedes configurar roles para pruebas.
Ejecutar Pruebas
Ejecutar pruebas es bastante fácil, solo entra a tu venv como se ve en el paso 2 anterior y ejecuta:
Molecule test
Esto configurará automáticamente tu driver (Docker o Vagrant en la mayoría de los casos) y ejecutará diferentes escenarios de prueba como pruebas de idempotencia o tus propias pruebas que pueden verificar todo tipo de cosas.
Nuevo Rol
Molecule init role -r nuevo-rol -d vagrant
Esto inicializará un nuevo rol de Vagrant con el nombre nuevo-rol
y
contendrá la configuración estándar para Vagrant. Como alternativa, puedes establecer tu driver en Docker u otros
métodos de virtualización admitidos.
Actualizar Molecule
Nota: Molecule es relativamente nuevo, por lo que habrá actualizaciones; por eso se recomienda ejecutar esto de vez en cuando.
pip install --upgrade Molecule
Ejemplo de Molecule y Playbook
Aquí verás un ejemplo de cómo están estructurados Molecule.yml
y Playbook.yml
para este escenario de prueba.
Molecule.yml
---
dependency:
name: galaxy
driver:
name: vagrant
provider:
name: virtualbox
lint:
name: yamllint
platforms:
- name: instance
box: ubuntu/bionic64
instance_raw_config_args:
- "vm.hostname = 'web.my.net'"
memory: 4096
provisioner:
name: ansible
lint:
name: ansible-lint
enabled: false
scenario:
name: default
test_sequence:
# - lint
- destroy
# - dependency
- syntax
- create
- prepare
- converge
- idempotence
# - side_effect
- verify
- destroy
verifier:
name: testinfra
lint:
name: flake8
Aquí puedes ver el Molecule.yml
utilizado para este proyecto. Puedes observar el driver
y sus configuraciones, como la memoria. Nota importante: fue necesario para
una tarea en el rol establecer el nombre del host, por lo que puedes ver que se establece
con la ayuda de instance_raw_config_args
.
Puedes usar diferentes boxes directamente desde Vagrant o cargarlas desde un enlace.
Para este tipo de cambio, consulta la documentación de Molecule.
Si observas el Playbook.yml
, verás que es similar a la llamada normal al rol, pero con el nombre.
Consulta el ejemplo completo a continuación en el ejemplo de playbook.
Playbook.yml
---
- name: Converge
hosts: all
roles:
- role: inoxio.ispconfig3
***
***
Molecule
Esta sección contendrá una conclusión sobre Molecule porque esta fue la primera configuración de esta herramienta.
La primera ejecución con Molecule fue con Docker como driver. Con este método surgieron obstáculos rápidamente. Debido a la naturaleza de Docker y la complejidad de este rol. Esto comenzó con servicios que no se cargan dentro de un contenedor y continuó con PID diferentes. Así que llegamos a la conclusión de que no es agradable adaptar tu código a tu marco de prueba.
Esto dejó la opción de usar Vagrant como driver. Esto nos ayudará con el problema de no tener un entorno virtual completamente existente y ejecutar todo sin problemas.
Esta configuración se realizó sin problemas importantes y comprobó todos los puntos clave deseados.
Si deseas incluir Molecule en tu rol, sigue esta pequeña lista:
- Asegúrate de comenzar desde cero y crear tu rol en Molecule para que puedas probarlo de vez en cuando.
- Si deseas usar Docker, asegúrate de que tu rol no sea demasiado complejo y que no tengas que adaptar tu rol a Docker.
Installs and customizes ISPConfig 3 on Ubuntu Bionic
ansible-galaxy install inoxio.ispconfig3