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 Roundcube

  • quota_mounts: Es una lista de todos los directorios que serán remontados para cuota. Ver sección "Cuota".

Variables por defecto:

  • language: Idioma del sistema

  • mailing_list_name: Establece la lista de Mailman. Se recomienda establecerla como Mailman (ver el ejemplo de playbook).

    • Por Defecto: Mailman
  • ispconfig_install_mode: Establece el modo que deseas; si solo quieres instalarlo regularmente, se recomienda usar el predeterminado.

    • Por Defecto: standard
  • 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
  • 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
  • ispconfig_mysql_database: Base de datos que será inicializada en la configuración de MariaDB y utilizada por ISPConfig.

    • Por Defecto: dbISPConfig
  • ispconfig_mysql_ispconfig_user: Usuario que será creado dentro de la base de datos MySQL.

    • Por Defecto: ISPConfig
  • ispconfig_mysql_port: Puerto utilizado por MariaDB, que también se utiliza para la inicialización de la base de datos.

    • Por Defecto: 3306
  • ispconfig_mysql_charset: Conjunto de caracteres de la base de datos.

    • Por Defecto: utf8
  • ispconfig_http_server: Establece el servidor HTTP que se ejecuta detrás del sitio de ISPConfig.

    • Por Defecto: apache
  • ispconfig_ispconfig_port: Puerto que utilizará el sitio web.

    • Por Defecto: 8080
  • ispconfig_ispconfig_use_ssl: Utiliza SSL para conectarse a ISPConfig.

    • Por Defecto: y
  • ispconfig_join_multiserver_setup: Se une a múltiples servidores.

    • Por Defecto: n
  • 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
  • ispconfig_configure_mail: Configuración de Mailman para ISPConfig.

    • Por Defecto: y
  • ispconfig_configure_jailkit: Configuración de Jailkit para ISPConfig.

    • Por Defecto: y
  • ispconfig_configure_ftp: Configuración de PureFTP para ISPConfig.

    • Por Defecto: y
  • ispconfig_configure_dns: Configuración de DNS para ISPConfig.

    • Por Defecto: y
  • ispconfig_configure_nginx: Configuración de NGINX para ISPConfig.

    • Por Defecto: n
  • ispconfig_configure_apache: Configuración de Apache para ISPConfig.

    • Por Defecto: y
  • ispconfig_configure_firewall: Configuración de cortafuegos para ISPConfig.

    • Por Defecto: y
  • ispconfig_install_ispconfig_web_interface: Configuración de la interfaz web para ISPConfig.

    • Por Defecto: y
  • ispconfig_do_backup: Configuración de respaldo para ISPConfig.

    • Por Defecto: yes
  • ispconfig_mysql_master_database: Base de datos que contiene la información para ISPConfig.

    • Por Defecto: dbISPConfig
  • ispconfig_reconfigure_permissions_in_master_database: Establece los permisos necesarios para ISPConfig en la base de datos.

    • Por Defecto: no
  • ispconfig_reconfigure_services: Reconfigura todos los servicios.

    • Por Defecto: yes
  • ispconfig_create_new_ispconfig_ssl_cert: Crea un nuevo certificado (no será necesario).

    • Por Defecto: no
  • ispconfig_reconfigure_crontab: Configura el cronjob.

    • Por Defecto: yes
  • ispconfig_configure_webserver: Configura el servidor web.

  • quota_mounts: Lista de directorios que la cuota supervisará.

    • 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.

  1. 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.
  2. Inicia virtualenv
    • Ejecutarás este comando cada vez que reinicies tu consola o ingreses a una nueva sesión.
    • source .venv/bin/activate
  3. 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.
Instalar
ansible-galaxy install inoxio.ispconfig3
Licencia
apache-2.0
Descargas
200