🏡作者主页:************点击!****************
🐧Linux基础知识(初学):点击!****
🐧Linux高级管理防护和群集专栏:************点击!****************
🔐Linux中firewalld防火墙:点击!****
Ansible自动化运维:点击!
⏰️创作时间:2024年8月8日8点8分
目录
在现代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基础设施的现代化。
成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"
"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"
神秘泣男子