ติดตั้ง Ansible AWX 17.01 บน Ubuntu 20.04

Installing Ansible AWX 17.01 on Ubuntu 20.04

Nopnithi Khaokaew (Game)
4 min readMar 8, 2021

— — — — — — — — — — — — — — —
สารบัญเนื้อหาทั้งหมด (My Contents)
— — — — — — — — — — — — — — —

ทำไมถึงใช้ Ansible AWX?

ที่จริงแล้วผมได้มีโอกาสติดตั้ง Ansible Tower และทดสอบไปแล้วตามบทความนี้

https://nopnithi.medium.com/ติดตั้ง-ansible-tower-เพื่อลองเล่นหน่อย-9158bdacc5e2

ทุกอย่างโอเคหมดครับ แต่สุดท้ายเทียบราคากับสิ่งที่เราต้องการแล้วไม่คุ้ม สุดท้ายเลยมาจบที่ Ansible AWX ซึ่งเป็น open source project ที่เป็นต้นน้ำของ Ansible Tower เองอีกที

ทำไมถึงใช้ Ansible AWX เวอร์ชั่น 17.01?

ณ วันที่ 8 มีนาคม 2021 ซึ่งผมกำลังเขียนบทความอยู่นี้ ตัว Ansible AWX ปัจจุบันอยู่ที่เวอร์ชั่น 18.00 (ยังเป็น devel อยู่) และถ้าดูจาก installation guide บน Github ด้านล่างนี้

จะเห็นว่าวิธีในการติดตั้ง AWX ได้เปลี่ยนไปแล้ว เนื่องจากเค้าใช้ AWX Operator มาช่วยติดตั้ง และ AWX เวอร์ชั่นนี้เองผมเข้าใจว่าจะต้องติดตั้งบน Kubernetes (minikube, Openshift หรือ Kubernetes cluster) เท่านั้น

แน่นอนว่าเป็นเรื่องดี แต่ปัญหาคือมันอาจจะไม่สะดวกกับทีมงานของผม ณ ตอนนี้ เพราะไม่ใช่ทุกคนที่จะคุ้นชินกับ Kubernetes ผมจึงเลี่ยงไปติดตั้ง Ansible AWX 17.01 แทนครับ ซึ่งสามารถทำงานบน Docker ตรง ๆ ได้

Server ที่ผมใช้

  • OS: Ubuntu 20.04 (Server)
  • vCPU: 4 cores
  • RAM: 8 GB
  • Storage: 40 GB

เริ่มติดตั้ง Ansible AWX 17.01

ขั้นตอนที่ 1: อัพเดทและอัพเกรด Ubuntu

sudo apt update && sudo apt -y upgrade
sudo reboot

ขั้นตอนที่ 2: ติดตั้ง Ansible บน Ubuntu 20.04

sudo apt install -y ansible

ขั้นตอนที่ 3: ตรวจสอบเวอร์ชั่น Ansible

nopnithi@awx:~$ ansible --version
ansible 2.9.6
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/nopnithi/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
executable location = /usr/bin/ansible
python version = 3.8.5 (default, Jan 27 2021, 15:41:15) [GCC 9.3.0]

ขั้นตอนที่ 4: ติดตั้ง Docker

https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04

ขั้นตอนที่ 5: ตรวจสอบเวอร์ชั่น Docker

nopnithi@awx:~$ docker version
Client: Docker Engine - Community
Version: 20.10.5
API version: 1.41
Go version: go1.13.15
Git commit: 55c4c88
Built: Tue Mar 2 20:18:20 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.5
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 363e9a8
Built: Tue Mar 2 20:16:15 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.3
GitCommit: 269548fa27e0089a8b8278fc4fc781d7f65a939b
runc:
Version: 1.0.0-rc92
GitCommit: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
docker-init:
Version: 0.19.0
GitCommit: de40ad0

ขั้นตอนที่ 6: ติดตั้ง Docker Compose

https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-20-04

ขั้นตอนที่ 7: ตรวจสอบเวอร์ชั่น Docker Compose

nopnithi@awx:~$ docker-compose version
docker-compose version 1.28.5, build unknown
docker-py version: 4.4.4
CPython version: 3.8.5
OpenSSL version: OpenSSL 1.1.1f 31 Mar 2020

ขั้นตอนที่ 8: ติดตั้ง Node และ NPM

sudo apt install -y nodejs npm
sudo npm install npm --global

