← Back to list

How to Install AWX 24.x

If you found this article interesting, your support by following steps will help me spread the knowledge to others:

Tamir Suliman in DevelopersGlobal · 2025-08-07 22:21 · 1 claps · 4.5 min read paywalled
#devops #devops-tool #automation-tools #ansible #automation-software
Open on Medium ↗
Wiki topics: ☁️ · DevOps & Cloud

How to Install AWX 24.x on Rocky Linux 8 Using the AWX Operator: A Free Ansible Automation Platform Alternative

Data Center — Image generated by grok

Data Center — Image generated by grok

If you found this article interesting, your support by following steps will help me spread the knowledge to others:

👏 Give the article 50 claps

💻 Follow me

AWX is the open-source upstream project of Red Hat Ansible Automation Platform, providing a powerful web-based interface and REST API for managing Ansible playbooks, inventories, and job scheduling.

This guide walks you through the step-by-step process of deploying AWX on Rocky Linux 8 or RHEL 8 using Docker or Podman, updated for compatibility with the latest system packages and container tools in 2025. Whether you’re setting up a lab or preparing for production automation, this tutorial ensures a reliable and streamlined AWX installation.

AWX 24.x must be deployed via Kubernetes using the AWX Operator. We’ll install either Docker or Podman as the container driver for Minikube.

Recommended VM Specifications

To deploy AWX with Minikube reliably on Rocky Linux 8 or RHEL 8, use a VM or host system with the following minimum resources:

  • CPU: 4 vCPUs
  • Memory: 8 GB RAM
  • Disk: 30 GB free space
  • OS: Rocky Linux 8.x / RHEL 8.x (64-bit)

Let’s quickly see the installation via Docker/Podman Compose:

Install Docker and Docker Compose or Podman ( I’m using podman)

sudo dnf install make automake conntrack podman-compose epel-release git gcc gcc-c++ nodejs gettext lvm2 bzip2 python3-pip ansible podman -y

Docker and Docker compose installation instructions:


sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install make automake conntrack docker-ce -y
sudo systemctl enable --now docker

sudo curl -L "https://github.com/docker/compose/releases/download/<latest>/docker-compose-$(uname -s)-$(uname -m)" \
  -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Install kubectl and Minikube

Start by dowloading and installing minikube and kubectl.

Kubectl


cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.33/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.33/rpm/repodata/repomd.xml.key
EOF

sudo dnf install -y kubectl

MiniKube:

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-latest.x86_64.rpm
sudo rpm -Uvh minikube-latest.x86_64.rpm

kubectl version --client
minikube version

Now lets start minikube so if using docker:

minikube start --driver=docker --cpus=4 --memory=8192 --disk-size=30g

minikube status

if using podman :

Create a regular user for Minikube and edit the sudoers file safely using visudo::


visudo
awxadmin ALL=(ALL) NOPASSWD: /usr/bin/podman
adduser awxadmin
usermod -aG wheel awxadmin
usermod -aG podman awxadmin
passwd awxadmin
su - awxadmin
minikube start --driver=podman --cpus=4 --memory=8192 --disk-size=30g

MiniKube Starting

MiniKube Starting

Install Required Packages

Install kustomize manually into the user's local path:

mkdir -p $HOME/.local/bin
cd $HOME/.local/bin
curl -sLO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv5.3.0/kustomize_v5.3.0_linux_amd64.tar.gz
tar -xzf kustomize_v5.3.0_linux_amd64.tar.gz
chmod +x kustomize
export PATH=$HOME/.local/bin:$PATH

Clone the AWX repository:

Start by cloning the repository and deploying the operator namespace

sudo git clone https://github.com/ansible/awx-operator.git
cd awx-operator

Create namespace & deploy:

kubectl create ns awx
make deploy NAMESPACE=awx
kubectl get pods -n awx

Create Admin Secret

kubectl create secret generic awx-admin-password \
  --from-literal=password='MySecurePassword123!' \
  -n awx

Deploy AWX Instance

Save as awx.yaml:

apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx
  namespace: awx
spec:
  service_type: NodePort
  ingress_type: none
  hostname: awx.local.domain
  admin_user: admin
  admin_password_secret: awx-admin-password
  postgres_storage_class: standard
  postgres_storage_requirements:
    requests:
      storage: 10Gi

Apply and monitor the app:

cd awx-operator
kustomize build config/default | kubectl apply -n awx -f -
kubectl get pods -n awx -w

Monitor the pods:

kubectl get pods -n awx -w

You should be able to see your pods running as follows:

Successful Deployment using PODMAN driver

Successful Deployment using PODMAN driver

Since we a’re using NodePort, run:

kubectl get svc -n awx

Then look for the awx-service entry. It will show a NodePort, such as 30080.

Install NGINX on the Host

Since Minikube services are isolated and difficult to expose cleanly to the LAN or internet. Using NGINX would allow us to simplify access via a human-readable domain (e.g., awx.localand allows running services on well-known ports (80/443) while enabling centralized control over routing, logging, and security.

Lets install nginx :

sudo dnf install -y nginx
sudo systemctl enable --now nginx

Please make sure you get the nodeport assigned to the app

kubectl get svc -n awx

Then edit /etc/nginx/conf.d/awx.conf:


server {
    listen 80;
    server_name _;

    location / {
        proxy_pass http://192.168.49.2:31916;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Replace 192.168.49.2 with the IP of your AWX pod (or Minikube node IP inside podman).

Accessing the AWX web interface deployed via Minikube and Podman requires correctly resolving the network path to the service. Since NodePort exposes the service on a random high port (e.g., 31916), it’s critical to identify which IP can route traffic to it. Options include using minikube ip to retrieve the internal node IP, inspecting the CNI network (podman network inspect), or listing pod IPs via kubectl get pods -o wide. Each method reflects a different layer of network abstraction—Podman’s container-level IP, Kubernetes’ pod-level IP, or the host's bridge address. For development or local-only scenarios, kubectl port-forward offers a simpler but limited workaround. Choosing the appropriate approach depends on whether the goal is internal debugging or external accessibility from a different device.

Restart NGINX:

sudo nginx -t
sudo systemctl reload nginx

Configure the firewall

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload

Access the AWX Web Interface

Get URL:

minikube service awx-service -n awx --url

Login:

Awx Login Screen — Screenshot by the author

Awx Login Screen — Screenshot by the author

Conclusion

By following this guide, you’ve successfully deployed AWX 24.x on Rocky Linux 8 / RHEL 8 using Minikube and the official AWX Operator, leveraging either Docker or Podman as your container runtime. You’ve also configured NGINX as a reverse proxy to expose AWX cleanly to your local network using a custom domain and standard web ports. This setup provides a lightweight yet robust foundation for managing Ansible playbooks and automating IT workflows in a test or lab environment.

For production-grade deployments, consider moving to a full Kubernetes cluster, enabling TLS via Certbot, or using Ingress controllers with MetalLB for real IP exposure. With this modular approach, your AWX environment remains portable, secure, and easily extensible.


메타데이터
post_id
5eee016a8e5d
slug
install-awx-24-x-5eee016a8e5d
url
https://medium.com/developersglobal/install-awx-24-x-5eee016a8e5d
canonical_url
https://medium.com/developersglobal/install-awx-24-x-5eee016a8e5d
author_url
https://medium.com/@tamirsuliman
status
ok
fetched_at
2026-06-28 10:39:35