Ansible AWX installeren op CentOS 8

AWX staat voor “Ansible Web eXecutable” en is een gratis en open-source project waarmee je je Ansible project gemakkelijk kunt beheren en controleren. Het biedt een web-gebaseerde gebruikersinterface en taken-engine die bovenop Ansible is gebouwd. Het biedt een krachtige REST API en stelt je in staat om inventaris te beheren of te synchroniseren met andere cloud bronnen, toegang te regelen en te integreren met LDAP.

In deze zelfstudie laten we je zien hoe je Ansible AWX met Docker op CentOS 8 installeert.

Vereisten

  • Een server die CentOS 8 draait met minimaal 4 GB RAM.
  • Een root wachtwoord is op je server geconfigureerd.

Aan de slag

Voor je begint, moet je de EPEL repository in je systeem installeren. Je kunt het installeren met het volgende commando:

dnf install epel-release -y

Vervolgens moet je enkele aanvullende pakketten installeren die nodig zijn om AWX op je systeem te draaien. Je kunt ze allemaal installeren met het volgende commando:

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

Als alle pakketten geïnstalleerd zijn, kun je doorgaan naar de volgende stap.

Installeer Docker en Docker Compose

Vervolgens moet je Docker installeren om AWX binnen Docker container te draaien. Standaard is de nieuwste versie van Docker niet beschikbaar in de CentOS 8 standaard repository. Je zult dus de Docker repository aan je systeem moeten toevoegen. Je kunt de Docker repository toevoegen met het volgende commando:

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

Eenmaal toegevoegd, installeer je de laatste stabiele versie van Docker met het volgende commando:

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

Zodra de Docker geïnstalleerd is, controleer je de geïnstalleerde versie van Docker met het volgende commando:

docker --version

Je zou de volgende uitvoer moeten krijgen:

Docker version 19.03.7, build 7141c199a2

Start vervolgens de Docker service en zet hem aan om te starten na systeemherstart met het volgende commando:

systemctl start docker
systemctl enable docker

Je kunt de status van de Docker service controleren met het volgende commando:

systemctl status docker

Je zou de volgende uitvoer moeten krijgen:

? 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>

Installeer vervolgens de Docker compose met het volgende commando:

pip3 install docker-compose

Eenmaal geïnstalleerd, controleer de Docker compose versie met het volgende commando:

docker-compose --version

Je zou de volgende uitvoer moeten zien:

docker-compose version 1.25.4, build unknown

Voer ten slotte het volgende commando uit om python commando in te stellen om python 3 te gebruiken:

alternatives --set python /usr/bin/python3

Installeer Ansible AWX

Download eerst de nieuwste versie van Ansible AWX uit de Git Hub repository met het volgende commando:

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

Genereer vervolgens een geheime sleutel voor de versleuteling van het inventarisbestand met het volgende commando:

openssl rand -base64 30

Je zou de volgende uitvoer moeten krijgen:

R+kbcDEUS8DlAftAbfWafVqLZ0lUy+Paqo4fEtgp

Opmerking: Onthoud de bovenstaande geheimen, je zult ze in het inventarisbestand moeten plakken.

Verander vervolgens de directory in awx/installer/ en bewerk het inventarisbestand:

cd awx/installer/
nano inventory

Verander de volgende regels:

[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

Sla het bestand op en sluit het als je klaar bent. Maak dan een directory voor Postgres:

mkdir /var/lib/pgdocker

Voer tenslotte het volgende commando uit om AWX te installeren:

ansible-playbook -i inventory install.yml

Als de installatie met succes voltooid is, zou je de volgende uitvoer moeten krijgen:

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   

Het bovenstaande commando maakt en start alle benodigde Docker containers voor AWX. Je kunt de draaiende containers verifiëren met het volgende commando:

docker ps

Je zou de volgende uitvoer moeten zien:

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

Configureer SELinux en Firewall

Standaard is SELinux ingeschakeld in CentOS 8. Het is aan te raden het uit te schakelen om AWX in de Docker omgeving te laten werken. Je kunt het uitschakelen door het volgende bestand te bewerken:

nano /etc/sysconfig/selinux

Zoek de volgende regel:

SELINUX=enforcing

En vervang het door de volgende regel:

SELINUX=disabled

Sla het bestand op en sluit het als je klaar bent. Herstart dan je systeem om de veranderingen door te voeren. Vervolgens moet je de http en https diensten via firewalld toestaan. Je kunt ze toestaan met het volgende commando:

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

Herstart vervolgens de dienst firewalld om de veranderingen toe te passen:

firewall-cmd --reload

Toegang tot AWX Web Interface

Open nu je web browser en typ de URL http://your-server-ip. Je wordt doorgestuurd naar de AWX login pagina:

Ansible AWX Inloggen

Geef je admin gebruikersnaam en wachtwoord op die je in het inventaris bestand gedefinieerd hebt en klik op de SIGN IN knop. Je zou het AWX standaard dashboard moeten zien op de volgende pagina:

Ansible AWX Interface

Conclusie

Gefeliciteerd! je hebt AWX met Docker met succes geïnstalleerd op CentOS 8. Je kunt nu je Ansible project eenvoudig beheren en controleren met de AWX webinterface.