ai

Ansible Automation เริ่มต้นสำหรับ Sysadmin มือใหม่ 2026 —...

Ansible Automation เริ่มต้นสำหรับ Sysadmin มือใหม่ 2026 —...

22/02/2026 | อ. บอม (Bom) | SiamCafe.net Since 2000-2026

วิดีโอประกอบการเรียนรู้ | YouTube @icafefx

ถ้าคุณเป็น Sysadmin ที่ต้อง SSH เข้าเครื่อง Server ทีละเครื่องพิมพ์คำสั่งซ้ำๆทุกวันอัพเดท Package, แก้ Config, Restart Service — คุณกำลังเสียเวลาไปกับงานที่ Robot ทำได้ดีกว่า Ansible คือ Robot ตัวนั้น

Ansible เป็นเครื่องมือ Automation ที่เรียบง่ายที่สุดในตลาดไม่ต้องติดตั้ง Agent บนเครื่องปลายทางไม่ต้องเรียนภาษาใหม่เขียนเป็น YAML ที่อ่านรู้เรื่องเหมือนภาษาอังกฤษธรรมดาและที่สำคัญที่สุดคือ Idempotent — รันกี่ครั้งก็ได้ผลเหมือนเดิมไม่ทำซ้ำสิ่งที่ทำไปแล้ว

บทความนี้ผมจะพาคุณเรียนรู้ Ansible จากศูนย์พร้อมตัวอย่าง Playbook จริงที่ใช้ได้ทันทีตั้งแต่ Setup Server ครั้งแรกติดตั้ง Docker Deploy Application จนถึง Hardening Security

1. Ansible คืออะไรทำไมต้องใช้

Ansible Automation เริ่มต้นสำหรับ Sysadmin มือใหม่ 2026 —...

Ansible เป็น IT Automation Platform ที่พัฒนาโดย Red Hat ใช้สำหรับ:

  • Configuration Management — ตั้งค่า Server ให้เหมือนกันทุกเครื่อง
  • Application Deployment — Deploy Application ได้ทุกเครื่องพร้อมกัน
  • Orchestration — จัดลำดับงานที่ซับซ้อนข้าม Server หลายเครื่อง
  • Provisioning — สร้าง VM, Container, Cloud Resource

ทำไม Sysadmin ควรใช้ Ansible:

แบบเดิม (Manual)แบบใช้ Ansible
SSH เข้าทีละเครื่องรันครั้งเดียวทำทุกเครื่อง
จำคำสั่งไม่ได้ต้องเปิด Noteเขียนเป็น Playbook เก็บใน Git
รันซ้ำอาจพังIdempotent — รันกี่ครั้งก็ปลอดภัย
คนใหม่มาต้องสอนใหม่ทั้งหมดอ่าน Playbook = เข้าใจทั้งระบบ
เครื่องใหม่ต้อง Setup จากศูนย์รัน Playbook เครื่องเดิมเป๊ะ

2. ติดตั้ง Ansible

Ubuntu/Debian

sudo apt update

sudo apt install -y ansible

เนื้อหาเกี่ยวข้อง — อ่านต่อ: GDP Gnp คืออะไร — ข้อมูลครบถ้วน 2026

หรือติดตั้งผ่าน pip (ได้ version ล่าสุด)

pip3 install ansible

ตรวจสอบ

แนะนำเพิ่มเติม — ดูสัญญาณเทรดที่ XM Signal

ansible --version

ansible [core 2.17.x]

python version = 3.12.x

💡 สำคัญ: ติดตั้ง Ansible บนเครื่องของคุณ (Controller) เท่านั้นไม่ต้องติดตั้งอะไรบนเครื่อง Server ปลายทางแค่ต้องมี SSH Access + Python ก็พอ

3. Inventory — บอก Ansible ว่ามี Server อะไรบ้าง

Inventory คือรายชื่อ Server ที่ Ansible จะจัดการเขียนเป็น INI หรือ YAML:

# inventory.ini

[webservers]

web1 ansible_host=192.168.1.101

web2 ansible_host=192.168.1.102



[dbservers]

