Introduzione

AWX sta per "Ansible Web eXecutable" è un progetto gratuito e open source che ti consente di gestire e controllare facilmente il tuo progetto Ansible. Fornisce un'interfaccia utente basata su Web e un motore delle attività basato su Ansible. Fornisce una potente API REST e consente di gestire o sincronizzare l'inventario con altre fonti cloud, controllare l'accesso e integrarsi con LDAP.

In questo tutorial, ti mostreremo come installare Ansible AWX con Docker su CentOS 8.

Prerequisiti

  • Un server che esegue CentOS 8 con almeno 4 GB di RAM.
  • Un utente non root con privilegi sudo.

Se desideri installare Ansible AWX su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Installare le dipendenze

Prima di iniziare, dovrai installare il repository EPEL nel tuo sistema. Puoi installarlo con il seguente comando:

sudo dnf install epel-release -y

Successivamente, dovrai installare alcuni pacchetti aggiuntivi richiesti per eseguire AWX sul tuo sistema. Puoi installarli tutti con il seguente comando:

sudo dnf install git gcc gcc-c++ ansible nano nodejs gettext device-mapper-persistent-data lvm2 bzip2 python3-pip -y

Una volta installati tutti i pacchetti, è possibile procedere al passaggio successivo.

Installare Docker e Docker Compose

Successivamente, dovrai installare Docker per eseguire AWX all'interno del contenitore Docker. Per impostazione predefinita, l'ultima versione di Docker non è disponibile nel repository predefinito CentOS 8. Quindi dovrai aggiungere il repository Docker nel tuo sistema. È possibile aggiungere il repository Docker con il seguente comando:

sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

Una volta aggiunto, installa l'ultima versione stabile di Docker con il seguente comando:

sudo dnf install docker-ce-3:18.09.1-3.el7 -y

Una volta che Docker è stato installato, controllare la versione installata di Docker con il seguente comando:

docker --version

Dovresti ottenere il seguente output:

Docker version 19.03.8, build afacb8b

Quindi, avviare il servizio Docker e abilitarlo per l'avvio dopo il riavvio del sistema con il comando seguente:

sudo systemctl start docker
sudo systemctl enable docker

È possibile verificare lo stato del servizio Docker con il seguente comando:

sudo systemctl status docker

Dovresti ottenere il seguente output:

● 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

Quindi, installare la Docker composer utilizzando il seguente comando:

sudo pip3 install docker-compose

Una volta installato, verificare la versione di Docker composer utilizzando il comando seguente:

docker-compose --version

Dovresti vedere il seguente output:

docker-compose version 1.25.4, build unknown

Infine, esegui il comando seguente per impostare il comando python per utilizzare python 3:

sudo alternatives --set python /usr/bin/python3

Installare Ansible AWX

Innanzitutto, scarica l'ultima versione di Ansible AWX dal repository Git Hub utilizzando il seguente comando:

sudo git clone https://github.com/ansible/awx.git

Successivamente, genera una chiave segreta per la crittografia del file di inventario con il seguente comando:

sudo openssl rand -base64 30

Dovresti ottenere un output simile al seguente:

cAP5Ag+/Lwlg2i5+e8iZXKfHNbpjtUfW3dp/ZfGE
Nota: ricorda il codice di cui sopra, dovrai incollarlo nel file di inventario.

Quindi, modifica la directory in awx/installer/ e modifica il file di inventario:

cd awx/installer/
sudo nano inventory

Modifica il file in questo modo:

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

Salva e chiudi il file al termine. Quindi, crea una directory per Postgres:

sudo mkdir /var/lib/pgdocker

Infine, esegui il comando seguente per installare AWX:

sudo ansible-playbook -i inventory install.yml

Una volta completata correttamente l'installazione, dovresti ottenere il seguente output:

...

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   

...

Il comando precedente creerà e avvierà tutti i contenitori Docker richiesti per AWX. È possibile verificare i contenitori in esecuzione con il seguente comando:

sudo docker ps

Dovresti vedere il seguente output:

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

Configurare SELinux e Firewall (Opzionale)

Per impostazione predefinita, SELinux è abilitato in CentOS 8. Si consiglia di disabilitarlo per funzionare in AWX nell'ambiente Docker. Puoi disabilitarlo modificando il seguente file:

sudo nano /etc/sysconfig/selinux

Trova la riga SELINUX e modificala nel seguente modo:

SELINUX = disabled

Salva e chiudi il file al termine. Quindi, riavvia il sistema per implementare le modifiche. Successivamente, dovrai consentire il servizio http e https tramite firewalld se è abilitato. Puoi permetterli con i seguenti comandi:

sudo firewall-cmd --zone=public --add-masquerade --permanent
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

Quindi, riavviare il servizio firewalld per applicare le modifiche:

sudo firewall-cmd --reload

Accedere all'interfaccia Web di AWX

Ora apri il tuo browser web e digita l'URL  del tuo nome dominio o indirizzo IP, http://DOMINIO_O_IP. Verrai reindirizzato alla pagina di accesso di AWX.

Inserire il nome utente e la password che avete definito nel file inventory e fare clic sul tasto SIGN IN. Dovresti vedere la dashboard predefinita di AWX.

Conclusione

Hai installato con successo AWX con Docker su CentOS 8. Ora puoi gestire e controllare facilmente il tuo progetto Ansible usando l'interfaccia web di AWX.