【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看作为一个角色,将每个角色要用到的文件、…...
springboot给属性赋值的两种方式(yaml与properties)
一,介绍 在Spring Boot中,配置文件是用来设置应用程序的各种参数和操作模式的重要部分。Spring Boot支持两种主要类型的配置文件:properties文件和YAML 文件。这两种文件都可以用来定义相同的配置,但它们在格式和表达能力上有所不…...

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

17_高级进程间通信 UNIX域套接字1
非命名的UNIX域套接字 第1个参数domain,表示协议族,只能为AF_LOCAL或者AF_UNIX; 第2个参数type,表示类型,只能为0。 第3个参数protocol,表示协议,可以是SOCK_STREAM或者SOCK_DGRAM。用SOCK_STR…...

大型语言模型的生物医学知识图优化提示生成
大型语言模型的生物医学知识图优化提示生成 https://arxiv.org/abs/2311.17330 https://github.com/BaranziniLab/KG_RAG 大型语言模型的生物医学知识图优化提示生成 摘要 KG-RAG框架,较好的结合了生物医学知识图谱SPOKE和LLM的优势。SPOKE是一个开放知识图谱&…...
winform datagrid 全部勾选
如果我们想要进行全选或全部取消,在数据较多的情况下,这种方法显然特别繁琐。怎么办呢? 当然是加以一个全选按钮了,选中全选按钮则全选,否则取消。笔者本想在红色圆圈位置添加全选复选框的,那样看起来更加…...

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

LC617-合并二叉树
文章目录 1 题目描述2 思路优化代码完整输入输出 参考 1 题目描述 https://leetcode.cn/problems/merge-two-binary-trees/description/ 给你两棵二叉树: root1 和 root2 。 将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另…...
深入解析:端到端目标检测模型的奥秘
深入解析:端到端目标检测模型的奥秘 在人工智能领域,计算机视觉任务一直是研究的热点之一。目标检测作为计算机视觉中的核心问题,其重要性不言而喻。端到端的目标检测模型,以其高效的性能和简洁的架构,逐渐成为研究和…...

xmind--如何快速将Excel表中多列数据,复制到XMind分成多级主题
每次要将表格中的数据分成多级时,只能复制粘贴吗 快来试试这个简易的方法吧 这个是原始的表格,分成了4级 步骤: 1、我们可以先按照这个层级设置下空列(后买你会用到这个空列) 二级不用加、三级前面加一列、四级前面加…...

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

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

51.2T 800G 以太网交换机,赋能AI开放生态
IB与以太之争 以太网替代IB趋势明显。据相关报告:2024年TOP500的超算中,采用以太网方案占比48.5%,InfiniBand占比为39.2%,其中排名前6的超算中已有5个使用以太网互联。 开放系统战胜封闭系统仅是时间问题。我们已经看到…...

【制作100个unity游戏之31】用unity制作一个爬坡2d赛车小游戏
最终效果 【制作100个unity游戏之31】用unity制作一个爬坡2d赛车小游戏 前言 今天用unity制作一个简单的爬坡2d赛车小游戏 素材 https://www.spriters-resource.com/mobile/hillclimbracing/ 拼装车素材 车身添加碰撞体,摩檫力0 轮胎添加碰撞体和刚体࿰…...
Spring Boot 注解 @PostConstruct 介绍
Spring Boot 注解 PostConstruct 介绍 文章目录 Spring Boot 注解 PostConstruct 介绍一、基本介绍二、PostConstruct 的执行时机Spring Bean 的生命周期PostConstruct 的确切执行时机执行顺序示例重要注意事项 三、使用场景及代码示例1. 初始化资源:比如打开数据库…...
深度学习环境配置报错解决日记
2024年7越24日 1、detectron2需要编译 首先需要在自己创建的虚拟环境中下载一下detectron2 conda create -n pytorch python3.9 conda activate pythorch git clone https://github.com/facebookresearch/detectron2.git 接下来就是编译环节: 在win系统中&…...

百度,有道,谷歌翻译API
API翻译 百度,有道,谷歌API翻译(只针对中英相互翻译),其他语言翻译需要对应from,to的code 百度翻译 package fills.tools.translate; import java.util.ArrayList; import java.util.HashMap; import java.util.Lis…...
java-双亲委派机制
Java虚拟机(JVM)中的类加载器(Class Loader)负责将类(.class文件)加载到JVM中,以便Java程序能够使用这些类。在JVM中,类加载器被组织成一种层次结构关系,这种层次结构关系…...

【C++】set的使用
🔥个人主页: Forcible Bug Maker 🔥专栏: STL || C 目录 🌈前言🌈关于set🔥容量函数emptysize 🔥Modifiersinserteraseclear 🔥Operationsfindcountlower_bound和upper_…...
React 18【实用教程】(2024最新版)
搭建开发环境 含配置,react-developer-tools 和 Redux DevTools 下载安装 https://blog.csdn.net/weixin_41192489/article/details/138523829 JSX 语法 https://blog.csdn.net/weixin_41192489/article/details/138649165 组件 父子组件传值、兄弟组件传值、越层组…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...
FOPLP vs CoWoS
以下是 FOPLP(Fan-out panel-level packaging 扇出型面板级封装)与 CoWoS(Chip on Wafer on Substrate)两种先进封装技术的详细对比分析,涵盖技术原理、性能、成本、应用场景及市场趋势等维度: 一、技术原…...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)
注:文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件:STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...

【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项
一、条形码识别改名使用教程 打开软件并选择处理模式:打开软件后,根据要处理的文件类型,选择 “图片识别模式” 或 “PDF 识别模式”。如果是处理包含条形码的 PDF 文件,就选择 “PDF 识别模式”;若是处理图片文件&…...

Python异步编程:深入理解协程的原理与实践指南
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 持续学习,不断…...