软件开发 --- Ansible 之初体验
一键大规模应用部署
Ansible 是一个强大的自动化工具,广泛用于配置管理、应用部署、任务自动化等场景。接下来,我将通过一个具体的例子,展示如何使用 Ansible 来自动化常见的操作,比如安装软件、配置服务、管理文件等。
示例:使用 Ansible 安装和配置 Nginx
假设我们有多个远程服务器(如两台 Web 服务器),我们需要自动化以下任务:
- 在这些服务器上安装 Nginx。
- 配置 Nginx 为反向代理。
- 启动并确保 Nginx 在这些服务器上开机自启。
我们将使用 Ansible 来完成这些操作。
一、准备工作
-
安装 Ansible:首先,在本地机器(控制节点)上安装 Ansible。
sudo apt update sudo apt install ansible
-
配置 SSH 免密码登录:确保控制节点可以通过 SSH 无密码登录到目标服务器。假设目标服务器的 IP 地址是
192.168.1.10
和192.168.1.11
,并且我们将使用user
用户。在控制节点上生成 SSH 密钥:
ssh-keygen -t rsa -b 2048
然后将公钥复制到目标服务器:
ssh-copy-id user@192.168.1.10 ssh-copy-id user@192.168.1.11
-
配置 Ansible 主机清单:Ansible 需要一个主机清单文件来管理目标服务器。默认情况下,主机清单位于
/etc/ansible/hosts
,你可以创建自己的主机清单文件。这里我们创建一个名为inventory
的文件,内容如下:[webservers] 192.168.1.10 192.168.1.11
二、编写 Ansible Playbook
Playbook 是 Ansible 自动化操作的核心部分,它是用 YAML 语言编写的,描述了要在目标主机上执行的任务。我们将创建一个 Playbook 来安装并配置 Nginx。
1. 创建 install_nginx.yml
文件
这个 Playbook 将会做以下事情:
- 在所有 Web 服务器上安装 Nginx。
- 配置 Nginx 为反向代理。
- 启动并确保 Nginx 服务开机自启。
---
- name: Install and configure Nginx on web servers
hosts: webservers
become: yes # 以 root 权限执行任务
tasks:
- name: Update apt cache
apt:
update_cache: yes
- name: Install Nginx
apt:
name: nginx
state: present # 安装 nginx
- name: Copy the custom nginx config file
copy:
src: ./nginx.conf # 本地配置文件
dest: /etc/nginx/nginx.conf # 目标服务器路径
owner: root
group: root
mode: '0644'
- name: Ensure nginx service is running
service:
name: nginx
state: started
enabled: yes # 确保 Nginx 启动并开机自启
- name: Check if nginx is working
uri:
url: http://localhost
status_code: 200
三、创建 Nginx 配置文件
在上面的 Playbook 中,我们使用了一个 nginx.conf
配置文件。假设你有一个自定义的 Nginx 配置文件(可以是简单的反向代理配置)。例如,创建一个 nginx.conf
文件如下:
server {
listen 80;
location / {
proxy_pass http://localhost:8080; # 假设有一个应用运行在 8080 端口
}
}
四、执行 Playbook
在本地机器上执行以下命令来运行 Playbook 并完成自动化任务:
ansible-playbook -i inventory install_nginx.yml
五、分析 Playbook 执行结果
执行上述命令后,Ansible 会连接到 inventory
文件中的所有服务器并执行任务。执行过程中的输出会显示每个任务的状态(是否成功、失败等)。
例如,执行结果可能类似于:
PLAY [Install and configure Nginx on web servers] ***
TASK [Update apt cache] ***
ok: [192.168.1.10]
ok: [192.168.1.11]
TASK [Install Nginx] ***
changed: [192.168.1.10]
changed: [192.168.1.11]
TASK [Copy the custom nginx config file] ***
changed: [192.168.1.10]
changed: [192.168.1.11]
TASK [Ensure nginx service is running] ***
ok: [192.168.1.10]
ok: [192.168.1.11]
TASK [Check if nginx is working] ***
ok: [192.168.1.10]
ok: [192.168.1.11]
PLAY RECAP ***
192.168.1.10 : ok=5 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.1.11 : ok=5 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
六、常见的 Ansible 模块
-
apt:用于管理 Debian 系列操作系统(如 Ubuntu)上的软件包。例如:
- name: Install a package apt: name: nginx state: present
-
yum:用于管理 RedHat 系列操作系统(如 CentOS)上的软件包。
- name: Install a package yum: name: nginx state: present
-
copy:用于将文件从控制节点复制到目标主机。
- name: Copy nginx config copy: src: ./nginx.conf dest: /etc/nginx/nginx.conf
-
service:用于管理服务的状态(启动、停止、重启等)。
- name: Ensure nginx is running service: name: nginx state: started enabled: yes
-
uri:用于检查 web 服务是否可用。
- name: Check if nginx is working uri: url: http://localhost status_code: 200
总结
通过上面的例子,我们展示了如何使用 Ansible 来完成一项典型的自动化任务:在多个服务器上安装并配置 Nginx。Ansible 提供了丰富的模块来管理服务器配置,简化了大规模部署和管理的工作。此外,Ansible 的 Playbook 语法简洁易懂,适合用于各种自动化任务。