簡介
手動設定和管理伺服器可能是一個繁瑣且容易出錯的過程,尤其是在擁有多台伺服器或重複設定任務的環境中。Ansible 是一款強大的開源 IT 自動化工具,它可以讓你輕鬆自動完成伺服器佈建、設定和管理,從而簡化這一過程。在本指南 《24. 使用 Ansible 自動設定 Ubuntu Server:實用指南》 中,我們將帶你了解使用 Ansible 自動設定和組態 Ubuntu Server 的基礎知識。讀完本文,你將學會如何編寫和執行 Ansible Playbook,以簡化常見的伺服器任務、提高效率,並確保整個基礎架構的一致性。
往期文章:
01. Ubuntu Server 簡介 – SysOSX: AI & Cloud
02. 如何搭建你的第一台 Ubuntu Server:初學者指南 – SysOSX: AI & Cloud
03. 掌握 Ubuntu Server 的 Linux 命令列 – SysOSX: AI & Cloud
04. Ubuntu Server 使用者與權限管理:全面指南 – SysOSX: AI & Cloud
05. Ubuntu Server 網路基礎:全面指南 – SysOSX: AI & Cloud
06. 在 Ubuntu Server 上安裝和管理軟體:完整指南 – SysOSX: AI & Cloud
07.Ubuntu Server 修補程式與更新:全面指南 – SysOSX: AI & Cloud
08. 保護你的 Ubuntu Server:強化與防護的實用步驟 – SysOSX: AI & Cloud
09. Ubuntu 伺服器稽核與記錄
10. Ubuntu Server 系統監控工具:全面指南 – SysOSX: AI & Cloud
11. Ubuntu 伺服器集中式記錄:必讀指南 – SysOSX: AI & Cloud
12. Ubuntu Server 稽核與合規:最佳實踐 – SysOSX: AI & Cloud
13. 為代管和 Web 應用程式設定你的 Ubuntu Server:終極指南 – SysOSX: AI & Cloud
14. 在一台 Ubuntu Server 上代管多個網站:實用技巧 – SysOSX: AI & Cloud
15. Ubuntu Server 儲存與磁碟管理:簡明指南 – SysOSX: AI & Cloud
16. 在 Ubuntu Server 上設定檔案共用服務:完整指南 – SysOSX: AI & Cloud
17. 在 Ubuntu 上設定安全的資料庫伺服器:MySQL 與 MariaDB 對比 – SysOSX: AI & Cloud
18. 如何在 Ubuntu Server 上設定和使用 LVM:全面指南 – SysOSX: AI & Cloud
19. KVM 虛擬化入門:Ubuntu Server 初學者指南 – SysOSX: AI & Cloud
20. 如何在 Ubuntu Server 上安裝 Docker:容器化逐步指南 – SysOSX: AI & Cloud
21. LXD 入門:輕鬆安裝容器 + 速查表 – SysOSX: AI & Cloud
22. Ubuntu Server 上 Podman 入門:完整指南 – SysOSX: AI & Cloud
23. 在雲端部署 Ubuntu Server:逐步指南 – SysOSX: AI & Cloud
目錄
為什麼使用 Ansible 進行伺服器自動化?
Ansible 因其簡單易用和功能強大而被廣泛用於伺服器自動化。以下是它成為首選的原因:
- 無代理:Ansible 不需要在目標伺服器上安裝任何代理軟體。它使用 SSH 進行通訊。
- 宣告式語法:Ansible Playbook 使用 YAML,這是一種人類可讀的語法,可以輕鬆定義期望狀態。
- 可重複使用的設定:一次編寫 Playbook,即可在多台伺服器上重複使用。
- 冪等性:Ansible 確保任務僅在必要時執行,避免冗餘操作。
- 可擴展性:Ansible 支援多種模組,可處理軟體套件安裝、檔案管理和服務設定等任務。
先決條件
在深入了解如何使用 Ansible 自動設定 Ubuntu Server 之前,請確保你具備以下條件:
- 控制節點:安裝了 Ansible 的機器(你的本機系統或專用伺服器)。
- 目標伺服器:你想要設定的 Ubuntu 伺服器(本地端或雲端)。
- SSH 存取:確保控制節點與目標伺服器之間已設定免密 SSH 存取。
步驟 1:安裝 Ansible
1.1 在控制節點上安裝 Ansible
在你的控制節點(例如執行 Ubuntu 的本機)上安裝 Ansible:
sudo apt update
sudo apt install ansible -y
1.2 驗證安裝
檢查已安裝的 Ansible 版本,確保安裝正確:
ansible --version
範例輸出:
ansible 2.10.8
config file = None
configured module search path = ['/home/uadmin/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
executable location = /usr/bin/ansible
python version = 3.10.12 (main, Feb 4 2025, 14:57:36) [GCC 11.4.0]
步驟 2:設定 SSH 存取
Ansible 透過 SSH 與目標伺服器通訊。你需要設定從控制節點到目標伺服器的免密 SSH 存取。
2.1 產生 SSH 金鑰組
如果你還沒有 SSH 金鑰組,請產生一個:
ssh-keygen -t rsa -b 2048
2.2 將 SSH 金鑰複製到目標伺服器
使用以下命令將你的公開金鑰複製到目標伺服器:
ssh-copy-id ubuntu@<target-server-ip>
測試 SSH 存取,確保無需密碼即可正常運作:
ssh ubuntu@<target-server-ip>
步驟 3:定義清單
Ansible 使用 清單檔案 來定義要管理的目標伺服器。
3.1 建立清單檔案
在工作目錄中建立一個名為 inventory 的檔案:
nano inventory
加入目標伺服器的 IP 位址或主機名稱。例如:
[ubuntu_servers]
192.168.50.42
192.168.50.145
儲存並離開檔案(Ctrl+O,然後按 Ctrl+X)。
3.2 測試連通性
使用 ping 模組測試與目標伺服器的連通性:
ansible -i inventory ubuntu_servers -m ping
範例輸出:
192.168.50.145 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
192.168.50.42 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
步驟 4:編寫你的第一個 Ansible Playbook
Ansible Playbook 是定義你想要自動執行的任務的 YAML 檔案。讓我們建立一個 Playbook 來自動完成 Ubuntu Server 的設定。
4.1 建立 Playbook 檔案
建立一個名為 setup.yml的檔案:
nano setup.yml
4.2 定義 Playbook
將以下內容加入到 Playbook 中:
---
- name: Configure Ubuntu Server
hosts: ubuntu_servers
become: true
tasks:
- name: Update and upgrade apt packages
apt:
update_cache: yes
upgrade: dist
- name: Install common packages
apt:
name:
- curl
- wget
- git
- build-essential
state: present
- name: Enable UFW and allow SSH
ufw:
rule: allow
name: OpenSSH
state: enabled
- name: Create a new user
user:
name: devuser
password: "{{ 'password123' | password_hash('sha512') }}"
state: present
groups: sudo
任務說明
- 更新和升級軟體套件:確保伺服器擁有最新的更新和安全性修補程式。
- 安裝常用軟體套件:安裝以下必備工具:
curl、wget和git。 - 啟用 UFW:設定防火牆以允許 SSH 存取。
- 建立新使用者:加入具有 sudo 權限的新使用者。
- 設定主機名稱:設定伺服器的主機名稱。
儲存並離開檔案。
步驟 5:執行 Playbook
執行 Playbook 以套用設定:
ansible-playbook -i inventory setup.yml
Ansible 會記錄每個任務的進度。如果所有任務都成功完成,你的 Ubuntu Server 將完成全部設定。
輸出如下:
uadmin@u2204-001:~$ sudo ansible-playbook -i inventory setup.yml
PLAY [Configure Ubuntu Server] ***************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************
ok: [192.168.50.145]
ok: [192.168.50.42]
TASK [Update and upgrade apt packages] *******************************************************************************
^X^C [ERROR]: User interrupted execution
uadmin@u2204-001:~$ sudo nano setup.yml
uadmin@u2204-001:~$ sudo ansible-playbook -i inventory setup.yml
PLAY [Configure Ubuntu Server] ***************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************
ok: [192.168.50.145]
ok: [192.168.50.42]
TASK [Update and upgrade apt packages] *******************************************************************************
ok: [192.168.50.42]
ok: [192.168.50.145]
TASK [Install common packages] ***************************************************************************************
changed: [192.168.50.145]
changed: [192.168.50.42]
TASK [Enable UFW and allow SSH] **************************************************************************************
changed: [192.168.50.145]
changed: [192.168.50.42]
TASK [Create a new user] *********************************************************************************************
changed: [192.168.50.42]
changed: [192.168.50.145]
PLAY RECAP ***********************************************************************************************************
192.168.50.145 : ok=5 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.50.42 : ok=5 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
步驟 6:驗證設定
6.1 檢查已安裝的軟體套件
登入其中一台目標伺服器,驗證常用軟體套件是否已安裝:
curl --version
git --version
6.2 檢查防火牆狀態
驗證防火牆已啟用:
sudo ufw status
6.3 檢查新使用者
確保新使用者已建立:
cat /etc/passwd | grep devuser

進階用例
熟悉基本 Playbook 後,你可以探索更進階的用例:
- 部署應用程式:使用 Ansible 安裝和設定 Web 伺服器(例如 Nginx、Apache)或資料庫(例如 MySQL、PostgreSQL)。
- 管理多個環境:分別為預發佈、生產和開發環境建立單獨的清單檔案。
- 使用角色:將 Playbook 組織成可重複使用的角色,以應對複雜的設定。
- 與 CI/CD 整合:將伺服器設定自動化作為 CI/CD 流水線的一部分。
參考:
結論
Ansible 是自動完成伺服器設定和組態的強大工具。在本指南中,我們介紹了:
- 在控制節點上安裝 Ansible。
- 設定對目標伺服器的 SSH 存取。
- 編寫並執行一個基本的 Playbook,以自動完成 Ubuntu Server 的設定。
利用 Ansible,你可以節省時間、減少錯誤,並確保整個基礎架構的一致性。無論你管理的是單台伺服器還是數百台伺服器,Ansible 都是現代 DevOps 工作流程中不可或缺的工具。
2 thoughts on “24. Automating Ubuntu Server Setup with Ansible: A Practical Guide”