playbooks 分布式部署 LNMP

news2024/9/9 0:57:57

1、环境配置

  • ansible 服务器    192.168.10.10
  • nginx   服务器    192.168.10.20
  • mysql  服务器    192.168.10.21
  • php     服务器    192.168.10.22
     

2、安装 ansble 

#192.168.10.10节点
yum install -y epel-release	 #先安装 epel 源
yum install -y ansible

配置主机清单 

cd /etc/ansible
vim hosts       
[nginx]
192.168.10.20

[mysql]
192.168.10.21

[php]
192.168.10.22

设置免密登录

 
 #3、ansible默认使用ssh连接,所以管理前要设置免密登录
 #配置密钥对验证
 ssh-keygen -t     #一路回车,生成密钥文件
 ​
 vim /etc/ssh/ssh_config      #修改ssh服务端和ssh客户端配置文件
 StrictHostKeyChecking no     #35行,取消注释,将ask修改为no,开启免交互
 ​
 systemctl restart sshd       #重启sshd
 
 
 
//配置密钥对验证
ssh-keygen -t rsa		#一路回车,使用免密登录
sshpass -p 'root的密码' ssh-copy-id root@192.168.10.20
sshpass -p 'root的密码' ssh-copy-id root@192.168.10.21
sshpass -p 'root的密码' ssh-copy-id root@192.168.10.22

3、配置安装nginx

配置nginx相关文件

#配置 nginx 支持 PHP 解析
vim nginx.conf.j2

    server {
        listen       {{server_ip}}:{{http_port}};
        server_name  {{host_name}};

        charset utf-8;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.php index.html;
        }


......
        location ~ \.php$ {
            root           html;
            fastcgi_pass   192.168.10.22:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }

编写 lnmp.yaml 的 nginx 部分

- name: nginx play
  hosts: webservers
  remote_user: root
  gather_facts: false
  vars:
  - nginx_addr: 192.168.10.20
  - nginx_port: 80
  - nginx_hostname: www.xy101.com
  - root_dir: /var/www/html
  - php_addr: 192.168.10.22
  - php_port: 9000
  tasks:
  - name: disable firewalld
  - service: name=firewalld state=stopped enabled=no
  - name: disable selinux
    command: 'setenforce 0'
    ignore_errors: true
  - name: copy nginx repo
    copy: src=/opt/nginx/nginx.repo dest=/etc/yum.repos.d/
  - name: install nginx
    yum: name=nginx state=latest
  - name: create root  dir
    file: path={{root_dir}} state=directory
  - name: copy nginx config template file
    template: src=/opt/nginx/nginx.conf.j2 dest=/etc/nginx/nginx.conf
    notify: 'reload nginx'
  - name: create nfs config
    copy: content="{{root_dir}} 192.168.10.0/24(rw,rsync,no_root_squash)" dest=/etc/exports
  - name: restart rpcbind,nfs,nginx
    service: name={{item}} state=restarted enabled=yes
    with_items:
    - rpcbind
    - nfs
    - nginx
  handlers:
  - name: reload nginx
    service: name=nginx state=reloaded

测试nginx

#在ansible服务器运行
cd /etc/ansible/playbooks/
ansible-playbook lnmp.yaml --syntax-check    #检查yaml文件的语法是否正确
ansible-playbook lnmp.yaml
#在 nginx 服务器查看
systemctl status nginx
netstat -lntp | grep nginx

4、安装 mysql

mysql相关文件配置

准备mysql初始化脚本文件

编写 lnmp.yaml 的 mysql 部分

- name: mysql play
  hosts: dbservers
  remote_user: root
  gather_facts: false
  tasks:
  - name: disable mysql_server firewalld
    srvice: name=firewalld state=stopped enabled=no
  - name: disable mysql_server selinux
    command: 'setenforce 0'
    ignore_errors: true
  - name: remove mariadb
    yum: name=mariadb* state=absent
  - name: copy mysql repo
    copy: src=/opt/mysql/mysql-community.repo dest=/etc/yum.repos.d/
  - name: modify mysql repo
    replace: path=/etc/yum.repos.d/mysql-community.repo regexp="gpgcheck=1" replace="gpgcheck=0"
  - name: install mysql
    yum: name=mysql-server state=present
  - name: start mysql
    service: name=mysql state=started enable=yes
  - name: init mysql
    script: '/opt/mysql/mysql-init.sh'

