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

相关推荐
Mr_Xuhhh11 分钟前
博客标题:深入理解Shell:从进程控制到自主实现一个微型Shell
linux·运维·服务器
f***24113 小时前
高效自动化管理临时文件的技术方案
运维·自动化
m0_738120723 小时前
应急响应——知攻善防靶场Linux-1详细应急过程
linux·运维·服务器·网络·web安全·ssh
obboda4 小时前
磁盘管理(MBR、LVM)
运维·5g
kylezhao20194 小时前
S7-1200 CPU 与 S7-200 SMART S7通信(S7-1200 作为服务器)
运维·服务器
摸鱼仙人~4 小时前
大模型文章生成的风格个性化与多文体写作:一套可落地的方法论
linux·运维·服务器
xybDIY4 小时前
亚马逊云 Organizations 组织 Link 账号关联与解绑自动化解决方案
运维·自动化·云计算·aws
慕容雪_4 小时前
运维笔记-网络【属性】-【共享】中没有【家庭网络连接(H)】的选项
运维·网络·共享
北京耐用通信4 小时前
耐达讯自动化赋能:Canopen转Profibus网关水泵连接新范式
人工智能·科技·物联网·自动化·信息与通信
AC赳赳老秦5 小时前
Shell 脚本批量生成:DeepSeek 辅助编写服务器运维自动化指令
运维·服务器·前端·vue.js·数据分析·自动化·deepseek