Ansible自动化运维中剧本角色(roles)来完成apache服务操作

🏡作者主页:************点击!****************

🐧Linux基础知识(初学):点击!****

🐧Linux高级管理防护和群集专栏:************点击!****************

🔐Linux中firewalld防火墙:点击!****

Ansible自动化运维:点击!

⏰️创作时间:2024年8月8日8点8分


目录

1.编写YAML

2.执行剧本

2.测试结果

4.修改端口号8888

1.编写剧本(角色)

目录介绍

files:

tasks:

handlers:

templates:

编写脚本

总结


在现代IT运维中,自动化已经成为提升效率和降低错误率的关键手段。Ansible作为一种强大的自动化工具,**通过剧本(Playbooks)和角色(Roles)使得复杂的配置管理变得简单而高效。**本文将探讨如何利用Ansible的角色功能来实现Apache服务的自动化管理。我们将通过定义角色结构、编写剧本以及执行相关操作,展示如何轻松部署和管理Apache Web服务器,从而提高运维工作的灵活性和可维护性。无论是在开发环境还是生产环境,通过Ansible,我们都能实现快速、可靠的服务部署与管理。

以下分开来讲解首先就是 单独的步骤 最后才是使用定义角色目录的方式来完成一整套流程操作

1.编写YAML

实现要求

1.安装apache

2.修改端口号为8080

3.启动apache服务

bash 复制代码
vim a.yaml
---
- hosts: web
  remote_user: root
  tasks:
    - name: install httpd
      yum:
        name: httpd
        state: present
      tags:
        - aaa
​
    - name: change apache port
      shell: sed -i 's/Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf
      tags:
        - bbb
​
    - name: start apache
      service:
        name: httpd
        state: started
        enabled: yes
      tags:
        - ccc
...

1.剧本结构
hosts:

指定了目标主机组为web,即所有在该组中的主机将会执行此剧本中的任务。

remote_user:

设置为root,表示以root用户身份连接目标主机,确保有足够的权限执行安装和配置操作。

2.任务列表
install httpd:

使用yum模块安装Apache HTTP服务器(httpd)。

state: present确保httpd包被安装。

tags: aaa允许在执行时通过标签选择性地运行此任务。

change apache port:

使用shell模块执行命令,修改Apache配置文件,将监听端口从80改为8080。

这个步骤是为了避免与其他服务的端口冲突。

tags: bbb同样允许通过标签选择性地执行此任务。

start apache:

使用service模块启动Apache服务,并设置为开机自启。

state: started确保服务正在运行,enabled: yes确保服务在系统启动时自动启动。

tags: ccc便于通过标签选择性地执行此任务。

使用ansible-playbook 来检测语法是否有问题

bash 复制代码
​
[root@localhost ~] ansible-playbook --syntax-check a.yaml 
​
playbook: a.yaml

2.执行剧本

确认无误之后执行

bash 复制代码
ansible-playbook a.yaml

2.测试结果

回到客户端检测是否成功的下载了httpd和修改了端口号以及启动服务

bash 复制代码
systemctl status httpd
netstat -nultp | grep httpd
tcp6       0      0 :::8080                 :::*                    LISTEN      3039/httpd

可以看到端口号确实为8080.

4.修改端口号8888

单独的修改端口号,大家都知道修改完成之后不会立即生效,需要重启服务或者重载才生效。

以下实验就成功的解决了找个问题

注意!之前我们用sed把80端口修改为8080 现在需要修改sed语句 8080修改为8888

编写脚本

---
- hosts: web
  remote_user: root
  tasks:
    - name: change apache port
      shell: sed -i 's/Listen 8080/Listen 8888/' /etc/httpd/conf/httpd.conf
      notify: restart httpd server
​
  handlers:
    - name: restart httpd server
      service:
        name: httpd
        state: restarted
...

检测语法

[root@localhost ~]# ansible-playbook --syntax-check a.yaml 
​
playbook: a.yaml
[root@localhost ~]# ansible-playbook a.yaml

执行脚本

遇到问题先不要慌张一个个去排查,查看apache的报错日志

我发现是我这台主机的Selinux没有关闭导致无法启动成功

关闭重启以下即可解决成功

1.编写剧本(角色)

