Ansible 自動化:5 步搞掂伺服器批量管理
如果你仲係逐部 SSH 入 server 做 config,咁你真係要睇呢篇文。Ansible 係而家 IT 界最主流嘅 Infrastructure as Code 工具,用 YAML 寫 playbook,唔使喺 target server 裝 agent,用 SSH 就可以一次過管理幾十甚至幾百部機。今日我同你 step-by-step 實戰 Ansible 自動化,由零開始到寫出第一條 production-ready playbook。
👉 延伸閱讀:Linux Server 安全加固 6 步搞掂 — Defense in Depth 實戰指南
Ansible 自動化嘅核心概念
Ansible 自動化嘅運作方式好簡單:你喺一部 control node(你嘅 laptop 或者跳板機)上面寫 playbook,定義你想啲 target server 達到咩狀態,然後 Ansible 會透過 SSH 連過去逐部機執行。Ansible 自動化嘅好處係 idempotent — 即係你 run 同一條 playbook 十次,結果都一樣,唔會重複裝嘢或者改錯 config。
Ansible 自動化入面有幾個核心組件:
– Inventory:定義你要管理嘅 server list
– Playbook:YAML file,定義做咩 task
– Module:Ansible 內置嘅功能單元(例如 apt、copy、service)
– Role:將 playbook 結構化嘅方式,方便重用
Step 1:安裝 Ansible 自動化環境
Ubuntu / Debian:
sudo apt update && sudo apt install -y ansible
macOS:
brew install ansible
裝完 check 版本:
ansible --version
Step 2:設定 Inventory 檔案
整一個 inventory file 叫 `hosts.ini`:
[webservers]
web01 ansible_host=192.168.1.10 ansible_user=ubuntu
web02 ansible_host=192.168.1.11 ansible_user=ubuntu
[dbservers]
db01 ansible_host=192.168.1.20 ansible_user=ubuntu
之後你就可以咁樣 test connection:
ansible all -i hosts.ini -m ping
見到 `”ping”: “pong”` 即係成功。呢一步係 Ansible 自動化最基本嘅 smoke test。
Step 3:寫你第一個 Ansible 自動化 Playbook
建立 `site.yml`:
---
- name: Configure web servers
hosts: webservers
become: yes
tasks:
- name: Install nginx
apt:
name: nginx
state: present
update_cache: yes
- name: Start and enable nginx
systemd:
name: nginx
state: started
enabled: yes
- name: Deploy custom index.html
copy:
content: "<h1>Hello from Ansible!</h1>"
dest: /var/www/html/index.html
owner: www-data
group: www-data
mode: '0644'
執行:
ansible-playbook -i hosts.ini site.yml
Ansible 自動化會逐個 task 顯示 OK / changed / failed,一目瞭然。
Step 4:用 Variables 令 Ansible 自動化更靈活
將 hardcode 嘅 value 抽出嚟做 variable。改 `site.yml`:
---
- name: Configure web servers
hosts: webservers
become: yes
vars:
nginx_port: 8080
app_version: "1.2.3"
tasks:
- name: Install nginx
apt:
name: nginx
state: present
- name: Configure nginx port
lineinfile:
path: /etc/nginx/sites-available/default
regexp: '^listen '
line: "listen {{ nginx_port }};"
notify: restart nginx
handlers:
- name: restart nginx
systemd:
name: nginx
state: restarted
留意 `notify` + `handlers` — 只有 config 真係改咗先會 trigger restart,呢個係 Ansible 自動化好聰明嘅 design。
Step 5:用 Roles 組織大型 Ansible 自動化項目
當你嘅 playbook 越來越大,就要用 roles 拆開。Ansible 自動化嘅標準 role 結構:
roles/
webserver/
tasks/
main.yml
handlers/
main.yml
templates/
nginx.conf.j2
vars/
main.yml
建立 role:
ansible-galaxy init roles/webserver
然後將 task 搬入去 `roles/webserver/tasks/main.yml`:
---
- name: Install nginx
apt:
name: nginx
state: present
- name: Deploy nginx config from template
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: restart nginx
`site.yml` 簡化到:
---
- hosts: webservers
become: yes
roles:
- webserver
乾淨晒!呢個就係 Ansible 自動化嘅真正威力 — 寫一次,重用無限次。
Ansible 自動化實戰貼士
1. **用 `–check` mode 做 dry-run**:`ansible-playbook -i hosts.ini site.yml –check` — 睇吓會改咩先,唔好盲衝
2. **用 `ansible-vault` 加密 secrets**:唔好將 password / API key 明文放 playbook
3. **用 `ansible-lint` check code quality**:確保你啲 playbook 跟 best practice
4. **加 `tags` 方便 partial run**:例如 `–tags “nginx”` 只 run 相關 task
總結
🔗 參考資料:NVD NIST 漏洞資料庫
Ansible 自動化係現代 IT 運維嘅基本技能。由 inventory → playbook → roles,五步就可以將你嘅伺服器管理全面自動化。唔使再驚人手打錯 command、漏改 config,全部變成 code reviewable 嘅 YAML file。Ansible 自動化仲可以整合 CI/CD pipeline(例如 GitHub Actions 或者 Jenkins),每次 commit 自動 deploy,真正達到 infrastructure as code。快啲搵幾部 testing server 試吓啦!
Ansible 延伸閱讀
📌 Docker 安全 5 步教學 — 容器安全管理實戰
📌 SSH 安全:Linux 伺服器保安終極指南 — Server 加固基本功
📌 fail2ban 教學:5 步防禦 SSH 暴力破解 — 自動化安全防護
#Ansible #InfrastructureAsCode #DevOps #自動化 #Linux #伺服器管理