db1 ansible_host=192.168.1.201



[monitoring]

prometheus ansible_host=192.168.1.50



# ตัวแปรสำหรับทุกเครื่อง

[all:vars]

ansible_user=admin

ansible_ssh_private_key_file=~/.ssh/id_ed25519

ansible_python_interpreter=/usr/bin/python3

ทดสอบว่า Ansible เข้าถึงได้ทุกเครื่อง

ansible all -i inventory.ini -m ping

เนื้อหาเกี่ยวข้อง — ทำความเข้าใจ communication แปลว่า

Output ที่ถูกต้อง:

web1 | SUCCESS => {"ping": "pong"}

web2 | SUCCESS => {"ping": "pong"}

db1 | SUCCESS => {"ping": "pong"}

4. Ad-Hoc Commands — รันคำสั่งเร็วๆ

Ad-Hoc คือการรันคำสั่งเดียวบนหลายเครื่องพร้อมกันไม่ต้องเขียน Playbook:

# ดู Uptime ทุกเครื่อง

ansible all -i inventory.ini -a "uptime"



# ดู Disk Usage เฉพาะ Web Servers

ansible webservers -i inventory.ini -a "df -h"



# Restart NGINX ทุก Web Server

ansible webservers -i inventory.ini -m service -a "name=nginx state=restarted" --become



# ติดตั้ง Package

ansible all -i inventory.ini -m apt -a "name=htop state=present" --become



# Copy ไฟล์ไปทุกเครื่อง

ansible all -i inventory.ini -m copy -a "src=./motd.txt dest=/etc/motd" --become

5. Playbook แรก — Update + Install Packages

Playbook คือไฟล์ YAML ที่บอก Ansible ว่าจะทำอะไรกับเครื่องไหนตามลำดับ:

# setup-server.yml

---

- name: Initial Server Setup

 hosts: all

 become: yes # รันด้วย sudo



 tasks:

 - name: Update apt cache

 apt:

 update_cache: yes

 cache_valid_time: 3600



 - name: Upgrade all packages

 apt:

 upgrade: dist



 - name: Install essential packages

 apt:

 name:

 - vim

 - curl

 - wget

 - htop

 - tree

 - unzip

 - git

 - ufw

 - fail2ban

 state: present



 - name: Set timezone to Bangkok

 timezone:

 name: Asia/Bangkok



 - name: Enable UFW

 ufw:

 state: enabled

 policy: deny



 - name: Allow SSH

 ufw:

 rule: allow

 port: "22"

 proto: tcp



 - name: Ensure fail2ban is running

 service:

 name: fail2ban

 state: started

 enabled: yes

รัน Playbook

แนะนำเพิ่มเติม — หนังสือเทรดที่ SiamCafeBook

ansible-playbook -i inventory.ini setup-server.yml

PLAY RECAP *********************************************

web1 : ok=8 changed=5 unreachable=0 failed=0

เนื้อหาเกี่ยวข้อง — ดูเพิ่มเติมเรื่อง CrewAI Multi-Agent Metric Collection

web2 : ok=8 changed=5 unreachable=0 failed=0

db1 : ok=8 changed=5 unreachable=0 failed=0

สังเกต changed=5 หมายความว่า 5 Tasks มีการเปลี่ยนแปลงจริงถ้ารันซ้ำอีกครั้งจะได้ changed=0 เพราะทุกอย่างเป็นไปตามที่ต้องการแล้วนี่คือ Idempotent!

Variables

# vars ใน Playbook

---

- name: Configure Web Server

 hosts: webservers

 become: yes

 vars:

 http_port: 80

 server_name: "siamcafe.net"

 doc_root: "/var/www/html"



 tasks:

 - name: Create document root

 file:

 path: "{{ doc_root }}"

 state: directory

 owner: www-data

 group: www-data

Templates (Jinja2)

Ansible Automation เริ่มต้นสำหรับ Sysadmin มือใหม่ 2026 —...
# templates/nginx-vhost.conf.j2

