【自动化运维神器Ansible】playbook实践示例:HTTPD安装与卸载全流程解析

目录

[1 HTTPD安装Playbook深度解析](#1 HTTPD安装Playbook深度解析)

[1.1 安装Playbook完整代码](#1.1 安装Playbook完整代码)

[1.2 任务详解](#1.2 任务详解)

任务1:安装HTTPD包

任务2:安装配置文件

任务3:修改配置文件

任务4:创建网站目录

任务5:部署网站内容

任务6:启动并设置开机自启

[1.3 安装流程](#1.3 安装流程)

[1.4 执行示例](#1.4 执行示例)

[2 HTTPD卸载Playbook深度解析](#2 HTTPD卸载Playbook深度解析)

[2.1 卸载Playbook完整代码](#2.1 卸载Playbook完整代码)

[2.2 任务详解](#2.2 任务详解)

任务1:卸载HTTPD包

任务2:删除Apache用户

任务3:删除配置文件

任务4:删除网站内容

[2.3 卸载流程图](#2.3 卸载流程图)

[2.4 执行示例](#2.4 执行示例)

[3 实践:完整生命周期管理](#3 实践:完整生命周期管理)

[3.1 文件结构准备](#3.1 文件结构准备)

[3.2 Inventory文件(inventory)](#3.2 Inventory文件(inventory))

[3.3 配置文件示例(files/httpd.conf)](#3.3 配置文件示例(files/httpd.conf))

[3.4 首页文件示例(files/index.html)](#3.4 首页文件示例(files/index.html))

[3.5 完整执行流程](#3.5 完整执行流程)

[3.6 验证命令](#3.6 验证命令)

[4 高级优化](#4 高级优化)

[4.1 使用变量增强灵活性](#4.1 使用变量增强灵活性)

[4.2 条件任务与循环](#4.2 条件任务与循环)

[4.3 错误处理与重试](#4.3 错误处理与重试)

[4.4 标签管理](#4.4 标签管理)

[5 总结](#5 总结)


1 HTTPD安装Playbook深度解析

1.1 安装Playbook完整代码

复制代码
---
- hosts: websrvs
  remote_user: root
  gather_facts: no
  tasks:
    - name: Install httpd
      yum: name=httpd state=present
    
    - name: Install configure file
      copy: src=files/httpd.conf dest=/etc/httpd/conf/
    
    - name: modify config
      lineinfile: 
        path: /etc/httpd/conf/httpd.conf 
        regexp: '^Listen' 
        line: 'Listen 8080'
    
    - name: mkdir website dir
      file: path=/data/html state=directory
    
    - name: web html
      copy: 
        src: files/index.html 
        dest=/data/html/
    
    - name: start service
      service: name=httpd state=started enabled=yes

1.2 任务详解

任务1:安装HTTPD包

复制代码
- name: Install httpd
  yum: name=httpd state=present
  • 模块:yum包管理模块(适用于RHEL/CentOS)
  • 参数
    • name=httpd:指定安装包名
    • state=present:确保已安装(幂等操作)
  • 作用:安装Apache HTTP服务器及其依赖包

任务2:安装配置文件

复制代码
- name: Install configure file
  copy: src=files/httpd.conf dest=/etc/httpd/conf/
  • 模块:copy文件复制模块
  • 参数
    • src=files/httpd.conf:源文件路径(相对于Playbook目录)
    • dest=/etc/httpd/conf/:目标目录
  • 作用:覆盖默认配置文件为自定义版本

任务3:修改配置文件

复制代码
- name: modify config
  lineinfile: 
    path: /etc/httpd/conf/httpd.conf 
    regexp: '^Listen' 
    line: 'Listen 8080'
  • 模块:lineinfile文件行管理模块
  • 参数
    • path:目标文件路径
    • regexp='^Listen':匹配以"Listen"开头的行
    • line='Listen 8080':替换为指定内容
  • 作用:修改监听端口为8080(避免与默认80端口冲突)

任务4:创建网站目录

复制代码
- name: mkdir website dir
  file: path=/data/html state=directory
  • 模块:file文件/目录管理模块
  • 参数
    • path=/data/html:目标路径
    • state=directory:确保是目录
  • 作用:创建网站根目录

任务5:部署网站内容

复制代码
- name: web html
  copy: 
    src: files/index.html 
    dest=/data/html/
  • 模块:copy文件复制模块
  • 参数
    • src=files/index.html:源文件
    • dest=/data/html/:目标目录
  • 作用:部署默认首页文件

任务6:启动并设置开机自启

复制代码
- name: start service
  service: name=httpd state=started enabled=yes
  • 模块:service服务管理模块
  • 参数
    • name=httpd:服务名称
    • state=started:确保服务已启动
    • enabled=yes:设置开机自启
  • 作用:启动HTTPD服务并确保持久化

1.3 安装流程

1.4 执行示例

复制代码
# 语法检查
ansible-playbook install_httpd.yml --syntax-check

# 检查模式预演
ansible-playbook install_httpd.yml --check --diff

# 限制执行(仅对192.168.10.31执行)
ansible-playbook install_httpd.yml --limit 192.168.10.31

# 正式执行
ansible-playbook install_httpd.yml

2 HTTPD卸载Playbook深度解析

2.1 卸载Playbook完整代码

复制代码
---
- hosts: websrvs
  remote_user: root
  tasks:
    - name: remove httpd package
      yum: name=httpd state=absent
    
    - name: remove apache user
      user: name=apache state=absent
    
    - name: remove config file
      file: name=/etc/httpd state=absent
    
    - name: remove web html
      file: name=/data/html/ state=absent

2.2 任务详解

任务1:卸载HTTPD包

复制代码
- name: remove httpd package
  yum: name=httpd state=absent
  • 模块:yum包管理模块
  • 参数
    • name=httpd:指定卸载包名
    • state=absent:确保已卸载
  • 作用:彻底删除HTTPD软件包及其依赖

任务2:删除Apache用户

复制代码
- name: remove apache user
  user: name=apache state=absent
  • 模块:user用户管理模块
  • 参数
    • name=apache:指定用户名
    • state=absent:确保用户不存在
  • 作用:删除HTTPD运行专用用户

任务3:删除配置文件

复制代码
- name: remove config file
  file: name=/etc/httpd state=absent
  • 模块:file文件/目录管理模块
  • 参数
    • name=/etc/httpd:目标路径
    • state=absent:确保不存在(递归删除)
  • 作用:删除HTTPD配置文件目录

任务4:删除网站内容

复制代码
- name: remove web html
  file: name=/data/html/ state=absent
  • 模块:file文件/目录管理模块
  • 参数
    • name=/data/html/:目标路径
    • state=absent:确保不存在(递归删除)
  • 作用:删除网站根目录及其内容

2.3 卸载流程图

2.4 执行示例

复制代码
# 语法检查
ansible-playbook remove_httpd.yml --syntax-check

# 检查模式预演
ansible-playbook remove_httpd.yml --check --diff

# 正式执行
ansible-playbook remove_httpd.yml

3 实践:完整生命周期管理

3.1 文件结构准备

复制代码
ansible-httpd/
├── install_httpd.yml
├── remove_httpd.yml
├── files/
│   ├── httpd.conf
│   └── index.html
└── inventory

3.2 Inventory文件(inventory)

复制代码
[websrvs]
192.168.10.30
192.168.10.31

3.3 配置文件示例(files/httpd.conf)

复制代码
ServerRoot "/etc/httpd"
Listen 8080
ServerAdmin admin@example.com
ServerName www.example.com:8080
DocumentRoot "/data/html"

3.4 首页文件示例(files/index.html)

复制代码
<!DOCTYPE html>
<html>
<head>
    <title>Ansible HTTPD Test</title>
</head>
<body>
    <h1>HTTPD Server Deployed by Ansible</h1>
    <p>Server IP: {{ ansible_eth0.ipv4.address }}</p>
</body>
</html>

3.5 完整执行流程

3.6 验证命令

复制代码
# 安装后验证
ansible websrvs -m shell -a "systemctl status httpd"

# 卸载后验证
ansible websrvs -m shell -a "rpm -q httpd"
ansible websrvs -m shell -a "ls -la /etc/httpd"

4 高级优化

4.1 使用变量增强灵活性

复制代码
---
- hosts: websrvs
  vars:
    httpd_port: 8080
    web_root: /data/html
  tasks:
    - name: modify config
      lineinfile: 
        path: /etc/httpd/conf/httpd.conf 
        regexp: '^Listen' 
        line: 'Listen {{ httpd_port }}'
    
    - name: mkdir website dir
      file: path={{ web_root }} state=directory

4.2 条件任务与循环

复制代码
- name: 卸载基于OS的包
  yum: name={{ item }} state=absent
  loop:
    - httpd
    - httpd-tools
  when: ansible_os_family == "RedHat"

- name: 删除多个目录
  file: name={{ item }} state=absent
  loop:
    - /etc/httpd
    - /var/www/html
    - /var/log/httpd

4.3 错误处理与重试

复制代码
- name: 卸载httpd包(带重试)
  yum: name=httpd state=absent
  retries: 3
  delay: 5
  until: result.rc == 0
  register: result
  ignore_errors: yes

4.4 标签管理

复制代码
---
- hosts: websrvs
  tasks:
    - name: 安装httpd
      yum: name=httpd state=present
      tags: install
    
    - name: 卸载httpd
      yum: name=httpd state=absent
      tags: remove
    
    - name: 修改配置
      lineinfile: 
        path: /etc/httpd/conf/httpd.conf 
        regexp: '^Listen' 
        line: 'Listen 8080'
      tags: config
  • 标签执行示例

    仅执行安装任务

    ansible-playbook install_httpd.yml --tags install

    仅执行卸载任务

    ansible-playbook remove_httpd.yml --tags remove

5 总结

通过Ansible Playbook实现HTTPD的全生命周期管理,不仅是技术能力的体现,更是自动化运维思维的升华。掌握安装、配置、卸载的完整流程,能够构建"安全、高效、可追溯"的自动化体系,为企业数字化转型提供坚实支撑。运维人员应持续实践,将手动操作升华为自动化艺术,让技术真正服务于业务价值。

相关推荐
用户0328472220707 小时前
如何搭建本地yum源(上)
运维
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
dayuOK63073 天前
写作卡壳怎么办?我的“5分钟启动法”
人工智能·职场和发展·自动化·新媒体运营·媒体
AC赳赳老秦3 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw