【ansible】通过role角色部署lnmp架构

news2024/11/24 23:51:45

目录

一、roles模块的介绍

二、roles的目录层次

2.1 roles 内各目录含义解释

三、在一个playbook中使用roles模块的步骤

四、实操

步骤一:完成目录的准备

步骤二:完成nginx的roles创建和测试

1.准备nginx.repo文件到files子目录中

2.完成vars目录中的main.yaml文件的编写 准备相应的变量

3.准备templates子目录中的.j2模板文件

4.准备tasks目录的main.yaml文件

5.准备handlers目录的main.yaml文件

先完成nginx的测试

步骤三:完成MySQL的roles创建和测试

1.先准备mysql的repo文件

2.完成变量的编写

3.完成tasks目录的main.yaml文件编写

步骤四:完成php的roles创建和测试

1.先完成php的vars变量目录的main.yaml文件编写

2.完成php的tasks目录main.yaml文件编写

3.完成handlers目录yaml文件编写

步骤五:完成playbook剧本调用roles模块编写 

准备网页文件,进行测试

五、总结,roles角色的作用?


一、roles模块的介绍

roles用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令引入即可。
简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷的include它们的一种机制。roles一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。主要使用场景代码复用度较高的情况下。

二、roles的目录层次

cd /etc/ansible/
tree roles/
roles/
├── web/    #相当于 playbook 中的 每一个 play 主题
│   ├── files/       #用来存放由 copy 模块或 script 模块调用的文件。
│   ├── templates/   #用来存放 jinjia2 模板,template 模块会自动在此目录中寻找 jinjia2 模板文件。
│   ├── tasks/       #此目录应当包含一个 main.yml 文件,用于定义此角色的任务列表,此文件可以使用 include 包含其它的位于此目录的 task 文件。
│   ├── handlers/    #此目录应当包含一个 main.yml 文件,用于定义此角色中触发条件时执行的动作。
│   ├── vars/        #此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。
│   ├── defaults/    #此目录应当包含一个 main.yml 文件,用于为当前角色设定默认变量。 这些变量具有所有可用变量中最低的优先级,并且可以很容易地被任何其他变量覆盖。所以生产中我们一般不在这里定义变量
│   └── meta/        #此目录应当包含一个 main.yml 文件,用于定义此角色的元数据信息及其依赖关系。 
└── db/
    ├── files/
    ├── templates/
    ├── tasks/
    ├── handlers/
    ├── vars/
    ├── defaults/
    └── meta/

2.1 roles 内各目录含义解释

●files
用来存放由 copy 模块或 script 模块调用的文件。

●templates
用来存放 jinjia2 模板,template 模块会自动在此目录中寻找 jinjia2 模板文件。

●tasks
此目录应当包含一个 main.yml 文件,用于定义此角色的任务列表,此文件可以使用 include 包含其它的位于此目录的 task 文件。

●handlers
此目录应当包含一个 main.yml 文件,用于定义此角色中触发条件时执行的动作。

●vars
此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。

●defaults
此目录应当包含一个 main.yml 文件,用于为当前角色设定默认变量。 这些变量具有所有可用变量中最低的优先级,并且可以很容易地被任何其他变量覆盖。所以生产中我们一般不在这里定义变量

●meta
此目录应当包含一个 main.yml 文件,用于定义此角色的元数据信息及其依赖关系。

三、在一个playbook中使用roles模块的步骤

(1)创建以 roles 命名的目录
mkdir /etc/ansible/roles/ -p    #yum装完默认就有

(2)创建全局变量目录(可选)
mkdir /etc/ansible/group_vars/ -p
touch /etc/ansible/group_vars/all     #文件名自己定义,引用的时候注意

(3)在 roles 目录中分别创建以各角色名称命名的目录,如 httpd、mysql
mkdir /etc/ansible/roles/httpd
mkdir /etc/ansible/roles/mysql

(4)在每个角色命名的目录中分别创建files、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录可以创建为空目录,也可以不创建
mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta}
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta}

(5)在每个角色的 handlers、tasks、meta、defaults、vars 目录下创建 main.yml 文件,千万不能自定义文件名
touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml

(6)修改 site.yml 文件,针对不同主机去调用不同的角色
vim /etc/ansible/site.yml
---
- hosts: webservers
  remote_user: root
  roles:
     - httpd
- hosts: dbservers
  remote_user: root
  roles:
     - mysql
	 
(7)运行 ansible-playbook
cd /etc/ansible
ansible-playbook site.yml

四、实操

步骤一:完成目录的准备

[root@localhost ansible]#ls
ansible.cfg  hosts  playbook  roles
[root@localhost ansible]#cd roles/
[root@localhost roles]#mkdir nginx mysql php
[root@localhost roles]#ls
mysql  nginx  php
[root@localhost roles]#mkdir mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p
[root@localhost roles]#mkdir nginx/{files,templates,tasks,handlers,vars,defaults,meta} -p
[root@localhost roles]#mkdir php/{files,templates,tasks,handlers,vars,defaults,meta} -p
[root@localhost roles]#ls mysql/
defaults  files  handlers  meta  tasks  templates  vars
[root@localhost roles]#ls nginx/
defaults  files  handlers  meta  tasks  templates  vars
[root@localhost roles]#ls php/
defaults  files  handlers  meta  tasks  templates  vars
[root@localhost roles]#touch mysql/{defaults,vars,tasks,meta,handlers}/main.yaml
[root@localhost roles]#touch nginx/{defaults,vars,tasks,meta,handlers}/main.yaml
[root@localhost roles]#touch php/{defaults,vars,tasks,meta,handlers}/main.yaml

修改hosts文件  定义主机清单

步骤二:完成nginx的roles创建和测试

1.准备nginx.repo文件到files子目录中

2.完成vars目录中的main.yaml文件的编写 准备相应的变量

3.准备templates子目录中的.j2模板文件

4.准备tasks目录的main.yaml文件

#关闭防火墙和selinux
- name: disabled firewalld
  service: name=firewalld  state=stopped  enabled=no
- name: disable selinux
  command: '/sbin/setenforce 0'
  ignore_errors: yes
- name: disabled selinux forever
  replace: path=/etc/selinux/config  regexp=enforcing  replace=disabled  after=loaded
#拷贝nginx.repo文件
- name: copy nginx yum repo file
  copy: src=nginx.repo  dest=/etc/yum.repos.d/nginx.repo
#安装nginx
- name: install nginx
  yum: name={{pkg}}
#创建nginx的工作目录
- name: create root dir
  file: path={{root_dir}} state=directory
#根据template模板文件生成nginx的配置文件
- name: nginx config file
  template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
  notify: "reloaded nginx"
#启动nginx服务
- name: start nginx
  systemd: name={{server}} state=started enabled=yes

5.准备handlers目录的main.yaml文件

- name: reload nginx
  systemd: name={{server}} state=reloaded

先完成nginx的测试

因为这是分布式部署  那么还需要将nginx的根目录共享给php

 

步骤三:完成MySQL的roles创建和测试

1.先准备mysql的repo文件

wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm

2.完成变量的编写

3.完成tasks目录的main.yaml文件编写

单独准备一个init.yaml文件  用于被调用

[root@localhost tasks]#vim init.yaml
[root@localhost tasks]#ls
init.yaml  main.yaml
[root@localhost tasks]#vim main.yaml 

- name: shutdown firewalld
#调用关闭防火墙和selinux的yaml文件
- include: "init.yaml"

#复制mysql的repo文件
- name: copy mysql57-community-release
  copy: src=mysql-community.repo dest=/etc/yum.repos.d/mysql-community.repo
- name: modify mysql repo
  replace: path=/etc/yum.repos.d/mysql-community.repo regexp="gpgcheck=1" replace="gpgcheck=0"

#安装mysql
- name: yum mysql-community-server
  yum: name={{pkg}} state=present
- name: start mysql
  service: name={{server}} enabled=true state=started

#完成mysql初始化
- name: init mysql
  shell: passd=$(grep "password" /var/log/mysqld.log | awk '{print $NF}') && mysql -uroot -p"$passd" --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'Admin@123';" && mysql -uroot -pAdmin@123 -e "grant all privileges on *.* to root@'%' identified by 'Admin@123' with grant option;"
  ignore_errors: true

步骤四:完成php的roles创建和测试

1.先完成php的vars变量目录的main.yaml文件编写

2.完成php的tasks目录main.yaml文件编写

#调用init.yaml文件  关闭防火墙和selinux
- include: "init.yaml"
#创建网页根目录,完成nfs挂载
- name: crate web root dir
  file: name={{root_dir}} state=directory
- name: start rpcbind
  service: name=rpcbind state=started
- name: start nfs
  service: name=nfs state=started
- name: mount nfs
  mount: src={{nginx_addr}}:{{root_dir}} path={{root_dir}} state=mounted fstype=nfs opts="defaults,_netdev"

#安装php
- name: install php repo
  shell: rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm && rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
  ignore_errors: true
- name: yum php
  yum: name=php72w,php72w-cli,php72w-common,php72w-devel,php72w-embedded,php72w-gd,php72w-mbstring,php72w-pdo,php72w-xml,php72w-fpm,php72w-mysqlnd,php72w-opcache state=latest
- name: create php user
  user: name={{user_name}} create_home=no shell=/sbin/nologin
