ก่อนจะเริ่มจัดการ server ด้วย Ansible ได้จริง สิ่งแรกที่ต้องทำคือติดตั้งและเตรียม Control Node ให้พร้อมใช้งาน Control Node คือเครื่องที่รัน playbook และส่ง command ไปยัง Managed Node ทั้งหมด — โดยปกติแล้วจะเป็น Cloud VPS หรือเครื่อง dev ที่มี SSH access ไปยังเซิร์ฟเวอร์เป้าหมาย
บทความนี้อธิบายขั้นตอนติดตั้งบน Ubuntu/Debian และ CentOS/RHEL พร้อมการเตรียม SSH key และ inventory file เพื่อให้ทดสอบการเชื่อมต่อกับ managed node ได้จริงก่อนเริ่ม deploy
ความต้องการของระบบก่อนติดตั้ง
การติดตั้งต้องการเพียงไม่กี่สิ่งบน Control Node ได้แก่ Python 3.8 ขึ้นไป, pip, และ SSH client ส่วน Managed Node (เซิร์ฟเวอร์เป้าหมาย) ต้องมี Python 3 และ SSH daemon ทำงานอยู่ ไม่ต้องติดตั้ง agent พิเศษใด ๆ บนเครื่องปลายทาง
- Control Node: Linux หรือ macOS ที่มี Python 3.8+ และ SSH client (Windows ใช้ WSL2 ได้)
- Managed Node: Linux ใด ๆ ที่มี Python 3 และ SSH daemon ทำงานอยู่
- Network: Control Node ต้องเข้าถึง Managed Node ผ่าน SSH port 22 ได้
ติดตั้ง Ansible บน Ubuntu/Debian
วิธีแนะนำสำหรับ Ubuntu คือใช้ PPA อย่างเป็นทางการ ซึ่งให้เวอร์ชันล่าสุดและอัพเดตได้ผ่าน apt upgrade ตามปกติ
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install -y ansible
ansible --version
ติดตั้งบน CentOS/RHEL/Rocky Linux
บน CentOS Stream, Rocky Linux, หรือ RHEL ติดตั้งผ่าน EPEL repository ได้เลย ซึ่งเป็น repository มาตรฐานสำหรับ package เสริมบน Red Hat family
sudo dnf install -y epel-release
sudo dnf install -y ansible
ansible --version
เตรียม SSH Key สำหรับ Control Node
เครื่องมือนี้ทำงานผ่าน SSH โดยใช้ Key-based authentication เป็นหลัก ถ้ายังไม่มี SSH key ให้สร้างใหม่บน Control Node จากนั้น copy public key ไปวางบน Managed Node แต่ละเครื่อง
# สร้าง SSH key pair
ssh-keygen -t ed25519
# Copy public key ไปยัง managed node
ssh-copy-id -i ~/.ssh/id_ed25519.pub ubuntu@managed-node-ip
# ทดสอบ login โดยไม่ต้องใส่ password
ssh ubuntu@managed-node-ip
สร้าง Inventory File เบื้องต้น
Inventory file ระบุว่ามี managed node อะไรบ้างในระบบ รูปแบบพื้นฐานคือไฟล์ .ini ที่จัดกลุ่ม host ตามประเภทการใช้งาน
# inventory.ini
[webservers]
192.168.1.10
192.168.1.11
[dbservers]
192.168.1.20
[all:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_ed25519
ทดสอบการเชื่อมต่อด้วย Ping Module
หลังติดตั้งและตั้งค่า inventory แล้ว ให้ทดสอบว่าเชื่อมต่อไปยัง managed node ได้จริงด้วย ping module ซึ่งทดสอบ SSH connection และ Python availability พร้อมกัน
# ทดสอบ connection ไปยัง hosts ทั้งหมด
ansible -i inventory.ini all -m ping
# ผลลัพธ์ที่ถูกต้อง:
# 192.168.1.10 | SUCCESS => { "ping": "pong" }
# 192.168.1.11 | SUCCESS => { "ping": "pong" }
การตั้งค่า ansible.cfg เบื้องต้น
สร้างไฟล์ ansible.cfg ในโฟล์เดอร์โปรเจกต์เพื่อระบุ default settings เพื่อไม่ต้องพิมพ์ flag ซ้ำทุกครั้งที่รันคำสั่ง
# ansible.cfg
[defaults]
inventory = ./inventory.ini
remote_user = ubuntu
host_key_checking = False
private_key_file = ~/.ssh/id_ed25519
[ssh_connection]
pipelining = True
เมื่อมีไฟล์นี้แล้ว สามารถรัน ansible all -m ping ได้เลยโดยไม่ต้องระบุ -i inventory.ini ทุกครั้ง
สรุป
การติดตั้งบน Control Node ทำได้ไม่กี่คำสั่ง สิ่งสำคัญคือการเตรียม SSH key authentication ให้ถูกต้องก่อน เมื่อคำสั่ง ansible all -m ping ตอบกลับ pong ครบทุก host แสดงว่าระบบพร้อม deploy playbook จริงได้แล้ว

