Apache有着提供http协议服务、多个虚拟主机、CGI、反向代理、负载均衡、路径别名、丰富的用户认证机制和支持第三方模块等功能。在CentOS/Ubuntu系统中,我们可以直接下载httpd/apache2包,里面会带有Apache服务,例如笔者在CentOS8通过yum下载的httpd包,查看Apache版本已经是2.4.37,算是比较新的​(如下图)​。

ansible-playbook实现Apache批量部署_centos

    现阶段来看,部分CentOS版本中直接安装的Apache已经够用,但随着Apache新版本的推出,一些老版本的CentOS通过yum安装可能就不太能满足需求,因此本次实验笔者将通过yum和编译安装两种方式在CentOS主机上演示如何利用ansible-playbook实现Apache的批量部署,并对不同主机提供以各自IP地址为内容的index.html。

  1. yum方式部署

   ​ 与上一篇实验相同,笔者准备了5台虚拟主机,ip分别为10.0.0.152-156,其中10.0.0.152的主机为ansible主控制端,取名为ansible;ip为10.0.0.154-156的3台虚拟主机作为需要部署Apache服务的被控制端,分别取名web1、web2和web3。

1.1 主控制端配置

1.1.1 下载ansible

    主控制端ansible主机下载ansible。

ansible-playbook实现Apache批量部署_编译安装_02

1.1.2 基于key验证

    笔者这边还是用脚本来做基于key验证的,脚本内容可在上一篇查看。

ansible-playbook实现Apache批量部署_centos_03

ansible-playbook实现Apache批量部署_centos_04

1.1.3 设置主机清单

    打开/etc/ansible/hosts文件添加主机清单,根据此次实验的规划,笔者将10.0.0.154-156的3台主机放在websrvs分组中。

ansible-playbook实现Apache批量部署_apache_05

1.1.4 检测是否可达被控制端

    在完成基于key验证和设置主机清单的基础上检测ansible主控制端是否可达被控端的主机。

ansible-playbook实现Apache批量部署_apache_06

1.2 创建playbook剧本

    因是直接通过yum来安装httpd包进行Apache的批量部署,所有剧本会比较简单,设置好对应的目标主机分组、软件名称及状态等即可完成。将不同主机的ip显示在index.html部分,因笔者直接执行hostname -I会有两个地址,所以需利用awk来取值。

ansible-playbook实现Apache批量部署_centos_07

1.3 运行playbook剧本

    在运行playbook剧本之前,先查看一下是否有语法错误,也可以使用-C选项模拟运行一遍,在确认可行的情况下运行playbook剧本。

ansible-playbook实现Apache批量部署_编译安装_08

1.4 检测环节

    在完成上一步的操作后,利用curl命令分别去查看websrvs分组中的3台主机web网页,均能显示出对应的ip,也能通过浏览器正常查看。

ansible-playbook实现Apache批量部署_centos_09

ansible-playbook实现Apache批量部署_apache_10

ansible-playbook实现Apache批量部署_apache_11

ansible-playbook实现Apache批量部署_centos_12


  1. 编译安装方式部署

    编译安装方式也是要先在ansible主控制端下载ansible服务,同时做好与被控制端主机间的基于key验证,上一篇和本篇开头都有讲到这两部分,这里就不多做演示。

2.1 下载压缩包

    Apache的源码包可通过官网​(下载选择页面:https://dlcdn.apache.org//httpd/)​进行下载,目前已更新到2.4.53版本,笔者就用此版本来演示。

ansible-playbook实现Apache批量部署_编译安装_13

ansible-playbook实现Apache批量部署_apache_14

2.2 创建service文件

    service文件规定了服务的启动命令和启动类型等,编译安装形成的service文件并不符合我们日常使用httpd服务的习惯,因此可以找一个已安装好httpd服务的主机,根据/usr/lib/systemd/system/目录下的httpd.service文件作为参考来编写,在后面的yaml文件中将此文件拷贝到被控制端主机的对应目录下​(如下图)​。

ansible-playbook实现Apache批量部署_编译安装_15

2.3 创建playbook剧本

    剧本中需设定好被控制端的主机ip或分组;remote_user设为root避免出现权限问题;由于是编译安装,搜集信息的话会影响执行速度,gather_facts设为no关闭掉。

    tasks部分从上到下分别为:被控制端安装依赖包、创建压缩包解压路径、解压Apache压缩包到被控制端目录、创建apache组、创建apache用户、进入解压包目录后​运行configure文件指定安装路径和配置文件路径、编译、安装、创建软链接、修改默认的Apache服务用户、生成PATH变量、拷贝创建的service文件到被控制端对应目录、修改网页内容、启动服务​(如下图)​。

ansible-playbook实现Apache批量部署_编译安装_16

ansible-playbook实现Apache批量部署_centos_17

2.4 运行playbook剧本

    在执行剧本之前,先检查一下是否有语法问题,建议先用-C选项做一下试运行,或者找一台主机先走一遍看能否走通,确认有效后再批量执行,语法没问题不代表剧本能走通。

ansible-playbook实现Apache批量部署_编译安装_18

ansible-playbook实现Apache批量部署_apache_19

ansible-playbook实现Apache批量部署_centos_20

2.5 检测环节

    playbook剧本能走通的情况下,使用curl命令去查看两台被控制端的web页面,均能显示对应的ip,同样能在浏览器中查看​(如下图)​。

ansible-playbook实现Apache批量部署_apache_21

ansible-playbook实现Apache批量部署_centos_22

ansible-playbook实现Apache批量部署_centos_23