- name: php config file
  replace: path=/etc/php.ini regexp=";date.timezone =" replace="date.timezone = Asia/Shanghai"
  notify: "reload php-fpm"
- name: modify user and group in www.conf
  replace: path=/etc/php-fpm.d/www.conf regexp="apache" replace="{{user_name}}"
  notify: "reload php-fpm"
- name: modify listen addr in www.conf
  replace: path=/etc/php-fpm.d/www.conf regexp="127.0.0.1:9000" replace="{{php_addr}}:{{php_port}}"
  notify: "reload php-fpm"
- name: modify allowed_clients in www.conf
  replace: path=/etc/php-fpm.d/www.conf regexp="127.0.0.1" replace="{{nginx_addr}}"
  notify: "reload php-fpm"
- name: start php-fpm
  service: name={{server}} state=started enabled=yes

3.完成handlers目录yaml文件编写

[root@localhost handlers]#vim main.yaml 

- name: reload php-fpm
  systemd: name={{server}} state=reloaded

步骤五:完成playbook剧本调用roles模块编写 

准备网页文件,进行测试

五、总结,roles角色的作用?

playbook剧本中的每一个paly看做一个角色,将各个角色的tasks任务、vars变量、handler触发动作、template模板文件以及copy或script的相关文件放到指定角色的目录中统一管理,在需要的时候,编写palybook通过roles角色进行调用即可。

也就是说:roles角色可以在playbook中实现代码的复用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1457357.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32F1 - I2C读写EEPROM

Inter-integrated circuit 1> 实验概述2> I2C模块 - 硬件方框图3> I2C模块 - 主发送器模式3.1> 发送1Byte数据3.2> 抓波形 4> I2C模块 - 主接收器模式 1> 实验概述 通过STM32F103内部I2C硬件模块, 读写EEPROM - AT24C02 2> I2C模块 - 硬件方…

H5 异次元二次元引导页源码

H5 异次元二次元引导页源码 源码介绍:异次元二次元引导页源码是一款二次元引导单页源码,此单页有模拟4个页面的H5自适应效果。源码全局H5未加密,可自行修改调配。 下载地址: https://www.changyouzuhao.cn/9834.html

JS加密解密之JS广告漂浮代码分析