创建好所需文件夹

mkdir -p /etc/ansible/roles/apache/{files,tasks,handlers,templates}

目录介绍

files:

存放静态文件,如配置文件、脚本或其他需要直接复制到目标主机的文件。 这些文件可以在剧本中通过 copy 或 template 模块进行引用。

tasks:

用于定义具体的任务,**这些任务是剧本的核心部分。**通常会有一个 main.yml 文件,里面列出所有需要执行的操作,如安装软件、修改配置等。

handlers:

存放处理程序(handlers)**,这些是特殊的任务,仅在被其他任务触发时执行,**例如在配置文件更改后重启服务。 也通常会有一个 main.yml 文件来定义这些处理程序。

templates:

用于存放Jinja2模板文件,这些模板可以动态生成配置文件。 在剧本中可以使用 template 模块渲染这些模板,并将结果复制到目标主机。

这是整体的文件夹结构树(主要看roles下的目录文件夹)

[root@localhost ansible]# tree
.
├── ansible.cfg
├── hosts
├── httpd.yml
└── roles
    └── apache
        ├── file
        ├── handlers
        │   └── main.yml
        ├── tasks
        │   └── main.yml
        └── templates

我们进入tasks目录编辑main.yml

以下是完整路径

vim /etc/ansible/roles/apache/tasks/main.yml
---
- name: install apache  # 安装 Apache HTTP 服务器
  yum:
    name: httpd
    state: present


- name: start apache  # 启动 Apache 服务并设置为开机自启
  service:
    name: httpd
    state: started
    enabled: yes


- name: change apache Port  # 修改 Apache 配置文件,将监听端口从 80 更改为 8080
  shell: sed -i 's/Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf
  notify:
  - restart httpd  # 通知重启 Apache 服务以应用更改

在 /etc/ansible/roles/apache/handlers/main.yml 文件中,定义了一个处理程序,用于重启Apache HTTP服务器。以下是该文件的详细介绍:

vim /etc/ansible/roles/apache/handlers/main.yml 


---
- name: restart httpd
  service:
    name: httpd
    state: restarted
...

name:

指定要管理的服务名称,这里是 httpd,即Apache HTTP服务器。
state:

设置为 restarted,表示在调用此处理程序时,会重启Apache服务。这通常在配置文件发生变化后调用,以使更改生效。

编写脚本

再编写一个执行剧本的脚本

vim httpd.yml

---
- hosts: web
  remote_user: root
  roles:
  - apache
...

执行

进入到你创建的执行脚本目录

ansible-playbook httpd.yml

可以看到脚本执行完毕 实验结束

总结

本文介绍了如何利用Ansible实现Apache HTTP服务器的自动化管理。通过编写YAML剧本和定义角色,我们成功完成了Apache的安装、端口修改和服务启动。这个过程展示了Ansible的灵活性和高效性,使得运维工作更加简洁和可靠。通过自动化,我们能够提升工作效率,减少人为错误,推动IT基础设施的现代化。

成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"

"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"

神秘泣男子

相关推荐
gopher9511几秒前
linux驱动开发-中断子系统
linux·运维·驱动开发
河南宽信李工1503806 168636 分钟前
测绘航空摄影专项资质在洛阳市的获取流程
服务器
吃面不喝汤661 小时前
如何配置和使用自己的私有 Docker Registry
运维·docker·容器
Rookie_explorers1 小时前
Linux下go环境安装、环境配置并执行第一个go程序
linux·运维·golang
学习向前冲1 小时前
AD域控服务器
运维·服务器
青柠视频云1 小时前
青柠视频云——视频丢包(卡顿、花屏、绿屏)排查
服务器·网络·音视频
hgdlip1 小时前
查看ip地址的方法有几种?探索多样方法
运维·服务器·ip地址
丶21362 小时前
【Nginx】在 Docker 上安装 Nginx 的详细指南
运维·nginx·docker
danplus2 小时前
node发送邮件:如何实现Node.js发信功能?
服务器·node.js·外贸开发信·邮件群发·蜂邮edm邮件营销·邮件接口·营销邮件
神即道 道法自然 如来2 小时前
Jenkins怎么设置每日自动执行构建任务?
运维·jenkins