Ansible AWX es una versión gratuita y de código abierto de la base de código Ansible Tower que se puede usar para administrar las guías e inventarios de Ansible y para programar trabajos. AWX también es un proyecto comunitario de Red Hat, que te permite controlar tus proyectos de Ansible en entornos de IT. Proporciona una interfaz web que te permite administrar todas sus tareas de automatización desde la ubicación central. Con esta herramienta, puedes configurar servidores en infraestructuras locales y remotas. También te permite realizar otras tareas, como cambiar la configuración de la aplicación, iniciar y detener servicios e instalar/actualizar aplicaciones.
En este tutorial, te explicamos paso a paso cómo instalar Ansible AWX con Nginx como Proxy inverso en un servidor Ubuntu 18.04.
Requisitos
- Un servidor cloud corriendo en Ubuntu 18.04.
- Un nombre de dominio válido configurado en tu servidor.
- Una contraseña root en tu servidor.
Empezamos
Antes de empezar, es recomendable que actualices tu servidor con la última versión. Puedes hacerlo con el siguiente comando:
# apt-get update -y
# apt-get upgrade -y
Una vez tu servidor esté actualizado, reinícialo para aplicar todos los cambios.
Instalar Docker y Ansible
A continuación, deberás instalar Docker y Ansible en tu servidor en la nube. De forma predeterminada, la última versión de Docker no está disponible en el repositorio de Ubuntu 18.04, por lo que deberás agregar el repositorio de Docker a tu servidor vps cloud.
Primero, descarga y agrega la clave Docker CE GPG con el siguiente comando:
# wget https://download.docker.com/linux/ubuntu/gpg
# apt-key add gpg
A continuación, agrega el repositorio CE de Docker a APT con el siguiente comando:
# nano /etc/apt/sources.list.d/docker.list
Después, añade la siguiente línea:
deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable
Guarda y cierra el archivo cuando hayas terminado.
Después, actualiza el respositorio e instala Docker con el siguiente comando:
# apt-get update -y
# apt-get install docker-ce ansible -y
Una vez ha sido completada la instalación, puedes comprobar el estado de Docker con el siguiente comando:
# systemctl status docker
Deberías ver el siguiente resultado:
docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2019-06-14 07:21:01 CDT; 1min 48s ago Docs:
https://docs.docker.com Main PID: 2002 (dockerd) Tasks: 10 Memory: 28.3M CGroup: /system.slice/docker.service └─2002 /usr/bin/dockerd -H fd:// --containerd=/run/containerd
/containerd.sock Jun 14 07:20:59 hitesh.rosehostingtest.com dockerd[2002]: time="2019-06-14T07:20:59.845688014-05:00" level=info msg="pickfirstBalancer...e=grpc Jun 14 07:20:59
hitesh.rosehostingtest.com dockerd[2002]: time="2019-06-14T07:20:59.846116992-05:00" level=info msg="pickfirstBalancer...e=grpc Jun 14 07:21:00 hitesh.rosehostingtest.com
dockerd[2002]: time="2019-06-14T07:21:00.132179383-05:00" level=info msg="Graph migration t...conds" Jun 14 07:21:00 hitesh.rosehostingtest.com dockerd[2002]:
time="2019-06-14T07:21:00.133144229-05:00" level=info msg="Loading container...tart." Jun 14 07:21:01 hitesh.rosehostingtest.com dockerd[2002]:
time="2019-06-14T07:21:01.135427275-05:00" level=info msg="Default bridge (d...dress" Jun 14 07:21:01 hitesh.rosehostingtest.com dockerd[2002]:
time="2019-06-14T07:21:01.475398667-05:00" level=info msg="Loading containers: done." Jun 14 07:21:01 hitesh.rosehostingtest.com dockerd[2002]:
time="2019-06-14T07:21:01.710333840-05:00" level=info msg="Docker daemon" co...8.09.6 Jun 14 07:21:01 hitesh.rosehostingtest.com dockerd[2002]:
time="2019-06-14T07:21:01.710574644-05:00" level=info msg="Daemon has comple...ation" Jun 14 07:21:01 hitesh.rosehostingtest.com systemd[1]: Started Docker Application Container
Engine. Jun 14 07:21:01 hitesh.rosehostingtest.com dockerd[2002]: time="2019-06-14T07:21:01.910369983-05:00" level=info msg="API listen on /va....sock"
Instalar Dependencias Requeridas
A continuación, deberás instalar algunas dependencias necesarias como Python pip, nodejs, npm y docker-compose en tu servidor cloud en España.
Primero, instala nodejs npm python-pip con el siguiente comando:
# apt-get install python-pip nodejs npm -y
A continuación, actualiza el npm a la última versión con el siguiente comando:
# npm install npm --global
A continuación, instala docker-compose y docker-py usando el siguiente comando:
# pip install docker-compose==1.9.0
# pip install docker-py
Una vez hecho esto, se instalarán todas las dependencias. Ya puedes pasar al siguiente paso.
Descargar e Instalar AWX
A continuación, deberás descargar la última versión de AWX desde el repositorio de Git. Puedes descargarlo con el siguiente comando:
# git clone --depth 50 https://github.com/ansible/awx.git
Deberías ver el siguiente resultado:
Cloning into 'awx'...
remote: Enumerating objects: 9487, done.
remote: Counting objects: 100% (9487/9487), done.
remote: Compressing objects: 100% (4466/4466), done.
remote: Total 9487 (delta 5863), reused 7053 (delta 4875), pack-reused 0
Receiving objects: 100% (9487/9487), 12.25 MiB | 8.50 MiB/s, done.
Resolving deltas: 100% (5863/5863), done.
A continuación, deberás generar una clave secreta para AWX. Puedes hacerlo con el siguiente comando:
# pwgen -N 1 -s 30
De nuevo, deberías ver el siguiente resultado:
1UUkn843KRGNOsoVvX5cEu7xtw8frx
Después. cambia el directorio cd awx/installer y modifica el archivo de inventario:
# cd awx/installer/
# nano inventory
Haz los siguientes cambios:
postgres_data_dir=/var/lib/pgdocker
use_docker_compose=true
docker_compose_dir=/var/lib/awx
admin_user=admin
admin_password=awxpasswd
secret_key=1UUkn843KRGNOsoVvX5cEu7xtw8frx
project_data_dir=/var/lib/awx/projects
host_port=8000
Guarda y cierra el archivo cuando hayas terminado. A continuación, instala la aplicación AWX con el siguiente comando:
# ansible-playbook -i inventory install.yml
Este comando descargará imágenes de Docker y creará un nuevo postgresql, memcached, rabbitmq, la aplicación web awx y los contenedores de tareas awx. Espera un tiempo para terminar la instalación. Luego, ejecuta el siguiente comando para ver los contenedores creados con el siguiente comando:
# docker ps
Deberías ver todos los contenedores con el siguiente resultado:
IMAGEN | COMANDOS | PUERTOS | NOMBRES |
ansible/awx_task:latest |
"/tini -- /bin/sh ..." |
8052/tcp |
awx_task |
ansible/awx_web:latest |
"/tini -- /bin/sh ..." |
0.0.0.0:8000->8052/tcp |
awx_web |
memcached:alpine |
"docker-Entrypoint..." |
11211/tcp | memcached |
rabbitmq:3 |
"docker-entrypoint..." |
4369/tcp, 5671-5672/tcp, 25672/tcp | rabbitmq |
postgres:9.6 |
"docker-entrypoint..." |
5432/tcp | postgres |
Una vez hayas hecho esto, puedes continuar con el siguiente paso.
Configurar Nginx como Reverse Proxy para AWX
La aplicación AWX ahora está instalada y se está ejecutando en el puerto 8000. A continuación, deberás configurar Nginx como un proxy inverso, así podrás acceder a AWX utilizando el puerto 80.
Para hacerlo, primero instala Nginx con el siguiente comando:
# apt-get install nginx -y
Una vez que se haya instalado Nginx, deberás crear un archivo de host virtual Nginx para AWX. Puedes crearlo con el siguiente comando:
# nano /etc/nginx/sites-available/awx.conf
Añade las siguientes líneas:
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/awx.access.log;
error_log /var/log/nginx/awx.error.log;
location / {
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://localhost:8000/;
}
}
Guarda y cierra el archivo cuando hayas terminado.
Después, activa el virtual host de AWX con el siguiente comando:
# ln -s /etc/nginx/sites-available/awx.conf /etc/nginx/sites-enabled/
A continuación, verifica el error de sintaxis en Nginx con el siguiente comando:
# nginx -t
Deberías ver el siguiente resultado:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Finalmente, reinicia el servicio Nginx para aplicar todos los cambios con el siguiente comando:
# systemctl restart nginx
Accede a la Interfaz Web de AWX
Ya tienes AWX instalado y configurado, es hora de acceder a la interfaz web de AWX.
Abre tu navegador web y ve a la URL http://example.com. Serás redireccionado a la página de login como se muestra más abajo:
Ahora, proporciona el nombre de usuario y contraseña de administrador que has especificado en el archivo de inventario. Luego, haz clic en la pestaña “SIGN IN”. Serás redirigido a la página del panel de control de AWX:
¡Felicidades! Ha instalado y configurado con éxito Ansible AWX en tu servidor Ubuntu 18.04 🙂 Ahora puedes administrar tu infraestructura desde la ubicación central.