Introducción
AWX son las siglas de "Ansible Web eXecutable". Es un proyecto de código abierto y gratuito que le permite administrar y controlar fácilmente su proyecto de Ansible. Proporciona una interfaz de usuario basada en web y un motor de actividades basado en Ansible. Proporciona una potente API REST y le permite administrar o sincronizar el inventario con otras fuentes en la nube, controlar el acceso e integrarse con LDAP.
En este tutorial, le mostraremos cómo instalar Ansible AWX con Docker en CentOS 8.
Prerrequisitos
- Un servidor que ejecuta CentOS 8 con al menos 4 GB de RAM.
- Un usuario no root con privilegios sudo.
Si desea instalar Ansible AWX en un servidor remoto, continúe leyendo; de lo contrario, omita el primer párrafo "Conexión al servidor" y lea el siguiente.
Conexión al servidor
Para acceder al servidor, necesita conocer la dirección IP. También necesitará su nombre de usuario y contraseña para la autenticación. Para conectarse al servidor como root, escriba el siguiente comando:
ssh root@IP_DEL_SERVER
A continuación, deberá ingresar la contraseña del usuario root.
Si no está utilizando el usuario root, puede iniciar sesión con otro nombre de usuario utilizando el mismo comando, luego cambie root a su nombre de usuario:
ssh nome_utente@IP_DEL_SERVER
Luego se le pedirá que ingrese su contraseña de usuario.
El puerto estándar para conectarse a través de ssh es 22, si su servidor usa un puerto diferente, deberá especificarlo usando el parámetro -p, luego escriba el siguiente comando:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Instalar dependencias
Antes de comenzar, deberá instalar el repositorio EPEL en su sistema. Puedes instalarlo con el siguiente comando:
sudo dnf install epel-release -y
A continuación, deberá instalar algunos paquetes adicionales necesarios para ejecutar AWX en su sistema. Puedes instalarlos todos con el siguiente comando:
sudo dnf install git gcc gcc-c++ ansible nano nodejs gettext device-mapper-persistent-data lvm2 bzip2 python3-pip -y
Una vez que se hayan instalado todos los paquetes, puede continuar con el siguiente paso.
Instalar Docker y Docker Compose
A continuación, deberá instalar Docker para ejecutar AWX dentro del contenedor de Docker. De forma predeterminada, la última versión de Docker no está disponible en el repositorio predeterminado de CentOS 8. Por lo tanto, deberá agregar el repositorio de Docker a su sistema. Puede agregar el repositorio de Docker con el siguiente comando:
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
Una vez agregado, instale la última versión estable de Docker con el siguiente comando:
sudo dnf install docker-ce-3:18.09.1-3.el7 -y
Una vez que se haya instalado Docker, verifique la versión instalada de Docker con el siguiente comando:
docker --version
Debería obtener el siguiente resultado:
Docker version 19.03.8, build afacb8b
Luego, inicie el servicio Docker y habilítelo para que se inicie después de reiniciar el sistema con el siguiente comando:
sudo systemctl start docker
sudo systemctl enable docker
Puede verificar el estado del servicio Docker con el siguiente comando:
sudo systemctl status docker
Debería obtener el siguiente resultado:
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2020-03-21 18:11:15 CET; 5s ago
Docs: https://docs.docker.com
Main PID: 8624 (dockerd)
Tasks: 18
Memory: 47.7M
CGroup: /system.slice/docker.service
├─8624 /usr/bin/dockerd -H fd://└─8638 containerd --config /var/run/docker/containerd/containerd.toml --log-level info
Luego, instale el compositor de Docker usando el siguiente comando:
sudo pip3 install docker-compose
Una vez instalada, verifique la versión del compositor de Docker con el siguiente comando:
docker-compose --version
Debería ver el siguiente resultado:
docker-compose version 1.25.4, build unknown
Finalmente, ejecute el siguiente comando para configurar el comando de Python para usar Python 3:
sudo alternatives --set python /usr/bin/python3
Instalar Ansible AWX
Primero, descargue la última versión de Ansible AWX desde el repositorio de Git Hub usando el siguiente comando:
sudo git clone https://github.com/ansible/awx.git
A continuación, genere una clave secreta para cifrar el archivo de inventario con el siguiente comando:
sudo openssl rand -base64 30
Debería obtener un resultado similar al siguiente:
cAP5Ag+/Lwlg2i5+e8iZXKfHNbpjtUfW3dp/ZfGE
Nota: recuerde el código anterior, deberá pegarlo en el archivo de inventario.
Luego, cambie el directorio a awx/installer/
y edite el archivo de inventario:
cd awx/installer/
sudo nano inventory
Edite el archivo de esta manera:
localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python"
[all:vars]
dockerhub_base=ansible
awx_task_hostname=awx
awx_web_hostname=awxweb
postgres_data_dir="/var/lib/pgdocker"
host_port=80
host_port_ssl=443
docker_compose_dir="~/.awx/awxcompose"
pg_username=awx
pg_password=awxpass
pg_database=awx
pg_port=5432
pg_admin_password=password
rabbitmq_password=awxpass
rabbitmq_erlang_cookie=cookiemonster
admin_user=admin
admin_password=password
create_preload_data=True
secret_key=cAP5Ag+/Lwlg2i5+e8iZXKfHNbpjtUfW3dp/ZfGE
awx_official=true
awx_alternate_dns_servers="8.8.8.8,8.8.4.4"
project_data_dir=/var/lib/awx/projects
Guarde y cierre el archivo cuando termine. Luego, crea un directorio para Postgres:
sudo mkdir /var/lib/pgdocker
Finalmente, ejecute el siguiente comando para instalar AWX:
sudo ansible-playbook -i inventory install.yml
Una vez que la instalación se haya completado correctamente, debería obtener el siguiente resultado:
...
skipping: [localhost]
TASK [local_docker: Load web image] **********************************************************************************************************
skipping: [localhost]
TASK [local_docker: Load task image] *********************************************************************************************************
skipping: [localhost]
TASK [local_docker: Set full image path for local install] ***********************************************************************************
skipping: [localhost]
TASK [local_docker: Set DockerHub Image Paths] ***********************************************************************************************
ok: [localhost]
TASK [local_docker: Create ~/.awx/awxcompose directory] **************************************************************************************
changed: [localhost]
TASK [local_docker: Create Docker Compose Configuration] *************************************************************************************
changed: [localhost] => (item=environment.sh)
changed: [localhost] => (item=credentials.py)
changed: [localhost] => (item=docker-compose.yml)
changed: [localhost] => (item=nginx.conf)
TASK [local_docker: Render SECRET_KEY file] **************************************************************************************************
changed: [localhost]
TASK [local_docker: Start the containers] ****************************************************************************************************
changed: [localhost]
TASK [local_docker: Update CA trust in awx_web container] ************************************************************************************
changed: [localhost]
TASK [local_docker: Update CA trust in awx_task container] ***********************************************************************************
changed: [localhost]
PLAY RECAP ************************************************************************************************************************************
localhost: ok=14 changed=6 unreachable=0 failed=0 skipped=95 rescued=0 ignored=0...
El comando anterior creará y lanzará todos los contenedores de Docker necesarios para AWX. Puede verificar los contenedores en ejecución con el siguiente comando:
sudo docker ps
Debería ver el siguiente resultado:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a7ffee91018 ansible/awx_task:9.3.0 "/tini -- /bin/sh -c…" 13 minutes ago Up 13 minutes 8052/tcp awx_task
179208933b55 ansible/awx_web:9.3.0 "/tini -- /bin/sh -c…" 13 minutes ago Up 13 minutes 0.0.0.0:80->8052/tcp awx_web
86e4341934ca postgres:10 "docker-entrypoint.s…" 13 minutes ago Up 13 minutes 5432/tcp awx_postgres
40538e9ddc0f memcached:alpine "docker-entrypoint.s…" 13 minutes ago Up 13 minutes 11211/tcp awx_memcached
dfff98445d8e redis "docker-entrypoint.s…" 13 minutes ago Up 13 minutes 6379/tcp awx_redis
Configurar SELinux y Firewall (opcional)
De forma predeterminada, SELinux está habilitado en CentOS 8. Se recomienda deshabilitarlo para que funcione en AWX en el entorno Docker. Puede deshabilitarlo editando el siguiente archivo:
sudo nano /etc/sysconfig/selinux
Busque la SELINUX
y cámbiela de la siguiente manera:
SELINUX = disabled
Guarde y cierre el archivo cuando termine. Luego, reinicie el sistema para implementar los cambios. A continuación, deberá permitir el servicio http y https a través de firewalld si está habilitado. Puede permitirlos con los siguientes comandos:
sudo firewall-cmd --zone=public --add-masquerade --permanent
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
Luego, reinicie el servicio firewalld para aplicar los cambios:
sudo firewall-cmd --reload
Inicie sesión en la interfaz web de AWX
Ahora abra su navegador web y escriba la URL de su nombre de dominio o dirección IP, http://DOMINIO_O_IP
. Se le redirigirá a la página de inicio de sesión de AWX.
Ingrese el nombre de usuario y la contraseña que definió en el archivo de inventario y haga clic en el botón INICIAR SESIÓN. Debería ver el panel de AWX predeterminado.
Conclusión
Ha instalado AWX con Docker en CentOS 8. Ahora puede administrar y controlar fácilmente su proyecto de Ansible mediante la interfaz web de AWX.