Scope
- Ansible AWX 24.6.1 on Minikube (single-node Kubernetes v1.30.0)
- Target OS: Rocky Linux 9.x / RHEL 9.x / AlmaLinux 9.x (x86_64)
- Fully air-gapped installation — no internet required on the destination server
- Scripts available at: github.com/gvargassv/awx-offline-installer
Components Installed
| Component | Version |
|---|---|
| AWX | 24.6.1 |
| AWX Operator | 2.19.1 |
| Kubernetes | v1.30.0 |
| Minikube | latest |
| Docker CE | 27.x |
| PostgreSQL | 15 |
| Redis | 7 |
Requirements
Machine with internet access (bundle preparation)
- Any OS with Docker installed (Linux, macOS, Windows WSL2)
- ~15 GB of free disk space
- Internet access
Destination server (air-gapped)
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 4 vCPUs | 4+ vCPUs |
| RAM | 8 GB | 16 GB |
| Free disk | 40 GB | 60+ GB |
| OS | Rocky Linux 9.x / RHEL 9.x / AlmaLinux 9.x (x86_64) |
Solution
The installation is handled by two scripts from the repository:
| Script | Where to run | What it does |
|---|---|---|
scripts/01-prepare-bundle.sh |
Machine with internet | Downloads images, RPMs, and binaries |
scripts/02-install-awx.sh |
Air-gapped server | Installs Docker, Minikube, K8s, and AWX |
Step 1: Clone the repository (machine with internet)
git clone https://github.com/gvargassv/awx-offline-installer.git
cd awx-offline-installer
Step 2: Generate the offline bundle
Run 01-prepare-bundle.sh on any machine with Docker and internet access.
This script downloads everything needed for the offline installation:
- Docker CE RPMs for Rocky/RHEL 9 x86_64
- Minikube and kubectl binaries
- All container images (AWX, AWX Operator, AWX EE, PostgreSQL, Redis, Kubernetes system images)
- AWX Operator manifests and Kustomize configuration
sudo bash scripts/01-prepare-bundle.sh
The process takes approximately 15–30 minutes depending on your connection speed. On completion, it generates a single compressed file:
awx-offline-bundle.tar.gz (~5–6 GB)
Step 3: Transfer the bundle to the destination server
Via SCP over an internal network:
scp awx-offline-bundle.tar.gz root@<SERVER_IP>:/root/
Or via USB/removable media:
cp awx-offline-bundle.tar.gz /media/usb/
Step 4: Extract the bundle on the server
cd /root
tar xzf awx-offline-bundle.tar.gz
cd awx-offline-bundle
Step 5: Run the installer (no internet required)
Run 02-install-awx.sh on the destination server.
This script performs the following automatically:
- Validates system requirements (CPU, RAM, disk)
- Sets SELinux to permissive and disables firewalld
- Installs Docker CE from the local RPMs
- Copies Minikube and kubectl to
/usr/local/bin/ - Loads all container images into Docker
- Starts the Minikube cluster
- Loads AWX images into the Minikube registry
- Deploys the AWX Operator and AWX Custom Resource
- Creates systemd services for persistence across reboots
- Displays access credentials on completion
sudo bash scripts/02-install-awx.sh
Optional parameters:
sudo bash scripts/02-install-awx.sh --cpus 4 --memory 12g --disk 50g
| Option | Default | Description |
|---|---|---|
--cpus N |
Auto-detect | CPUs allocated to Minikube |
--memory NNg |
Auto-calculate | RAM allocated to Minikube |
--disk NNg |
40g | Minikube virtual disk size |
--skip-docker |
false | Skip Docker installation |
Installation time: approximately 10–20 minutes.
Step 6: Confirm successful deployment
The installer displays a summary on completion:
╔══════════════════════════════════════════════════════════════════════╗
║ ✔ AWX INSTALLATION COMPLETED ║
╠══════════════════════════════════════════════════════════════════════╣
║ URL (NodePort): http://192.168.49.2:30080 ║
║ URL (Forward): http://10.0.0.50:8080 ║
║ Username: admin ║
║ Password: xK9m2pL7qR4w ║
╚══════════════════════════════════════════════════════════════════════╝
Verification
Check pod status
kubectl get pods -n awx
Expected output when fully deployed:
NAME READY STATUS
awx-operator-controller-manager-xxx 2/2 Running
awx-postgres-15-0 1/1 Running
awx-task-xxx 4/4 Running
awx-web-xxx 3/3 Running
Retrieve the admin password
kubectl get secret awx-admin-password -n awx \
-o jsonpath='{.data.password}' | base64 -d ; echo
Reference Commands
# Pod status
kubectl get pods -n awx
# Services
kubectl get svc -n awx
# Minikube cluster status
minikube status
# AWX web logs
kubectl logs -f deploy/awx-web -n awx -c awx-web
# AWX task logs
kubectl logs -f deploy/awx-task -n awx -c awx-task
# Restart AWX web
kubectl rollout restart deploy/awx-web -n awx
Notes
- The full installation log is saved to
/var/log/awx-offline-install.log - Two systemd services are created automatically:
minikube.service— starts the Minikube cluster on bootawx-portforward.service— exposes AWX on port8080of the host
- AWX is accessible via two URLs:
- NodePort
http://<MINIKUBE_IP>:30080— direct cluster access - Port Forward
http://<SERVER_IP>:8080— accessible from the network
- NodePort