24. 使用 Ansible 自動設定 Ubuntu Server:實用指南

簡介

手動設定和管理伺服器可能是一個繁瑣且容易出錯的過程,尤其是在擁有多台伺服器或重複設定任務的環境中。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 之前,請確保你具備以下條件:

  1. 控制節點:安裝了 Ansible 的機器(你的本機系統或專用伺服器)。
  2. 目標伺服器:你想要設定的 Ubuntu 伺服器(本地端或雲端)。
  3. 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  

任務說明

  1. 更新和升級軟體套件:確保伺服器擁有最新的更新和安全性修補程式。
  2. 安裝常用軟體套件:安裝以下必備工具: curl、 wget和 git。
  3. 啟用 UFW:設定防火牆以允許 SSH 存取。
  4. 建立新使用者:加入具有 sudo 權限的新使用者。
  5. 設定主機名稱:設定伺服器的主機名稱。

儲存並離開檔案。


步驟 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 社群文件


結論

Ansible 是自動完成伺服器設定和組態的強大工具。在本指南中,我們介紹了:

  • 在控制節點上安裝 Ansible。
  • 設定對目標伺服器的 SSH 存取。
  • 編寫並執行一個基本的 Playbook,以自動完成 Ubuntu Server 的設定。

利用 Ansible,你可以節省時間、減少錯誤,並確保整個基礎架構的一致性。無論你管理的是單台伺服器還是數百台伺服器,Ansible 都是現代 DevOps 工作流程中不可或缺的工具。

2 thoughts on “24. Automating Ubuntu Server Setup with Ansible: A Practical Guide”

發表留言