当前位置: 首页 > news >正文

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

目录

一.roles概述

1.roles角色

2.roles的目录层次

2.1.roles 内各目录含义解释

二.实操

1.部署nginx

2.部署MySQL

3.部署php

4.编写测试文件

三.总结


一.roles概述

1.roles角色

可以把playbook剧本里的每个play看作为一个角色,将每个角色要用到的文件、变量、任务列表定

义到对应角色的目录中,需要时可以直接在playbook中调用角色

作用

实现在playbook中代码复用

2.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 文件,用于定义此角色的元数据信息及其依赖关系

二.实操

1.部署nginx

cd /opt
mkdir nginx
cd nginx/
上传nginx.repo、nginx.conf,并且修改nginx.conf为nginx.conf.j2
vim nginx.conf.j2
37、38行
listen       {{nginx_addr}}:{{nginx_port}};server_name  {{nginx_hostname}};
45行
root   {{root_dir}};
68行
fastcgi_pass   {{php_addr}}:{{php_port}};
70行
fastcgi_param  SCRIPT_FILENAME  {{root_dir}}$fastcgi_script_name;

vim lnmp-playbook.yaml
- name: nginx playhosts: webserversremote_user: rootgather_facts: falsevars:- nginx_addr: 192.168.80.101- nginx_port: 80- nginx_hostname: www.xy101.com- root_dir: /var/www/html- php_addr: 192.168.80.102- php_port: 9000tasks:- name: disable firewalldservice: name=firewalld state=stopped enabled=no- name: disable selinuxcommand: 'setenfoce 0'ignore_errors: true- name: copy nginx repocopy: src=/opt/nginx/nginx.repo dest=/etc/yum.repos.d/- name: install nginxyum: name=nginx state=latest- name: create root dirfile: path={{root_dir}} state=directory- name: copy nginx config template filetemplate: src=/opt/nginx/nginx.conf.j2 dest=/etc/nginx/nginx.confnotify: 'reload nginx'- name: create nfs configcopy: content="{{root_dir}} 192.168.80.0/24(rw,sync,no_root_squash)" dest=/etc/exports- name: restart rpcbind,nfs,nginxservice: name={{item}} state=restarted enabled=yeswith_items:- rpcbind- nfs- nginxhandlers:- name: reload nginxservice: name=nginx state=reloadedansible-playbook lnmp-playbook.yaml

2.部署MySQL

- name: mysql playhosts: dbserversremote_user: rootgather_facts: falsetasks:- name: disable mysql_server firewalldservice: name=firewalld  state=stopped  enabled=no- name: disable mysql_server selinuxcommand: 'setenforce 0'ignore_errors: true- name: remove mariadbyum: name=mariadb*  state=absent- name: copy mysql repocopy: src=/opt/mysql/mysql-community.repo  dest=/etc/yum.repos.d/- name: modify mysql reporeplace: path=/etc/yum.repos.d/mysql-community.repo  regexp="gpgcheck=1"  replace="gpgcheck=0"- name: install mysqlyum: name=mysql-server state=present- name: start mysqlservice: name=mysqld  state=started  enabled=yes- name: init mysqlscript: '/opt/mysql/mysql-init.sh'

3.部署php

- name: php playhosts: phpserversremote_user: rootgather_facts: falsevars:- php_username: nginx- php_addr: 192.168.80.102:9000- nginx_addr: 192.168.80.101- root_dir: /var/www/htmltasks:- name: disable php_server firewalldservice: name=firewalld  state=stopped  enabled=no- name: disable php_server selinuxcommand: 'setenforce 0'- name: unarchive php tar pkgunarchive: copy=yes  src=/opt/php/php.tar.gz  dest=/mnt/- name: copy local repocopy: src=/opt/php/local.repo  dest=/etc/yum.repos.d/- name: create reposhell: 'createrepo /mnt && yum clean all && yum makecache'- name: install phpyum: name=php72w,php72w-cli,php72w-common,php72w-devel,php72w-embedded,php72w-gd,php72w-mbstring,php72w-pdo,php72w-xml,php72w-fpm,php72w-mysqlnd,php72w-opcache,php72w-ldap,php72w-bcmath  state=present- name: create php useruser: name={{php_username}}  shell=/sbin/nologin  create_home=no- name: modify php.inireplace: path=/etc/php.ini  regexp=";date.timezone ="  replace="date.timezone = Asia/Shanghai"- name: modify user and group in www.confreplace: path=/etc/php-fpm.d/www.conf  regexp="apache"  replace="{{php_username}}"notify: "reload php-fpm"- name: modify listen in www.confreplace: path=/etc/php-fpm.d/www.conf  regexp="127.0.0.1:9000"  replace="{{php_addr}}"notify: "reload php-fpm"- name: modify listen.allowed_clients in www.confreplace: path=/etc/php-fpm.d/www.conf  regexp="127.0.0.1"  replace="{{nginx_addr}}"notify: "reload php-fpm"- name: start php-fpmservice: name=php-fpm  state=started  enabled=yes- name: create www root dirfile: path={{root_dir}}  state=directory- name: mount nfsmount: src="{{nginx_addr}}:{{root_dir}}"  path={{root_dir}}  fstype=nfs  state=mounted  opts="defaults,_netdev"handlers:- name: reload php-fpmservice: name=php-fpm  state=reloaded