server {

 listen {{ http_port }};

 server_name {{ server_name }};

 root {{ doc_root }};

 index index.html;



 access_log /var/log/nginx/{{ server_name }}_access.log;

 error_log /var/log/nginx/{{ server_name }}_error.log;



 location / {

 try_files $uri $uri/ =404;

 }

}



# ใช้ใน Playbook:

 - name: Deploy NGINX vhost config

 template:

 src: templates/nginx-vhost.conf.j2

 dest: "/etc/nginx/sites-available/{{ server_name }}.conf"

 notify: Reload NGINX

7. Handlers — Restart Service เมื่อ Config เปลี่ยน

Handler จะรันก็ต่อเมื่อถูก Notify จาก Task ที่มีการ changed เท่านั้นป้องกัน Restart Service โดยไม่จำเป็น:

 handlers:

 - name: Reload NGINX

 service:

 name: nginx

 state: reloaded



 - name: Restart MySQL

 service:

 name: mysql

 state: restarted

ถ้า Config ไม่เปลี่ยน Template Task จะไม่ Trigger Notify ดังนั้น NGINX จะไม่ถูก Reload ประหยัด Downtime

8. Roles — จัดระเบียบ Playbook ให้เป็นมาตรฐาน

เมื่อ Playbook ยาวขึ้นควรแยกเป็น Role ซึ่งมีโครงสร้างมาตรฐาน:

# สร้าง Role

ansible-galaxy init roles/nginx



# โครงสร้าง Role

roles/nginx/

├── defaults/

│ └── main.yml # Default Variables

├── files/ # Static Files

├── handlers/

│ └── main.yml # Handlers

├── meta/

│ └── main.yml # Role Metadata

├── tasks/

│ └── main.yml # Tasks หลัก

├── templates/ # Jinja2 Templates

└── vars/

 └── main.yml # Variables
# roles/nginx/tasks/main.yml

---

- name: Install NGINX

 apt:

 name: nginx

 state: present



- name: Deploy vhost config

 template:

 src: vhost.conf.j2

 dest: "/etc/nginx/sites-available/{{ server_name }}.conf"

 notify: Reload NGINX



- name: Enable vhost

 file:

 src: "/etc/nginx/sites-available/{{ server_name }}.conf"

 dest: "/etc/nginx/sites-enabled/{{ server_name }}.conf"

 state: link

 notify: Reload NGINX



- name: Ensure NGINX is running

 service:

 name: nginx

 state: started

 enabled: yes
# ใช้ Role ใน Playbook

---

- name: Setup Web Servers

 hosts: webservers

 become: yes

 roles:

 - nginx

 - certbot

 - monitoring-agent

9. Ansible Vault — เก็บ Password อย่างปลอดภัย

# เข้ารหัสไฟล์ Variables ที่มี Password

ansible-vault create vars/secrets.yml



# เนื้อหา secrets.yml (เข้ารหัสแล้ว):

db_password: "SuperSecretP@ss"

api_key: "sk-xxxxxxxxxxxx"

ssl_cert_passphrase: "cert-pass-123"



# ใช้ใน Playbook

 vars_files:

 - vars/secrets.yml



# รัน Playbook ที่มี Vault

ansible-playbook -i inventory.ini site.yml --ask-vault-pass

# หรือใส่ Password File

ansible-playbook -i inventory.ini site.yml --vault-password-file ~/.vault_pass

10. ตัวอย่างจริง: Setup LEMP Stack ทั้ง Stack

# lemp-stack.yml — ติดตั้ง Linux + NGINX + MariaDB + PHP

---

