1. 使用Ansible Playbook配置Web服务器
任务目标
编写一个Ansible Playbook,在远程Ubuntu主机上完成Nginx的安装、站点配置、服务启动与开机自启设置。执行完毕后,通过HTTP访问应能返回自定义的欢迎页面。
环境准备
控制节点需安装Ansible(≥2.9),目标主机为Ubuntu 20.04/22.04,并确保控制节点可通过SSH密钥免密登录目标主机。目标主机IP或主机名需写入控制节点的/etc/ansible/hosts或指定inventory文件。
Playbook实现
---
- name: Configure web server with Nginx
hosts: webservers
become: yes
vars:
nginx_port: 8080
welcome_message: "Welcome to Ansible-managed Nginx!"
tasks:
- name: Update apt cache
apt:
update_cache: yes
cache_valid_time: 3600
- name: Install Nginx
apt:
name: nginx
state: present
- name: Create custom index.html
copy:
content: |
<html>
<head><title>Ansible Demo</title></head>
<body>
<h1>{{ welcome_message }}</h1>
<p>Server IP: {{ ansible_default_ipv4.address }}</p>
</body>
</html>
dest: /var/www/html/index.html
owner: www-data
group: www-data
mode: '0644'
- name: Configure Nginx to listen on custom port
lineinfile:
path: /etc/nginx/sites-available/default
regexp: '^(\s*)listen\s+80;'
line: '\1listen {{ nginx_port }};'
backrefs: yes
- name: Ensure Nginx is started and enabled at boot
service:
name: nginx
state: started
enabled: yes
- name: Open firewall port (if ufw is active)
ufw:
rule: allow
port: "{{ nginx_port }}"
proto: tcp
when: ansible_facts.ufw.active == true
运行与验证
运行命令:
ansible-playbook -i inventory.ini nginx_playbook.yml
其中inventory.ini内容示例:
[webservers]
192.168.1.100 ansible_user=ubuntu
验证步骤:
- Playbook执行结束后,所有task应显示
ok或changed,无failed。 - 在控制节点执行
curl http://<目标主机IP>:8080,应返回包含Welcome to Ansible-managed Nginx!的HTML页面。 - 执行
ssh 目标主机 "systemctl is-enabled nginx",输出应为enabled,确认开机自启已设置。
常见问题
- 端口被占用:若8080被占用,修改
vars中的nginx_port值并重新执行Playbook。 - 防火墙未放行:若curl超时,检查目标主机防火墙状态,或手动执行
sudo ufw allow 8080/tcp。 - apt源更新慢:可预先在目标主机配置国内apt镜像源,或调整
cache_valid_time减少更新频率。