4.编写测试文件

cd /var/www/html
vim index.php<?php
phpinfo();
?>

浏览器访问测试

三.总结

roles目录格式
 

roles/                    #角色总目录,其每个子目录就是一个角色目录nginx/                     #角色目录,一个角色相当于playbook中的一个play主题,目录名就是角色名files/                       #存放copy、script、unarchive等模块默认调用的文件templates/                   #存放template模块默认调用的模板文件tasks/mian.yml               #定义此角色的tasks任务列表handlers/mian.yml            #定义此角色通过nofity触发执行的handlers任务列表vars/mian.yml                #定义此角色使用的自定义变量defaults/mian.yml            #定义此角色使用的默认变量(一般不用)meta/mian.yml                #定义此角色的元数据信息和依赖关系mysql/....php/....vim XXX.yaml
- name:hosts:remote_user:roles:- 角色名1- 角色名2....ansible-playbook XXX.yaml

相关文章:

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

目录 一.roles概述 1.roles角色 2.roles的目录层次 2.1.roles 内各目录含义解释 二.实操 1.部署nginx 2.部署MySQL 3.部署php 4.编写测试文件 三.总结 一.roles概述 1.roles角色 可以把playbook剧本里的每个play看作为一个角色&#xff0c;将每个角色要用到的文件、…...

springboot给属性赋值的两种方式(yaml与properties)

一&#xff0c;介绍 在Spring Boot中&#xff0c;配置文件是用来设置应用程序的各种参数和操作模式的重要部分。Spring Boot支持两种主要类型的配置文件&#xff1a;properties文件和YAML 文件。这两种文件都可以用来定义相同的配置&#xff0c;但它们在格式和表达能力上有所不…...

20240725 每日AI必读资讯

&#x1f680;最强开源模型来了!Llama3.1以405B参数领先GPT-4o - Llama3.1以405B参数领先GPT-4o和Claude3.5Sonnet&#xff0c;在性能上实现超越。 - Meta大幅优化训练栈&#xff0c;扩展模型算力规模至16000个H100GPU&#xff0c;提高性能。 - Llama3.1具有上下文长度扩展、…...

17_高级进程间通信 UNIX域套接字1

非命名的UNIX域套接字 第1个参数domain&#xff0c;表示协议族&#xff0c;只能为AF_LOCAL或者AF_UNIX&#xff1b; 第2个参数type&#xff0c;表示类型&#xff0c;只能为0。 第3个参数protocol&#xff0c;表示协议&#xff0c;可以是SOCK_STREAM或者SOCK_DGRAM。用SOCK_STR…...

大型语言模型的生物医学知识图优化提示生成

大型语言模型的生物医学知识图优化提示生成 https://arxiv.org/abs/2311.17330 https://github.com/BaranziniLab/KG_RAG 大型语言模型的生物医学知识图优化提示生成 摘要 KG-RAG框架&#xff0c;较好的结合了生物医学知识图谱SPOKE和LLM的优势。SPOKE是一个开放知识图谱&…...

winform datagrid 全部勾选

如果我们想要进行全选或全部取消&#xff0c;在数据较多的情况下&#xff0c;这种方法显然特别繁琐。怎么办呢&#xff1f; 当然是加以一个全选按钮了&#xff0c;选中全选按钮则全选&#xff0c;否则取消。笔者本想在红色圆圈位置添加全选复选框的&#xff0c;那样看起来更加…...

从 NextJS SSRF 漏洞看 Host 头滥用所带来的危害

前言 本篇博文主要内容是通过代码审计以及场景复现一个 NextJS 的安全漏洞&#xff08;CVE-2024-34351&#xff09;来讲述滥用 Host 头的危害。 严正声明&#xff1a;本博文所讨论的技术仅用于研究学习&#xff0c;旨在增强读者的信息安全意识&#xff0c;提高信息安全防护技能…...

LC617-合并二叉树