前言 之前有个客户要求帮忙复刻一份广告漂浮代码,我看了下,目标站的广告代码是通过了JS加密后的,经过我解密还原后分析了一下该代码的作用如下。 ;var _0xodDddd,_0xodD_[_0xodD],_0x1d02[_0xodD,\x73\x54\x69\x6d\x65,\x6c\x6f\x61\x64\x5…

【Linux】进程信号的保存 | 自定义捕捉

文章目录 三、信号的阻塞(信号的保存)1. 信号相关其他常见概念2. 在内核中的表示3. sigset_t类型4. 信号集操作函数函数列表注意事项 5. 读取/修改block位图 - sigprocmask6. 读取pending位图 - sigpending 四、信号捕捉1. 信号捕捉的初步认识自定义捕捉…

Stable Diffusion 绘画入门教程(webui)-提示词

通过上一篇文章大家应该已经掌握了sd的使用流程,本篇文章重点讲一下提示词应该如何写 AI绘画本身就是通过我们写一些提示词,然后生成对应的画面,所以提示词的重要性不言而喻。 要想生成更加符合自己脑海里画面的图片,就尽量按照…

孢子捕捉仪结构

TH-BZ2在现代农业科技的浪潮中,孢子捕捉仪作为一种先进的农业监测设备,正逐渐走进人们的视野。它以其独特的结构和功能,为农作物的健康生长提供了有力保障。那么,孢子捕捉仪究竟是何方神圣?它的结构又是怎样的呢&#…

vulnhub靶场之doubletrouble

一.环境搭建 1.靶场描述 get flags difficulty: easy about vm: tested and exported from virtualbox. dhcp and nested vtx/amdv enabled. you can contact me by email for troubleshooting or questions. This works better with VirtualBox rather than VMware 2.下载地…

详解4大C语言内存函数【超详细建议点赞收藏】

目录 1. memcpy----内存拷贝1.1 函数介绍1.2 函数使用1.3 模拟实现 2. memmove----重叠内存的数据拷贝2.1 函数介绍2.2 函数使用2.3 模拟实现 3. memcmp----内存比较3.1 函数介绍3.2 函数使用 4.memset----内存设置4.1 函数介绍4.2 函数使用 注意:以下4个内存函数在…

VFH特征的使用(二)

一、VFH特征识别 C recognize_objects.h #pragma once #include <pcl/point_cloud.h> #include <pcl/point_types.h> #include <pcl/common/common.h> #include <pcl/common/transforms.h> #include <pcl/console/parse.h> #include <pcl/…

基于Spring Boot的智能物流管理系统,计算机毕业设计(带源码+论文)

源码获取地址&#xff1a; 码呢-一个专注于技术分享的博客平台一个专注于技术分享的博客平台,大家以共同学习,乐于分享,拥抱开源的价值观进行学习交流http://www.xmbiao.cn/resource-details/1759581137025445890

做temu跨境电商,必读这五大秘诀!

随着互联网的飞速发展&#xff0c;电商行业呈现出前所未有的繁荣景象。新兴电商平台Temu成为了众多创业者的关注焦点。本文将为您解析如何在Temu电商蓝海项目中&#xff0c;从自身能力建设、了解市场环境到做好定位等方面&#xff0c;找到属于您的成功之路。 一、自身能力建设 …

【白嫖8k买的机构vip教程】Selenium(3):python+selenium环境安装

准备工具如下&#xff1a; Python安装包&#xff1a;https://www.python.org/getit/PyCharm Pycharm安装包&#xff1a;http://www.jetbrains.com/pycharm/download/Selenium Selenium安装包&#xff1a;https://pypi.python.org/pypi/selenium、或者在pycharm中直接下载seleni…

Vector - CANoe - CAPL重启VN设备退出BusOff

在总线测试中进行BusOff测试的时候&#xff0c;偶尔会遇到将Vector工具链下的VN系列设备进入到BusOff状态&#xff0c;这个时候我们就只能重启CANoe才能将VN系列设备进行重启&#xff0c;才可以再次在Trace窗口上看到发送和接收的报文。不过在某些特定的情况的下&#xff0c;我…

【大模型 知识图谱】ChatKBQA:KBQA知识图谱问答 + 大模型

ChatKBQA&#xff1a;KBQA知识图谱问答 大模型 提出背景传统方法处理流程ChatKBQA处理流程对比优势 总结ChatKBQA框架概览特征1&#xff1a;逻辑形式生成特征2&#xff1a;无监督实体和关系检索特征3&#xff1a;参数高效的微调特征4&#xff1a;GQoT 可解释的查询执行特征5&a…

【白嫖8k买的机构vip教程】安卓设备连接电脑进行adb命令操作

Android 真机进行adb 命令的操作&#xff1a; 连接方式 &#xff1a; 数据线连接&#xff1a; 1&#xff09;手机需通过数据线连接电脑&#xff1b; 2&#xff09;手机调出开发者选项&#xff1b;手机操作步骤&#xff1a;设置——系统——关于手机&#xff08;平板电脑&am…

VMware还原Windows11 ghost镜像

文章目录 环境步骤准备制作启动iso文件创建虚拟机启动虚拟机还原Windows 参考 环境 Windows 11 家庭中文版VMware Workstation 17 Pro石大师装机大师Windows 11 ghost系统镜像 步骤 准备 下载好Windows 11 ghost系统镜像&#xff0c;我下载的文件是 FQ_WIN11_X64_VDL_V2080…

【教3妹学编程-算法题】将数组分成最小总代价的子数组 II

2哥 : 叮铃铃&#xff0c;3妹&#xff0c;过年干嘛呢&#xff0c;是不是逛吃逛吃&#xff0c;有没有长胖呢。 3妹&#xff1a;切&#xff0c;我妈张罗着要给我相亲呢。 2哥 : 相亲&#xff1f;哈哈哈哈 3妹&#xff1a;别笑了&#xff0c;我妈说跟我年龄相等的人都已经孩子上小…

为什么2023年是AI视频的突破年,以及对2024年的预期#a16z

2023年所暴露的AI生成视频的各种问题&#xff0c;大部分被OpenAI发布的Sora解决了吗&#xff1f;以下为a16z发布的总结&#xff0c;在关键之处&#xff0c;我做了OpenAI Sora的对照备注。 推荐阅读&#xff0c;了解视频生成技术进展。 Why 2023 Was AI Video’s Breakout Year,…

开发消息多发工具需要用到的源代码

在数字化时代&#xff0c;消息传递是许多应用程序的核心功能之一&#xff0c;从社交媒体到企业通信&#xff0c;从个人聊天到群发消息&#xff0c;消息传递无处不在&#xff0c;为了满足这种需求&#xff0c;开发者经常需要创建或定制消息多发工具。 这些工具通常需要处理多个…

MySQL数据库基础(十):DQL数据查询语言

文章目录 DQL数据查询语言 一、数据集准备 二、select查询 三、简单查询 四、条件查询 1、比较查询 2、范围查询 3、逻辑查询 4、模糊查询 5、非空查询 五、排序查询 六、聚合查询 七、分组查询与having子句 1、分组查询介绍 2、group by的使用 3、group by 聚…