ขั้นตอนที่ 9: ติดตั้ง dependency สำหรับ Ansible AWX

sudo apt install git pwgen vim python3-pip
sudo pip3 install requests
sudo pip3 install docker-compose==x.xx.x

*** โมดูล docker-compose ให้ใช้เวอร์ชั่นเดียวกับบนเครื่องเรา

จากนั้นให้ generate secret key เพื่อใช้ในขั้นตอนที่ 10

nopnithi@awx:~$ pwgen -N 1 -s 30
2FXxTkuWICO7cB8jUmyBfTnf70hQxO

ขั้นตอนที่ 10: ดาวน์โหลด source code และติดตั้ง Ansible AWX 17.01

wget https://github.com/ansible/awx/archive/17.0.1.tar.gz

แตกไฟล์ออกมา

tar -zxvf 17.0.1.tar.gz

เปลี่ยน directory เข้าไปใน installer

cd awx-17.0.1/installer

จากนั้นให้เปิดไฟล์ inventory ด้วย nano (หรือ vim)

nano inventory

เพื่อแก้ parameter เหล่านี้ (แก้เฉพาะที่ผมทำตัวหนาไว้ก็ได้)

dockerhub_base=ansible
awx_task_hostname=awx
awx_web_hostname=awxweb
postgres_data_dir="~/.awx/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
admin_user=admin
admin_password=YourPassword
create_preload_data=True
secret_key=2FXxTkuWICO7cB8jUmyBfTnf70hQxO

หลังจากแก้ inventory แล้ว ให้รัน Ansible Playbook เพื่อติดตั้ง

ansible-playbook -i inventory install.yml

รอจนเสร็จเป็นอันเรียบร้อย ลองเช็ค container บน Docker ดู

root@awx:~/awx-17.0.1/installer# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4160bb86600f ansible/awx:17.0.1 "/usr/bin/tini -- /u…" 10 minutes ago Up 10 minutes 8052/tcp awx_task
8bb0e2ddb8d9 ansible/awx:17.0.1 "/usr/bin/tini -- /b…" 13 minutes ago Up 10 minutes 0.0.0.0:80->8052/tcp awx_web
03cbb23e1fab redis "docker-entrypoint.s…" 13 minutes ago Up 10 minutes 6379/tcp awx_redis
6a05a3992d4c postgres:12 "docker-entrypoint.s…" 13 minutes ago Up 10 minutes 5432/tcp awx_postgres

ลองเข้า Ansible AWX ผ่าน browser ด้วย IP ของ server ดู

ขั้นตอนที่ 11: ติดตั้ง Ansible AWX CLI (ยังอยู่ใน root นะ)

pip3 install awxkit

ทดสอบ AWX CLI ดู

awx --conf.host http://x.x.x.x --conf.username admin --conf.password YourPassword projects list

รัน Ansible AWX Service อัตโนมัติหลังจาก Reboot

ที่จริงมีหลายวิธี เช่น /etc/init.d แต่ส่วนตัวผมเลือกใช้ cron แทนครับ

สร้างไฟล์ start_awx.sh ขึ้นมา

#!/bin/bashdocker start awx_task
docker start awx_web
docker start awx_redis
docker start awx_postgres
docker ps

เปลี่ยน Shell Script ให้เป็น Executable File

chmod u+x start_awx.sh

จากนั้นเปิด CRON ขึ้นมาแบบนี้ เลือก 1 (ใช้ nano)

root@awx: crontab -e
no crontab for root - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed

จากนั้นใส่ข้อความด้านล่างนี้ลงไป แล้วเซฟไฟล์ครับ

@reboot sh ~/start_awx.sh

หลังจากนี้เมื่อ server ถูก reboot มันจะทำการรันไฟล์ start_awx.sh ทุกครั้งเพื่อสตาร์ท service ของ Ansible AWX ให้โดยอัตโนมัติครับ

ถ้าคิดว่าบทความนี้มีประโยชน์ ฝากกด clap, follow และ share บทความนี้ให้ผมด้วยนะครับ ขอบคุณมากครับ

--

--

Nopnithi Khaokaew (Game)
Nopnithi Khaokaew (Game)

Written by Nopnithi Khaokaew (Game)

Cloud Solutions Architect & Hobbyist Developer | 6x AWS Certified, CKA, CKAD, 2x HashiCorp Certified (Terraform, Vault), etc.

Responses (1)