文章目录 1 题目描述2 思路优化代码完整输入输出 参考 1 题目描述 https://leetcode.cn/problems/merge-two-binary-trees/description/ 给你两棵二叉树&#xff1a; root1 和 root2 。 将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另…...

深入解析:端到端目标检测模型的奥秘

深入解析&#xff1a;端到端目标检测模型的奥秘 在人工智能领域&#xff0c;计算机视觉任务一直是研究的热点之一。目标检测作为计算机视觉中的核心问题&#xff0c;其重要性不言而喻。端到端的目标检测模型&#xff0c;以其高效的性能和简洁的架构&#xff0c;逐渐成为研究和…...

xmind--如何快速将Excel表中多列数据,复制到XMind分成多级主题

每次要将表格中的数据分成多级时&#xff0c;只能复制粘贴吗 快来试试这个简易的方法吧 这个是原始的表格&#xff0c;分成了4级 步骤&#xff1a; 1、我们可以先按照这个层级设置下空列&#xff08;后买你会用到这个空列&#xff09; 二级不用加、三级前面加一列、四级前面加…...

在 Android 上实现语音命令识别:详细指南

在 Android 上实现语音命令识别:详细指南 语音命令识别在现代 Android 应用中变得越来越普遍。它允许用户通过自然语言与设备进行交互,从而提升用户体验。本文将详细介绍如何在 Android 上实现语音命令识别,包括基本实现、带有占位槽位的命令处理,以及相关的配置和调试步骤…...

怎么理解FPGA的查找表与CPLD的乘积项

怎么理解 fpga的查找表 与cpld的乘积项 FPGA&#xff08;现场可编程门阵列&#xff09;和CPLD&#xff08;复杂可编程逻辑器件&#xff09;是两种常见的数字逻辑器件&#xff0c;它们在内部架构和工作原理上有着一些显著的区别。理解FPGA的查找表&#xff08;LUT&#xff0c;L…...

51.2T 800G 以太网交换机,赋能AI开放生态

IB与以太之争 以太网替代IB趋势明显。据相关报告&#xff1a;2024年TOP500的超算中&#xff0c;采用以太网方案占比48.5%&#xff0c;InfiniBand占比为39.2%&#xff0c;其中排名前6的超算中已有5个使用以太网互联。 开放系统战胜封闭系统仅是时间问题。我们已经看到&#xf…...

【制作100个unity游戏之31】用unity制作一个爬坡2d赛车小游戏

最终效果 【制作100个unity游戏之31】用unity制作一个爬坡2d赛车小游戏 前言 今天用unity制作一个简单的爬坡2d赛车小游戏 素材 https://www.spriters-resource.com/mobile/hillclimbracing/ 拼装车素材 车身添加碰撞体&#xff0c;摩檫力0 轮胎添加碰撞体和刚体&#xff0…...

Spring Boot 注解 @PostConstruct 介绍

Spring Boot 注解 PostConstruct 介绍 文章目录 Spring Boot 注解 PostConstruct 介绍一、基本介绍二、PostConstruct 的执行时机Spring Bean 的生命周期PostConstruct 的确切执行时机执行顺序示例重要注意事项 三、使用场景及代码示例1. 初始化资源&#xff1a;比如打开数据库…...

深度学习环境配置报错解决日记

2024年7越24日 1、detectron2需要编译 首先需要在自己创建的虚拟环境中下载一下detectron2 conda create -n pytorch python3.9 conda activate pythorch git clone https://github.com/facebookresearch/detectron2.git 接下来就是编译环节&#xff1a; 在win系统中&…...

百度,有道,谷歌翻译API

API翻译 百度&#xff0c;有道&#xff0c;谷歌API翻译&#xff08;只针对中英相互翻译&#xff09;,其他语言翻译需要对应from&#xff0c;to的code 百度翻译 package fills.tools.translate; import java.util.ArrayList; import java.util.HashMap; import java.util.Lis…...

java-双亲委派机制

Java虚拟机&#xff08;JVM&#xff09;中的类加载器&#xff08;Class Loader&#xff09;负责将类&#xff08;.class文件&#xff09;加载到JVM中&#xff0c;以便Java程序能够使用这些类。在JVM中&#xff0c;类加载器被组织成一种层次结构关系&#xff0c;这种层次结构关系…...

【C++】set的使用

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; STL || C 目录 &#x1f308;前言&#x1f308;关于set&#x1f525;容量函数emptysize &#x1f525;Modifiersinserteraseclear &#x1f525;Operationsfindcountlower_bound和upper_…...

React 18【实用教程】(2024最新版)