- name: Install LEMP Stack

 hosts: webservers

 become: yes

 vars:

 php_version: "8.3"

 db_name: "webapp"

 db_user: "webuser"

 db_password: "{{ vault_db_password }}"



 tasks:

 - name: Install NGINX

 apt:

 name: nginx

 state: present



 - name: Install MariaDB

 apt:

 name:

 - mariadb-server

 - mariadb-client

 - python3-mysqldb

 state: present



 - name: Install PHP {{ php_version }}

 apt:

 name:

 - "php{{ php_version }}-fpm"

 - "php{{ php_version }}-mysql"

 - "php{{ php_version }}-curl"

 - "php{{ php_version }}-mbstring"

 - "php{{ php_version }}-xml"

 - "php{{ php_version }}-zip"

 - "php{{ php_version }}-gd"

 state: present



 - name: Create MySQL database

 mysql_db:

 name: "{{ db_name }}"

 state: present



 - name: Create MySQL user

 mysql_user:

 name: "{{ db_user }}"

 password: "{{ db_password }}"

 priv: "{{ db_name }}.*:ALL"

 state: present



 - name: Start all services

 service:

 name: "{{ item }}"

 state: started

 enabled: yes

 loop:

 - nginx

 - mariadb

 - "php{{ php_version }}-fpm"

11. ตัวอย่างจริง: Hardening Security

# security-hardening.yml

---

- name: Security Hardening

 hosts: all

 become: yes



 tasks:

 - name: Disable root SSH login

 lineinfile:

 path: /etc/ssh/sshd_config

 regexp: "^PermitRootLogin"

 line: "PermitRootLogin no"

 notify: Restart SSH



 - name: Disable password authentication

 lineinfile:

 path: /etc/ssh/sshd_config

 regexp: "^PasswordAuthentication"

 line: "PasswordAuthentication no"

 notify: Restart SSH



 - name: Set SSH MaxAuthTries

 lineinfile:

 path: /etc/ssh/sshd_config

 regexp: "^MaxAuthTries"

 line: "MaxAuthTries 3"

 notify: Restart SSH



 - name: Install and configure fail2ban

 apt:

 name: fail2ban

 state: present



 - name: Deploy fail2ban config

 copy:

 content: |

 [sshd]

 enabled = true

 port = ssh

 filter = sshd

 logpath = /var/log/auth.log

 maxretry = 3

 bantime = 3600

 dest: /etc/fail2ban/jail.local

 notify: Restart fail2ban



 - name: Configure automatic security updates

 apt:

 name: unattended-upgrades

 state: present



 - name: Enable automatic updates

 copy:

 content: |

 APT::Periodic::Update-Package-Lists "1";

 APT::Periodic::Unattended-Upgrade "1";

 APT::Periodic::AutocleanInterval "7";

 dest: /etc/apt/apt.conf.d/20auto-upgrades



 handlers:

 - name: Restart SSH

 service:

 name: sshd

 state: restarted



 - name: Restart fail2ban

 service:

 name: fail2ban

 state: restarted

12. ตัวอย่างจริง: Deploy Docker Containers

# docker-deploy.yml

---

- name: Deploy Docker Application

 hosts: webservers

 become: yes



 tasks:

 - name: Install Docker prerequisites

 apt:

 name:

 - apt-transport-https

 - ca-certificates

 - curl

 - gnupg

 state: present



 - name: Add Docker GPG key

 apt_key:

 url: https://download.docker.com/linux/ubuntu/gpg

 state: present



 - name: Add Docker repository

 apt_repository:

 repo: "deb https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable"

 state: present



 - name: Install Docker

 apt:

 name:

 - docker-ce

 - docker-ce-cli

 - containerd.io

 - docker-compose-plugin

 state: present



 - name: Pull and run NGINX container

 community.docker.docker_container:

 name: web-app

 image: nginx:latest

 ports:

 - "80:80"

 - "443:443"

 volumes:

 - "/var/www/html:/usr/share/nginx/html:ro"

 restart_policy: unless-stopped

 state: started

13. Best Practices

  • ใช้ Git — เก็บ Playbook ทั้งหมดใน Git Repository ทุกการเปลี่ยนแปลงมี History
  • เขียน Role ให้ Reusable — แยก Role เป็นหน่วยย่อยใช้ซ้ำได้หลาย Project
  • ใช้ ansible-lint — ตรวจสอบ Playbook ก่อนรัน pip install ansible-lint && ansible-lint site.yml
  • ทดสอบด้วย --check — Dry Run ดูก่อนว่าจะเปลี่ยนอะไร ansible-playbook site.yml --check
  • ใช้ Tags — ติด Tag ให้ Task เพื่อรันเฉพาะส่วน ansible-playbook site.yml --tags nginx
  • เก็บ Secrets ใน Vault — ห้ามเก็บ Password เป็น Plain Text ใน Git
  • ตั้งชื่อ Task ให้ชัดเจน — อ่านชื่อ Task แล้วต้องรู้ว่าทำอะไรไม่ต้องอ่าน Code

