主机互信

生成密钥对,并将公钥发送给其他需要操作的主机

ssh-keygen -t rsa
cd /root/.ssh
ssh-copy-id -i id_rsa.pub root@192.168.1.140
ssh-copy-id -i id_rsa.pub root@192.168.1.141

安装ansible

yum -y install ansible

常用模块链接

推荐官方,中文翻译用这个吧

常用模块

使用ansible搭建LNMP环境

代码链接(很多不足,以及错误,仅供学习参考,生产环境谨慎使用)
ansible_lnmp.rar

构建过程中要注意的

语法

语法建议参考官方文档中的例子,在创建多个文件或者目录时,with_items和file的层级关系是同级,而path和state在file下一级,但是它们是同级,如下:

- name: 创建目录
file:
path: '/data/{{item}}' ###单引为防止解析为目录
state: directory
with_items:
- wwwlog
- wwwroot

构建中应该使用应有的模块,例如设置软链接,不应该使用 "ln -s" 应如下:

- name: 设置软链接
file: src=/usr/local/nginx/sbin/nginx dest=/usr/bin/nginx state=link
目录结构
[root@localhost ~]# tree nginx_install/
nginx_install/
├── defaults
├── files
│   └── nginx-1.12.1.tar.gz
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
│   └── nginx.conf
└── vars

正确的目录结构如上
files存放主要文件,使用copy模块时无需路径
handlers存放触发文件
meta依赖文件
tasks执行文件
templates模板文件
vars变量文件

所需要的目录以及文件

比如nginx在配置文件中重新声明了root路径,那么这个目录就必须需要创建,错误日志文件也是

- name: 创建目录
file:
path: '/data/{{item}}'
state: directory
with_items:
- wwwlog
- wwwroot
- name: 创建文件error.log
file:
path: /data/wwwlog/error_nginx.log
state: touch
- name: 创建目录default
file:
path: /data/wwwroot/default
state: directory

这里应该有更好的写法,没仔细研究,需要带变量

notify触发handlers
- name: 设置软链接
file: src=/usr/local/nginx/sbin/nginx dest=/usr/bin/nginx state=link
- name: 修改配置文件
template: src=nginx.conf dest=/usr/local/nginx/conf/nginx.conf
notify: start nginx service

notify的位置很关键,一般是task发生changes触发notify,notify再触发handlers
一般配置文件发生更改后会需要重启,所以写在此处

[root@localhost ~]# vim nginx_install/handlers/main.yml
- name: start nginx service
shell: nginx

handlers中的name需要和notify的“start nginx service”对应才能触发!

playbook中的小常识:

- hosts: testhost
  user: root
  gather_facts: True
  tasks:
    - name: use when
      shell: touch /tmp/when.txt
      when: facter_ipaddress == "192.168.1.140"

只有当参数 facter_ipaddress为 192.168.1.140时才在该机器上新建指定文件;
意思就是只对 testhost 组中特定的主机进行操作,忽略组内其他的主机。
我们可以通过setup模块查看各个参数的值
Playbook的“Package”(role语句)

Role是比include更强大灵活的代码重用和分享机制。Include类似于编程语言中的include,是重用单个文件的,功能有限。

而Role类似于编程语言中的“Package”,可以重用一组文件形成完整的功能。例如安装和配置apache,需要tasks实现安装包和拷贝模版等,httpd.conf和index.html的模版文件,和handler文件实现重起功能。这些文件都可以放在一个role里面,供不同的playbook文件重用。

Ansible非常提倡在playbook中使用role,并且提供了一个分享role的平台Ansible Galaxy, https://galaxy.ansible.com/, 在galaxy上可以找到别人写好的role

定义role完整的目录结构

下面的目录结构定义了一个role:名字为myrole。在site.yml,调用了这个role。

role的目录结构 site.yml中调用role

site.yml
roles/
├── myrole
├── tasks
│ └── main.yml
├── handlers
│ └── main.yml
├── defaults
│ └── main.yml
├── vars
│ └── main.yml
├── files
├── templates
├── README.md
├── meta
│ └── main.yml
└── tests
├── inventory
└── test.yml
---
- hosts: webservers
roles:
- myrole

ansible并不要求role包含上述所有的目录及文件,根据role的功能需要加入对应的目录和文件。下面是每个目录和文件的功能。

下面的话需要理解,是整个playbook的框架所在!
如果 roles/x/tasks/main.yml 存在, 其中列出的 tasks 将被添加到 play 中,所以这个文件也可以视作role的入口文件,想看role做了什么操作,可以从此文件看起。
如果 roles/x/handlers/main.yml 存在, 其中列出的 handlers 将被添加到 play 中
如果 roles/x/vars/main.yml 存在, 其中列出的 variables 将被添加到 play 中
如果 roles/x/meta/main.yml 存在, 其中列出的 “角色依赖” 将被添加到 roles 列表中
roles/x/tasks/main.yml中所有tasks,可以引用 roles/x/{files,templates,tasks}中的文件,不需要指明文件的路径。

在写role的时候,一般都要包含role入口文件roles/x/tasks/main.yml,其它的文件和目录,可以根据需求选择加入。