搭建开发环境 含配置&#xff0c;react-developer-tools 和 Redux DevTools 下载安装 https://blog.csdn.net/weixin_41192489/article/details/138523829 JSX 语法 https://blog.csdn.net/weixin_41192489/article/details/138649165 组件 父子组件传值、兄弟组件传值、越层组…...

自然界生物群体智能启发的**元启发式优化算法**,广泛应用于组合优化、函数优化、路径规划、调度问题等领域

蚁群算法&#xff08;Ant Colony Optimization, ACO&#xff09;、粒子群算法&#xff08;Particle Swarm Optimization, PSO&#xff09;和鱼群算法&#xff08;Artificial Fish Swarm Algorithm, AFSA&#xff09;均属于受自然界生物群体智能启发的元启发式优化算法&#xff…...

DHTesp库详解:ESP32/ESP8266高可靠温湿度驱动与环境参数计算

1. DHTesp 库深度解析&#xff1a;面向 ESP32/ESP8266 的高可靠性温湿度传感驱动1.1 库的诞生背景与工程必要性DHTesp 并非简单的 Arduino 兼容库移植&#xff0c;而是在特定硬件约束下催生的工程化解决方案。其核心驱动力源于 ESP32 多核架构对传统单线协议&#xff08;1-Wire…...

UniApp实战:如何安全高效地在安卓10+设备上实现本地数据存储(附权限配置避坑指南)

UniApp安卓10本地数据存储实战&#xff1a;权限配置与高性能方案设计 当你的UniApp在安卓10设备上突然无法保存用户配置时&#xff0c;控制台那行冰冷的"Permission denied"可能让整个开发团队陷入深夜加班。这不是简单的API调用问题&#xff0c;而是安卓存储机制变革…...

CasRel模型惊艳效果:同一实体对(马云-阿里巴巴)识别7种关系

CasRel模型惊艳效果&#xff1a;同一实体对&#xff08;马云-阿里巴巴&#xff09;识别7种关系 1. 关系抽取的神奇能力 你有没有遇到过这样的情况&#xff1a;阅读一篇关于企业家的报道时&#xff0c;想知道他和他的公司之间到底有哪些关系&#xff1f;是创始人&#xff1f;董…...

FPGA状态机实战:用Verilog实现自动售卖机(附三段式完整代码)

FPGA状态机实战&#xff1a;用Verilog实现自动售卖机&#xff08;附三段式完整代码&#xff09; 在数字电路设计中&#xff0c;状态机是最核心的设计思想之一。它能够将复杂的控制逻辑分解为有限的状态和状态之间的转换&#xff0c;使得设计更加清晰、可维护。自动售卖机作为一…...

ExcelJS 实战手册:从零构建企业级Excel报表系统

1. ExcelJS入门&#xff1a;为什么选择它构建企业报表&#xff1f; 第一次接触ExcelJS时&#xff0c;我正为一个电商项目头疼——每天要生成近万条订单数据的报表。尝试过直接输出CSV&#xff0c;但客户坚持要带格式的Excel文件&#xff1b;用PHPExcel处理又遇到内存溢出。直到…...

C语言标准演进实战指南:如何在现代项目中应用C11/C17/C23特性

C语言标准演进实战指南&#xff1a;如何在现代项目中应用C11/C17/C23特性 1. 为什么现代C项目需要关注新标准特性 在嵌入式系统、高性能计算和基础设施软件领域&#xff0c;C语言仍然是无可争议的王者。根据2023年TIOBE指数统计&#xff0c;C语言连续第三年蝉联最受欢迎编程语言…...

告别无脑抄payload:手把手教你分析RCE-labs靶场PHP源码,自己构造利用链

从源码审计到漏洞利用&#xff1a;深度解析RCE靶场中的PHP代码逻辑 在安全研究领域&#xff0c;真正区分新手与专家的关键能力&#xff0c;往往不是掌握多少现成的攻击载荷&#xff08;payload&#xff09;&#xff0c;而是能否通过源码审计独立发现漏洞并构造利用链。本文将带…...

Markdown Viewer 突破限制:全新自定义主题功能释放创作潜能

Markdown Viewer 突破限制&#xff1a;全新自定义主题功能释放创作潜能 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer 副标题&#xff1a;如何通过自定义主题功能实现文档视觉体…...

3分钟解决Word论文格式难题:免费获取APA第7版参考文献样式终极指南

3分钟解决Word论文格式难题&#xff1a;免费获取APA第7版参考文献样式终极指南 【免费下载链接】APA-7th-Edition Microsoft Word XSD for generating APA 7th edition references 项目地址: https://gitcode.com/gh_mirrors/ap/APA-7th-Edition 还在为Word中找不到APA第…...