5、安装php

- name: php play
  hosts: phpservers
  remote_user: root
  gather_facts: false
  vars:
  - php_username: nginx
  - php_addr: 192.168.10.22:9000
  - nginx_addr: 192.168.10.20
  - root_dir: /var/www/html
  tasks:
  - name: disable php_server firewalld
    service: name=firewalld state=stopped
  - name: disable php_server selinux
    command: 'setenforce 0'
  - name: unarchive php tar pkg
    unarchive: copy=yes src=/opt/php/php.tar.gz dest=/mnt/
  - name: copy local repo
    copy: src=/opt/php/local.repo dest=/etc/yum.repos.d/
  - name: create repo
    shell: 'createrepo /mnt && yum clean all && yum makecache'
  - name: install 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,php72w-ldap,php72w-bcmath state=present
  - name: create php user
    user: name={{php_username}} shell=/sbin/nologin create_home=no
  - name: modify php.ini
    replace: path=/etc/php.ini regexp=";date.timezone =" replace="date.timezone = Asia/Shanghai"
  - name: modify user and group 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=php-fpm state=started enabled=yes
  - name: create www root dir
    file: path={{root_dir}} state=directory
  - name: mount nfs
    mount: src="{{nginx_addr}}:{{root_dir}}" path={{root_dir}} fstype=nfs state=mounted opts="defaults,_netdev"
  handlers:
  - name: reload php-fpm
    service: name=php-fpm state=reloaded

访问测试

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

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

相关文章

Vue 动态改变css文件

theme: smartblue 一、背景需求 现有 Vue3 项目,要求点击按钮后,会动态加载css文件内容 二、实现过程 2.1 相关代码 假设有 blue.css 和 red.css,要求点击加载对应文件 若想切换为原版样式,点击 back 回退到初始样式 this is a simple text …

76.SAP ME - 归档

目录 1.归档 2.系统设置维护 3.后台处理执行 1.归档 可使用此功能将某一特定已完成产品的相关记录从活动的“在制品”(WIP) 数据库移动到归档数据库,这样可改进生产记录的检索。在一段时间内,WIP 数据库中的记录数量将增加。当系统在大量记录中进行搜…

c++ 内存管理(newdeletedelete[])

因为在c里面新增了类,所以我们在有时候会用malloc来创建类,但是这种创建只是单纯的开辟空间,没有什么默认构造的。同时free也是free的表面,如果类里面带有指针指向堆区的成员变量就会free不干净。 所以我们c增加了new delete和de…

pdf太大怎么压缩大小?这几种压缩方法操作起来很简单!

pdf太大怎么压缩大小?在数字化洪流席卷的当下,PDF文件的“臃肿”难题如同巨石般横亘于高效办公之路,它们不仅贪婪地吞噬着宝贵的存储空间,更如沉重的枷锁,拖曳着我们的工作进度,步入迟缓之境,试…

06 内置的整数、实数与复数

在 Python 中,内置的数字类型有整数、实数和复数,借助于标准库 fractions 中的 Fraction 对象可以实现分数及其运算,而 fractions 中的 Decimal 类则实现了更高精度的运算。 Python 支持任意大的数字,具体可以大到什么程度仅受内…

电阻液冷 可提升 3.3kV 中压负载-EAK水冷电阻器

电阻液冷 可提升 3.3kV 中压负载-EAK水冷电阻器 在工业和海洋应用中,水冷在削减电阻器封装方面至关重要的地方 在起重机、升降机、升降机和输送机等电机驱动应用中,风冷电阻器很常见,但在中压、高功率应用中,液体冷却胜出。 使…

IDEA项目的依赖(pom.xml文件)导入问题及解决

前言:该文章为转载,没有仔细的看 IDEA新建项目和pom.xml文件被修改时,右下角都会出现 Maven projects need to be imported(项目需要导入依赖) 如下,点击 Import Changes导入后,有时会一直处于…

【基础篇】Docker 概览 ONE

嗨,大家好!我是小竹笋,一名热爱创作的工程师。今天我将带领大家一起踏上探索 Docker 的奇妙之旅。我们先从 Docker 的历史和发展说起,然后再看看 Docker 和虚拟机之间的区别,最后了解一下 Docker 在各行各业的应用情况…

数据结构算法经典题目刨析(c语言)返回单链表的倒数第 k 个节点

