Cómo instalar Ansible AWX en CentOS 8
AWX significa «Ansible Web eXecutable» y es un proyecto gratuito y de código abierto que te permite gestionar y controlar tu proyecto Ansible fácilmente. Proporciona una interfaz de usuario basada en la web y un motor de tareas construido sobre Ansible. Proporciona una potente API REST y te permite gestionar o sincronizar el inventario con otras fuentes en la nube, controlar el acceso e integrarse con LDAP.
En este tutorial, te mostraremos cómo instalar Ansible AWX con Docker en CentOS 8.
Requisitos previos
- Un servidor que ejecute CentOS 8 con un mínimo de 4 GB de RAM.
- Una contraseña de root configurada en tu servidor.
Cómo empezar
Antes de empezar, necesitarás instalar el repositorio EPEL en tu sistema. Puedes instalarlo con el siguiente comando:
dnf install epel-release -y
A continuación, tendrás que instalar algunos paquetes adicionales necesarios para ejecutar AWX en tu sistema. Puedes instalarlos todos con el siguiente comando:
dnf install git gcc gcc-c++ ansible nodejs gettext device-mapper-persistent-data lvm2 bzip2 python3-pip -y
Una vez instalados todos los paquetes, puedes pasar al siguiente paso.
Instalar Docker y Docker Compose
A continuación, tendrás que instalar Docker para ejecutar AWX dentro del contenedor Docker. Por defecto, la última versión de Docker no está disponible en el repositorio por defecto de CentOS 8. Así que tendrás que añadir el repositorio de Docker en tu sistema. Puedes añadir el repositorio Docker con el siguiente comando:
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
Una vez añadido, instala la última versión estable de Docker con el siguiente comando:
dnf install docker-ce-3:18.09.1-3.el7 -y
Una vez instalado Docker, comprueba la versión instalada de Docker con el siguiente comando:
docker --version
Deberías obtener la siguiente salida:
Docker version 19.03.7, build 7141c199a2
A continuación, inicia el servicio de Docker y permite que se inicie tras el reinicio del sistema con el siguiente comando:
systemctl start docker systemctl enable docker
Puedes verificar el estado del servicio Docker con el siguiente comando:
systemctl status docker
Deberías obtener la siguiente salida:
? docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2020-03-11 02:36:04 EDT; 23min ago Docs: https://docs.docker.com Main PID: 5882 (dockerd) Tasks: 101 Memory: 2.6G CGroup: /system.slice/docker.service ??5882 /usr/bin/dockerd -H fd:// ??5899 containerd --config /var/run/docker/containerd/containerd.toml --log-level info ??8815 containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/4b91575d64b1b> ??8847 containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/0f36c9784f748> ??8894 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 172.18.0.5 -container-port 8052 ??8899 containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/47300ec1c26ff> ??8923 containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/9827b9831fa5b> ??9631 containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/166b153faa275>
A continuación, instala el Docker compose con el siguiente comando:
pip3 install docker-compose
Una vez instalado, verifica la versión de Docker compose utilizando el siguiente comando:
docker-compose --version
Deberías ver la siguiente salida:
docker-compose version 1.25.4, build unknown
Por último, ejecuta el siguiente comando para establecer que el comando python utilice python 3:
alternatives --set python /usr/bin/python3
Instalar Ansible AWX
En primer lugar, descarga la última versión de Ansible AWX desde el repositorio Git Hub utilizando el siguiente comando:
git clone https://github.com/ansible/awx.git
A continuación, genera una clave secreta para el cifrado del archivo de inventario con el siguiente comando:
openssl rand -base64 30
Deberías obtener la siguiente salida:
R+kbcDEUS8DlAftAbfWafVqLZ0lUy+Paqo4fEtgp
Nota: Recuerda el secreto anterior, tendrás que pegarlo en el archivo de inventario.
A continuación, cambia el directorio a awx/installer/ y edita el archivo de inventario:
cd awx/installer/ nano inventory
Cambia las siguientes líneas:
[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=R+kbcDEUS8DlAftAbfWafVqLZ0lUy+Paqo4fEtgp awx_official=true awx_alternate_dns_servers="8.8.8.8,8.8.4.4" project_data_dir=/var/lib/awx/projects
Guarda y cierra el archivo cuando hayas terminado. A continuación, crea un directorio para Postgres:
mkdir /var/lib/pgdocker
Por último, ejecuta el siguiente comando para instalar AWX:
ansible-playbook -i inventory install.yml
Una vez que la instalación se haya completado con éxito, deberías obtener la siguiente salida:
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á e iniciará todos los contenedores Docker necesarios para AWX. Puedes verificar los contenedores en ejecución con el siguiente comando:
docker ps
Deberías ver la siguiente salida:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4b91575d64b1 ansible/awx_task:9.2.0 "/tini -- /bin/sh -c…" About a minute ago Up About a minute 8052/tcp awx_task 9827b9831fa5 ansible/awx_web:9.2.0 "/tini -- /bin/sh -c…" About a minute ago Up About a minute 0.0.0.0:80->8052/tcp awx_web 47300ec1c26f postgres:10 "docker-entrypoint.s…" About a minute ago Up About a minute 5432/tcp awx_postgres 166b153faa27 ansible/awx_rabbitmq:3.7.4 "docker-entrypoint.s…" About a minute ago Up 58 seconds 4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp awx_rabbitmq 0f36c9784f74 memcached:alpine "docker-entrypoint.s…" About a minute ago Up About a minute 11211/tcp awx_memcached
Configurar SELinux y Firewall
Por defecto, SELinux está activado en CentOS 8. Se recomienda desactivarlo para que AWX funcione en el entorno Docker. Puedes desactivarlo editando el siguiente archivo:
nano /etc/sysconfig/selinux
Busca la siguiente línea:
SELINUX=enforcing
Y, sustitúyela por la siguiente línea:
SELINUX=disabled
Guarda y cierra el archivo cuando hayas terminado. A continuación, reinicia tu sistema para aplicar los cambios. A continuación, tendrás que permitir el servicio http y https a través de firewalld. Puedes permitirlos con el siguiente comando:
firewall-cmd --zone=public --add-masquerade --permanent firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https
A continuación, reinicia el servicio firewalld para aplicar los cambios:
firewall-cmd --reload
Accede a la interfaz web de AWX
Ahora, abre tu navegador web y escribe la URL http://your-server-ip. Serás redirigido a la página de inicio de sesión de AWX:
Proporciona tu nombre de usuario y contraseña de administrador que has definido en el archivo de inventario y haz clic en el botón INICIAR S ESIÓN. Deberías ver el panel de control por defecto de AWX en la siguiente página:
Enhorabuena, has instalado con éxito AWX con Docker en CentOS 8.