快速入門 Ansible Playbook:如何遠端配置與部署 WEB 服務
前言
在 DevOps 的實務應用中,Ansible Playbook 常被用來快速配置系統環境或部署 Web 服務。 其特點是使用可讀性高的 YAML 格式來描述配置指令,並透過 SSH 與每個遠端節點溝通, 因此無需在遠端主機上額外安裝代理程式。
本教學將示範如何使用 Ansible 來遠端配置與部署 Web 服務,包含環境安裝、Inventory 配置、 Playbook 編寫及常見問題排查。
1. 安裝 Ansible 相關套件
1.1 安裝 Ansible
在 Ubuntu/Debian 系統上,可以使用以下指令安裝:
sudo apt update
sudo apt install -y ansible
在 CentOS/RHEL 系統上,可以使用:
sudo yum install -y epel-release
sudo yum install -y ansible
安裝完成後,可使用以下指令確認 Ansible 是否安裝成功:
ansible --version
2. 配置 Inventory 來保存遠端主機資訊
Ansible 透過 Inventory(清單) 來管理遠端主機資訊,例如 IP 位址、登入帳密及 SSH 連線設定。
2.1 設定 Inventory
編輯 Ansible 預設的 Inventory 檔案:
sudo vim /etc/ansible/hosts
新增以下內容,定義目標主機群組 mywebapp
:
[mywebapp:vars]
ansible_port=22
ansible_ssh_user=admin
ansible_ssh_pass=12345678
[mywebapp]
10.36.172.210
2.2 測試連線
使用 ansible -m ping
測試與遠端主機的連線:
ansible mywebapp -m ping
成功回應範例如下:
10.36.172.210 | SUCCESS => {
"changed": false,
"ping": "pong"
}
3. 編寫 Ansible Playbook
3.1 建立 Playbook 檔案
vim deploy_web.yml
3.2 Playbook 內容
---
- name: 部署靜態網站
hosts: mywebapp
become: true
tasks:
- name: 創建網站目錄
file:
path: /home/admin/www
state: directory
owner: admin
group: admin
mode: '0755'
- name: 複製靜態網站檔案到遠端主機
copy:
src: ../dist/
dest: /home/admin/www
owner: admin
group: admin
mode: '0755'
- name: 設定 Nginx 配置(可選)
template:
src: nginx.conf.j2
dest: /etc/nginx/sites-available/mywebapp
notify: 重啟 Nginx
handlers:
- name: 重啟 Nginx
service:
name: nginx
state: restarted
3.3 執行 Playbook
ansible-playbook deploy_web.yml
4. 常見問題排查(Troubleshooting)
問題 1:SSH 連線失敗
UNREACHABLE! => {"changed": false, "msg":
"Authentication failed.", "unreachable": true}
解決方案:
- 確保
ansible_ssh_user
和ansible_ssh_pass
正確。 - 測試 SSH 手動連線:
ssh admin@10.36.172.210
問題 2:目錄權限不足
fatal: [10.36.172.210]: FAILED! =>
{"msg": "Permission denied"}
問題 3:Ansible 版本不相容
ERROR! Unexpected Exception, this is probably a bug:
'module' object has no attribute 'SSL_ST_INIT'
結論
透過 Ansible Playbook,可以輕鬆管理和部署遠端 Web 服務。本教學示範了 Ansible 安裝、Inventory 設定、Playbook 編寫,以及常見問題排查,幫助你快速上手 Ansible,提升系統自動化能力! 🚀
留言
張貼留言