💓 博客主页:C-SDN花园GGbond ⏩ 文章专栏:数据结构经典题目刨析(c语言) 一.题目描述 二.解题思路 方法一:计数器方式 先遍历链表,求出链表长度count倒数第k个节点,就是正数第count-k1个节点(下标为count…

《系统架构设计师教程(第2版)》第13章-层次式架构设计理论与实践-02-表现层框架设计

文章目录 1. 表现层设计模式1.1 MVC模式1.1.1 三个核心模块1)控制器 (Controller)2)模型 (Model)3)视图 (View): 1.1.2 过程1.1.3 优点1.1.4 应用 1.2 MVP模式1.3 MVVM模式 2. 使用XML设计表现层统一Web Form与 Windows Form的外观3. 表现层中…

⚠️ Buffer Overflow: 安全编码必备知识 ️

⚠️ Buffer Overflow: 安全编码必备知识 🛡️ ⚠️ Buffer Overflow: 安全编码必备知识 🛡️摘要引言正文内容一、缓冲区溢出基本概念 🧩二、常见场景及实际案例 🛠️2.1 利用不安全的函数2.2 堆溢出攻击 三、调试技巧 &#x1f…

算法入门:Java实现排序、查找算法

链接:算法入门:Java实现排序、查找算法 (qq.com) 冒泡/选择/插入/希尔排序代码 (qq.com) 快排/归并/堆排/基数排序代码 (qq.com)

Python酷库之旅-第三方库Pandas(053)

目录 一、用法精讲 196、pandas.Series.first方法 196-1、语法 196-2、参数 196-3、功能 196-4、返回值 196-5、说明 196-6、用法 196-6-1、数据准备 196-6-2、代码示例 196-6-3、结果输出 197、pandas.Series.head方法 197-1、语法 197-2、参数 197-3、功能 1…

【C++题解】1069. 字符图形5-星号梯形

问题&#xff1a;1069. 字符图形5-星号梯形 类型&#xff1a;嵌套循环、图形输出 题目描述&#xff1a; 打印字符图形。 输入&#xff1a; 一个整数&#xff08; 0<n<10 &#xff09;。 输出&#xff1a; 一个字符图形。 样例&#xff1a; 输入&#xff1a; 3输…

卷积神经网络(三)---案例分析

上面部分介绍了 PyTorch 中的卷积模块&#xff0c;接下来将会介绍几个卷积神经网络的案例&#xff0c;通过案例入手来介绍卷积神经网络的结构设计。 1. LeNet LeNet 是整个卷积神经网络的开山之作&#xff0c;1998年由 LeCun 提出&#xff0c;它的结构特别简单&#xff0c;我们…

看懂循环队列

循环队列的设计过程 1.循环队列2.设计循环队列的逻辑过程2.1 定义循环队列的数据结构2.2 初始化队列2.3 入队操作2.4. 出队操作2.5 判断队列状态2.5 获取队头和队尾的元素力扣相关题目完整代码 1.循环队列 循环队列是使用有限数组来模拟队列&#xff0c;与普通的队列不同的是&…

文献综述在确定先前研究中使用的方法学方法方面发挥什么作用

VersaBot一键生成文献综述 文献综述在确定先前研究中使用的方法学方法方面发挥着至关重要的作用&#xff0c;可以作为设计自己的方法论并证明其重要性的基础。就是这样; 1. 揭示现有方法&#xff1a; 通过探索与您的主题相关的研究&#xff0c;您将发现其他研究人员采用的不同…

普通人有必要学Python吗?学了之后能做什么?

目录 首先来说一下极其推荐的方向&#xff1a; 1、数据分析 2、科学计算 3、大数据框架 4、脚本开发 5、爬虫 6、Web框架 总结&#xff1a; 如果你还没有开始使用Python&#xff0c;答应我&#xff0c;把这个回答看完&#xff0c;如果你真的学习并深入使用过Python&…

锅总浅析虚拟化技术

常见的虚拟化技术有哪些&#xff1f;KVM集群解决方案有哪些&#xff1f;如何用Libvirt操作KVM组成集群&#xff1f;PVE构建虚拟化的特性和其架构又是怎样的&#xff1f;希望完本文&#xff0c;能帮您解答这些疑惑&#xff01; 一、常见虚拟化技术概述 虚拟化技术是一种通过软…