编写playbook源码编译安装nginx-1.16.1
在实际生产中,当需要在多台远程主机上部署nginx的web服务,如果手动在每台机器上手动编译时,需要重复编译N多次,这样会做一些毫无意义的额外工作,效率低下,那有什么方法可以实现自动化的部署呢,有的人肯定想到编写脚本,这样也可以实现自动化安装部署,但是如果部署的机器数量达到一定量的时候,显然使用脚本部署就不合适,还有另外一种方法就是ansible了,ansible是提供了一种playbook的方法,可以将需要在某些机器上做的工作提前写在playbook里,playbook顾名思义就是“剧本”的意思,就像拍电影一样,当导演写好剧本后,演员可以安装剧本完成一段一段的桥段,不同的演员完成不同的角色的演绎,电影即是角色和桥段的集合,而ansible就类似于导演的作用,而playbook就是剧本,他提供了roles即角色,通过不同的角色创建,可以完成不同的工作。
Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。值得注意的是playbook是通过YAML格式来进行描述定义的。
1.playbook简单介绍
1.1.playbook核心要素
Hosts: 执行的远程主机列表
Tasks:任务,由模板定义的操作列表
Variables:变量
Templates:模板,即使用模板语法的文件
Handlers:处理器 ,当某条件满足时,触发执行的操作
Roles:角色
1.2.roles
/roles/project/ :项目名称,有以下子目录
files/ :存放由copy或script模块等调用的文件
templates/:template模块查找所需要模板文件的目录
tasks/:定义task,role的基本元素,至少应该包含一个名为main.yml的文件; 其它的文件需要在此文件中通过include进行包含
handlers/:至少应该包含一个名为main.yml的文件;其它的文件需要在此 文件中通过include进行包含
vars/:定义变量,至少应该包含一个名为main.yml的文件;其它的文件需要 在此文件中通过include进行包含
meta/:定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为main.yml的文件,其它文件需在此文件中通过include进行包含
default/:设定默认变量时使用此目录中的main.yml文件
2.playbook部署nginx具体步骤
2.1.准备环境
ansible主机:centos7,ip=192.168.38.7/24
两台被控主机:centos7,ip1=192.168.38.17/24,ip2=192.168.38.37/24
2.2.实现ansible主控主机实现与远程主机基于key验证的免密登录
1.生成私钥:ssh-keygen
[root@centos7_v7 ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:B1FQfA0QBWMZW65LdbzjyseOZruRwLneU2u7bq87RYU root@centos7.localdomain
The key's randomart image is:
+---[RSA 2048]----+
| o=XB+o . |
| oo=..E .|
| . ..o o .|
| o + . ..|
| S B o. |
| o + o...|
| o oo.o |
| . o+