Ansible 自動化教學:5 步搞掂伺服器批量管理

Ansible 自動化:5 步搞掂伺服器批量管理 如果你仲係逐部 SSH 入 server 做 config,咁你真係要睇呢篇文。Ansible 係而家 IT 界最主流嘅 Infrastructure as Code 工具,用 YAML 寫 playbook,唔使喺 target server 裝 agent,用 SSH 就可以一次過管理幾十甚至幾百部機。今日我同你 step-by-step 實戰...

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 #伺服器管理