💡 อ่านเพิ่มเติม: iCafeForex.com — แหล่งความรู้ Forex และ Gold Trading จากผู้เชี่ยวชาญ | XMSignal.com/th — สัญญาณเทรด XM

📚 แนะนำ: SiamLancard.com — รีวิวอุปกรณ์ IT | iCafeForex สอนเทรด Forex

14. สรุป

อนาคตของ infrastructure management คือ automation และ Ansible คือจุดเริ่มต้นที่ดีที่สุดครับ

เนื้อหาเกี่ยวข้อง — ดูเพิ่มเติมเรื่อง แอพสร้างเว็บไซต์ — ข้อมูลครบถ้วน 2026

เริ่มต้นเรียน Ansible วันนี้ลงทุนเวลาแค่สองสัปดาห์คุณจะได้ทักษะที่ใช้ได้ตลอดอาชีพการทำงานประหยัดเวลาได้หลายชั่วโมงต่อสัปดาห์ครับ

สำหรับ sysadmin ที่ดูแล server มากกว่า 5 เครื่อง Ansible จะช่วยประหยัดเวลาและลดความผิดพลาดได้อย่างมากทุกอย่างที่คุณทำด้วยมือวันนี้สามารถเขียนเป็น playbook แล้วรันอัตโนมัติได้ทุกครั้งไม่ต้องกังวลว่าจะลืมขั้นตอนใดขั้นตอนหนึ่งครับ

Ansible เปลี่ยนวิธีที่ sysadmin ทำงานอย่างแท้จริงจากการต้อง SSH เข้าทีละเครื่องพิมพ์คำสั่งซ้ำๆมาเป็นเขียน playbook ครั้งเดียวแล้วรันได้กับ server ร้อยตัวพร้อมกันได้ผลเหมือนกันทุกครั้งจากประสบการณ์ที่ใช้ Ansible มากว่า 8 ปีผมพบว่า ROI ของการเรียนรู้ Ansible คุ้มค่ามากลงทุนเวลาเรียนสัก 2 สัปดาห์แล้วจะประหยัดเวลาได้หลายชั่วโมงต่อสัปดาห์ตลอดอาชีพการทำงานของคุณสิ่งสำคัญคือเริ่มจาก playbook ง่ายๆก่อนแล้วค่อยๆเพิ่มความซับซ้อนทีละนิดครับ

Ansible เปลี่ยนวิธีที่ Sysadmin ทำงานจากการ SSH เข้าทีละเครื่องพิมพ์คำสั่งซ้ำๆมาเป็นเขียน Playbook ครั้งเดียวแล้วรันได้ทุกเครื่องทุกครั้งได้ผลเหมือนเดิมเสมอ

สิ่งที่ควรทำตอนนี้:

  1. ติดตั้ง Ansible บนเครื่องคุณ
  2. สร้าง Inventory ของ Server ที่ดูแล
  3. เริ่มจาก Ad-Hoc Command ง่ายๆ
  4. เขียน Playbook แรก — ลองเอา Setup Script ที่ใช้อยู่มาแปลงเป็น YAML
  5. ค่อยๆแยกเป็น Role เมื่อ Playbook ซับซ้อนขึ้น

เมื่อคุณเริ่มใช้ Ansible แล้วคุณจะไม่อยากกลับไป SSH ทีละเครื่องอีกเลยครับ

XM Legend · เทรดเดอร์ & ผู้สอน Forex 13 ปี

ผู้ก่อตั้ง SiamCafe ตั้งแต่ปี 1997 · เทรดเดอร์สาย Forex มากกว่า 13 ปี ได้รับการยกย่องเป็น XM Legend · แบ่งปันความรู้ Forex, ไอที, AI และการเทรด จากประสบการณ์จริงในตลาดจริง