第一步:在控制节点安装 Ansible
更新系统包缓存:
sudo yum update -y安装 EPEL 仓库(如果尚未安装):
sudo yum install -y epel-release安装 Ansible:
sudo yum install -y ansible验证安装:
ansible --version你应该能看到 Ansible 的版本信息。
第二步:配置 Ansible 主机清单 (Inventory)
Ansible 需要知道它要管理哪些主机。编辑默认的主机清单文件:
sudo vim /etc/ansible/hosts在文件中添加以下内容,定义一个名为 webservers 的主机组
[webservers]
web-server-1
web-server-2
# 如果主机使用非标准 SSH 端口或 IP,可以这样写:
# web-server-1 ansible_host=192.168.1.100 ansible_port=2222
# web-server-2 ansible_host=192.168.1.101第三步:创建 Ansible Playbook
创建一个目录来存放 Playbook 文件:
mkdir ~/ansible-playbooks
cd ~/ansible-playbooks创建一个名为 deploy_nginx.yml 的 Playbook 文件:
vim deploy_nginx.yml将以下内容粘贴到 deploy_nginx.yml 文件中:
---
# 定义这个 Play 的目标主机组和连接方式
- name: Deploy Nginx and a sample page
hosts: webservers # 应用到 'webservers' 组中的所有主机
become: yes # 获取 root 权限来执行任务,这对于安装软件包和管理服务是必要的
# vars: # 可选:定义变量
# nginx_port: 80
tasks:
# 任务 1: 安装 Nginx
- name: Install Nginx package
yum: # 使用 yum 模块
name: nginx # 要安装的包名
state: present # 确保包已安装
# update_cache: yes # 可选:在安装前更新包缓存
notify: restart nginx # 如果这个任务的状态是 "changed" (例如,安装了新包),则触发 "restart nginx" handler
# 任务 2: 确保 Nginx 服务已启动并设置为开机自启
- name: Ensure Nginx service is started and enabled
systemd: # 使用 systemd 模块管理服务
name: nginx
state: started # 启动服务
enabled: yes # 设置开机自启
# 任务 3: 创建一个简单的静态 HTML 页面
- name: Create a simple index.html file
copy: # 使用 copy 模块
content: | # 定义文件内容
<html>
<head>
<title>Ansible Deployed Page</title>
</head>
<body>
<h1>Hello from {{ ansible_hostname }}!</h1>
<p>This page was deployed using Ansible.</p>
</body>
</html>
dest: /usr/share/nginx/html/index.html # 目标文件路径
owner: nginx
group: nginx
mode: '0644' # 设置文件权限
# 任务 4: 配置防火墙 (如果 firewalld 正在运行)
- name: Allow HTTP traffic through firewall
firewalld: # 使用 firewalld 模块
service: http # 允许 http 服务
permanent: yes # 永久生效
state: enabled # 启用规则
notify: reload firewalld # 如果规则有变化,触发 "reload firewalld" handler
# Handlers: 定义可以被 notify 触发的任务
handlers:
- name: restart nginx
systemd:
name: nginx
state: restarted # 重启 Nginx 服务
- name: reload firewalld
systemd:
name: firewalld
state: reloaded # 重新加载防火墙规则