使用ansible安装lnmp的更多相关文章

  1. Ansible 实战:一键安装 LNMP

    Ansible 配置文件 : [root@center /data/ansiblework]# cat ansible.cfg [defaults] remote_user = root remote ...

  2. Linux centosVMware 自动化运维Ansible介绍、Ansible安装、远程执行命令、拷贝文件或者目录、远程执行脚本、管理任务计划、安装rpm包/管理服务、 playbook的使用、 playbook中的循环、 playbook中的条件判断、 playbook中的handlers、playbook实战-nginx安装、管理配置文件

    一.Ansible介绍 不需要安装客户端,通过sshd去通信 基于模块工作,模块可以由任何语言开发 不仅支持命令行使用模块,也支持编写yaml格式的playbook,易于编写和阅读 安装十分简单,ce ...

  3. centos下编译安装lnmp

    centos下编译安装lnmp 本文以centos为背景在其中编译安装nginx搭建lnmp环境. 编译安装nginx时,需要事先安装 开发包组"Development Tools" ...

  4. 初探ansible安装

    一.ansible介绍常用的自动化运维工具 Puppet —基于 Ruby 开发,采用 C/S 架构,扩展性强,基于 SSL,远程命令执行相对较弱SaltStack —基于 Python 开发,采用 ...

  5. CentOS安装LNMP环境的基础组件

    注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. 在安装LNMP环境之前,请确保已经使用yum安装了以下各类基础组件(如果系统已自带,还可以考虑yum update下基础组件): ...

  6. lnmp---------------lnmp1.3-full安装包安装lnmp环境,如何安装PHP扩展

    1. 如果已经安装LNMP套件,请按以下步骤处理 a. 跳转到fileinfo源代码目录` cd /root/downloads/lnmp1.2-full/src/php-7.0.7/ext/file ...

  7. 安装lnmp一键安装包(转)

    系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian Linux系统 需要3GB以上硬盘剩余空间 128M以上内存,Xen的需要有SWAP,OpenVZ的另外 ...

  8. CentOS 7 用户怎样安装 LNMP(Nginx+PHP+MySQL)

    关于 Nginx (发音 “engine x”)这是一款免费.开源.高效的 HTTP 服务器,Nginx是以稳定著称,丰富的功能,结构简单,低资源消耗.本教程演示如何在CentOS 6.5服务器(适用 ...

  9. 关于轻松安装LNMP和LAMP的编译环境

    http://lnmp.org/install.html 系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian Linux系统 需要2GB以上硬盘剩余空间 1 ...

随机推荐

  1. Elasticsearch.yml

    cluster.name: elasticsearch配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集 ...

  2. QT网络编程UDP下C/S架构广播通信

    QT有封装好的UDP协议的类,QUdpSocket,里面有我们想要的函数接口.感兴趣的话,可以看看. 先搞服务端吧,写一个子类,继承QDialog类,起名为UdpServer类.头文件要引用我们上边说 ...

  3. PhoneGap 的消息推送插件JPush极光推送

    一. 什么是极光推送 极光推送,使得开发者可以即时地向其应用程序的用户推送通知或者消息,与用户保持互动, 从而有效地提高留存率,提升用户体验.平台提供整合了 Android 推送.iOS 推送的统一推 ...

  4. try...finally的用法

    finally里面只是执行完成try中的代码后,必须执行的代码,即使是try中有异常抛出,也是会去执行finally. >>> try: ... 1/0 ... finally: . ...

  5. Linux学习总结(十)-文件复制及查看, 环境变量

    一 文件复制及移动 1.命令 cp --------copy 的意思格式 cp 选项 源文件 目标文件a: 对于文件我们直接cp 文件 目标文件假定我们在普通用户家目录下/home/lv新建两个普通文 ...

  6. mybatis映射文件参数处理 #{}取值与${}取值的区别

    #{}:是以预编译的映射,将参数设置到sql语句中,和jdbc的preraredStatement一样,使用占位符,防止sql注入. ${}:取出的值会直接拼装在sql中,会有安全问题. 大多数情况下 ...

  7. java使用Redis(六个类型)

    下载插件:https://mvnrepository.com/artifact/redis.clients/jedis/3.0.0 maven项目依赖: <dependency> < ...

  8. UVALive4682 XOR Sum

    UVALive4682 XOR Sum 题意 给定一个数组, 求连续子序列中异或值最大的值. 题解 假设答案区间为 [L, R], 则答案为 XOR[L, R], 可以将区间分解为 XOR[L,R] ...

  9. Web项目开发中常见安全问题及防范

    计算机程序主要就是输入数据 经过处理之后 输出结果,安全问题由此产生,凡是有输入的地方都可能带来安全风险.根据输入的数据类型,Web应用主要有数值型.字符型.文件型. 要消除风险就要对输入的数据进行检 ...

  10. Knowledge Point 20180305 补位的两种方式

    我们都知道Java的基本数据类型内存中都有一个固定的位数(内存分配空间),如byte占8位,int占32位等.正因如此,当把一个低精度的数据类型转成一个高精度的数据类型时,必然会涉及到如何扩展位数的问 ...