ติดตั้ง Ansible AWX 17.01 บน Ubuntu 20.04
Installing Ansible AWX 17.01 on Ubuntu 20.04
— — — — — — — — — — — — — — —
สารบัญเนื้อหาทั้งหมด (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: trueServer: 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 oneSelect 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 บทความนี้ให้ผมด้วยนะครับ ขอบคุณมากครับ