Para el armado automático del ambiente se proveen playbooks de Ansible, un software open-source para la automatizacón del aprovisionamiento y configuración de infraestructura y aplicaciones. Ansible se puede ejecutar desde Linux o Mac. En Windows se puede usar Linux Subsystem, aunque no está oficialmente soportado. Puede consultar más información en la documentación de Ansible.
Las tareas fueron programadas y probadas en Ansible 2.9 para los sistemas operativos Ubuntu Server 18, Debian 10 y CentOS/RedHat 7. En los tres casos se asume que partimos de una instalación limpia del sistema operativo. Para otros sistemas o versiones pueden ser necesarios ajustes en las tareas.
Los playbooks están disponibles en el directorio ansible
del repositorio del proyecto. Todos los comandos especificados en esta guía se corren desde este directorio.
Los pasos a ejecutar son los siguientes:
Antes de comenzar, si ya no lo hizo, clone el repositorio git del Sistema de Elecciones siguiendo los siguientes pasos:
sudo apt-get install git
sudo yum install git
git clone https://github.com/LACNIC/elections-open-source
Todos los comandos Ansible en esta guía (creación de vault, ejecución de playbooks, etc) se ejecutan desde el directorio ansible
del repositorio clonado.
Antes de ejecutar los playbooks Ansible se requieren algunos pasos de configuración.
En el Control node (máquina desde la que se ejecutan las tareas Ansible) es necesario instalar Ansible. El procedimiento de instalación dependerá del sistema operativo, por lo general se instala directamente con el gestor de paquetes del sistema (yum install ansible
en CentOS/RedHat, apt install ansible
en Ubuntu/Debian).
El Managed node (servidor al que se le aplican las configuraciones definidas en las tareas Ansible) debe tener Python instalado. También se instala directamente con el gestor de paquetes del sistema (yum install python
en CentOS/RedHat, apt install python
en Ubuntu/Debian).
Puede encontrar información detallada en la documentación de instalación de Ansible.
En el archivo hosts
se define el inventario de servidores de Ansible. Agregue aquí su servidor o edite alguna de las entradas ya existentes. El formato es el siguiente:
[alias]
<hostname o IP>
Al momento de ejecutar tareas Ansible, se usa el alias para especificar en qué servidor aplicar las configuraciones.
Ansible usa SSH para acceder al servidor y ejecutar las tareas. Para esto es necesario tener un usuario con permisos sudo en el Managed node. Se puede usar autenticación con usuario/contraseña o con par de claves pública/privada. La opción elegida se especifica al momento de correr las tareas, como se verá más adelante.
Como parte de la instalación, se crea un usuario de base de datos para la aplicación. La contraseña para este usuario se define y encripta en un vault de Ansible. Para crear el vault, ejecute el siguiente comando:
ansible-vault create pass-vault.yaml
Se pide una contraseña para el vault y luego se puede editar el contenido, agregar la siguiente línea:
postgres_password: <contraseña>
En cualquier otro momento puede ver o editar el contenido del vault con los comandos ansible-vault view pass-vault.yaml
y ansible-vault edit pass-vault.yaml
, respectivamente.
Una vez completados los prerrequisitos, ya se pueden ejecutar tareas. En Ansible, las tareas se agrupan en playbooks. El playbook install.yaml
instala y configura todo lo necesario para levantar el sistema:
Para ejecutar un playbook se usa el comando ansible-playbook <playbook>
con los siguientes parámetros:
-i <inventario>
: archivo inventario de servidores.-l <servidor>
: alias del servidor en el que ejecutar las tareas.-u <usuario>
: usuario para acceder al servidor por SSH.--ask-become-pass
: indica que el password para sudo se ingresará por consola.--ask-pass
: indica que se ingresará la contraseña para el usuario por consola.--private-key /ruta/a/clave/privada
: indica que se usará la clave privada para la autenticación.Así, por ejemplo, este es el comando para ejecutar la instalación completa del ambiente en el servidor definido en el inventario hosts
con alias test
, usando el usuario user
con clave privada para la autenticación SSH:
ansible-playbook install.yaml -i hosts -l test -u user --ask-become-pass --private-key /home/user/userprivkey
Finalizada la ejecución del playbook, el sistema ya está operativo y accesible en http://<ip-servidor>:8080/elections
.
Hay 2 playbooks adicionales disponibles:
deploy.yaml
:
Publica los artefactos del sistema que se encuentran en ansible/roles/elections/files/deployments
.
restore-dump.yaml
:
Borra la base de datos actual y levanta el dump que se encuentra en ansible/roles/elections/files/db/elections.zip
.
Para ejecutar estos playbooks se usa el comando ansible-playbook
como se detalla en la sección anterior, cambiando el nombre del playbook a ejecutar.
Para sistemas operativos o versiones de los sistemas operativos diferentes a las especificadas en esta guía, es posible usar estos mismos playbooks con algunos ajustes. Esta sección se actualiza periódicamente con casos encontrados:
03-postgres.yaml
):02-global.yaml
):Antes de comenzar a usar el sistema, son necesarias algunas tareas iniciales de configuración.
Estas tareas se detallan en el siguiente documento.
Luego de completar la instalación, el sistema es accesible directamente contra el servidor de aplicaciones. Para un ambiente de desarrollo o testeo esto no es un problema, pero para ambientes de producción se recomienda la instalación y configuración de un servidor web (por ej. Apache o Nginx) que actúe como reverse proxy.
Las ventajas de usar reverse proxy son muchas: evitar el acceso directo contra el sevidor de backend, cache y compresión de contenidos, logging HTTP, etc.