
# Ansible 自動化:新手必學 5 步搞掂伺服器部署
Ansible 係而家 DevOps 世界入面最紅嘅自動化工具之一。無論你管緊 5 部定 500 部 Linux server,用 Ansible 可以令你喺幾分鐘內完成平時要搞成個鐘嘅重複工作。今日呢篇文就教你由零開始,5 步搞掂 Ansible 基礎部署!
## Ansible:Agentless 自動化嘅核心優勢
Ansible 最大嘅賣點就係 **Agentless** — 你唔使喺每部 target server 裝任何 agent,只需要一部 control node 裝好 Ansible,透過 SSH 就可以控制晒所有機器。對比 Puppet、Chef 呢啲要裝 agent 嘅工具,Ansible 嘅部署成本低好多,特別適合中小企或者想快速上手嘅 DevOps 團隊。
Ansible 由 Red Hat 開發同維護,用 YAML 格式寫 playbook,語法簡單易讀,唔似得其他工具要學 DSL(Domain Specific Language)。基本上你有 Linux 底 + 識少少 YAML,已經可以開始用 Ansible 做自動化。
## Ansible:Inventory 檔案設定教學(入門必學)
Ansible 嘅第一步係定義 inventory — 即係你嘅 target server 清單。最簡單嘅 inventory 就係一個 `hosts` file:
# /etc/ansible/hosts
[webservers]
web01 ansible_host=192.168.1.10 ansible_user=ubuntu
web02 ansible_host=192.168.1.11 ansible_user=ubuntu
[databases]
db01 ansible_host=192.168.1.20 ansible_user=root
你可以將 servers 分組(groups),例如 `[webservers]` 同 `[databases]`,之後 run playbook 嘅時候就可以指定淨係對某一組執行。Inventory 仲可以用 dynamic inventory script 連接 AWS、Azure 等雲端平台,自動獲取 instances 資料。
## Ansible:Ad-Hoc Command 快速測試
未寫 playbook 之前,可以先試下 ad-hoc command,確保 Ansible 可以成功連接所有 target servers:
# Ping 所有 server
ansible all -m ping
# 檢查所有 webserver 嘅 uptime
ansible webservers -m command -a "uptime"
# 喺所有 server 安裝 nginx
ansible all -m apt -a "name=nginx state=present" --become
`-m` 係指定 module(模組),`-a` 係傳入參數,`–become` 係用 sudo 權限執行。Ansible 內置超過 3000 個 modules,基本上你想做嘅嘢都有現成 module 可以用。
## Ansible:寫你第一個 Playbook
Playbook 係 Ansible 嘅靈魂,用 YAML 格式定義你想做嘅 tasks。以下係一個簡單嘅 playbook,幫你部署 Nginx + 放一個 index.html:
---
- name: Deploy web server
hosts: webservers
become: yes
tasks:
- name: Install nginx
apt:
name: nginx
state: present
update_cache: yes
- name: Create index.html
copy:
content: "<h1>Hello from Ansible!</h1>"
dest: /var/www/html/index.html
- name: Ensure nginx is running
service:
name: nginx
state: started
enabled: yes
執行 playbook 好簡單:
ansible-playbook deploy-web.yml
Ansible playbook 嘅執行係 idempotent(冪等)嘅 — 即係你 run 幾多次都好,結果都一樣,唔會重複安裝或者搞亂 config。呢個係 Ansible 對比其他 scripting 工具最大嘅優勢。
## Ansible:用 Roles 組織大型專案
當你嘅 playbook 愈寫愈多,就會發現需要一個更好嘅組織方式。Ansible Roles 就係為咗解決呢個問題而設計:
# 建立 role 結構
ansible-galaxy init nginx-role
# 目錄結構會係咁:
# nginx-role/
# ├── tasks/main.yml # 主要 tasks
# ├── handlers/main.yml # restart service 等 handlers
# ├── templates/ # Jinja2 template files
# ├── vars/main.yml # variables
# └── defaults/main.yml # default values
Roles 令你可以將唔同功能模組化,例如分拆成 `common`、`nginx`、`mysql`、`firewall` 等 roles,每個 role 獨立管理,方便重用同維護。
## Ansible:5 個實用 Tips 幫你避坑
1. **用 `–check` mode 先測試** — 未正式執行前用 `ansible-playbook –check` dry-run 一次,確認冇 syntax error 同邏輯問題
2. **善用 `ansible-vault` 加密敏感資料** — password、API key 等唔好明文放喺 playbook,用 vault encrypt
3. **設定 `gather_facts: no` 加速執行** — 如果你唔需要收集 target server 嘅 system facts,disable 咗佢可以快好多
4. **定期更新 Ansible Galaxy collections** — `ansible-galaxy collection install` 確保你用緊最新版本
5. **用 `ansible-lint` 檢查 code quality** — 類似 Python 嘅 flake8,幫你 maintain clean playbook
## Ansible 總結:點解你要即刻開始用
🔗 參考資料:NVD NIST 漏洞資料庫
Ansible 係一個非常強大而且易學嘅自動化工具,由簡單嘅 server config 管理到複雜嘅 multi-tier application deployment 都可以輕鬆處理。佢嘅 agentless 架構降低咗入場門檻,YAML playbook 令到 Infrastructure as Code 變得 readable。如果你仲未開始用 Ansible,今日就裝嚟試下啦!
# Ubuntu/Debian 安裝
sudo apt update && sudo apt install ansible -y
# RHEL/CentOS 安裝
sudo yum install epel-release -y && sudo yum install ansible -y
# macOS 安裝
brew install ansible
#Ansible #DevOps #自動化 #InfrastructureAsCode #Linux教學
> 📌 **延伸閱讀:**
> Kubernetes 安全:5 個實用保安設定 |
> Docker 安全 5 步教學 |
> SSH 安全:Linux 伺服器保安指南



