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

Ansible(三)—— 使用Ansible自动化部署LNMP环境实战指南

文章目录

  • 前言
  • 一、环境准备
    • 1.1 主机规划
    • 1.2 主机清单配置
    • 1.3 创建角色目录结构
  • 二、编写Nginx角色
    • 2.1 任务(Tasks)配置
      • 2.1.1 初始化任务
      • 2.1.2 主任务文件
    • 2.2 变量(Vars)定义
    • 2.3 处理程序(Handlers)
    • 2.4 配置文件
  • 三、编写MySQL角色
    • 3.1 任务(Tasks)配置
    • 3.2 变量(Vars)定义
  • 四、编写PHP角色
    • 4.1 任务(Tasks)配置
    • 4.2 变量(Vars)定义
    • 4.3 处理程序(Handlers)
    • 4.4 配置文件
      • 4.4.1 PHP测试页面
      • 4.4.2 PHP-FPM配置文件
  • 五、编写主剧本
  • 总结

前言

在当今的DevOps环境中,自动化部署已经成为提高效率和保证环境一致性的关键技术。Ansible作为一款强大的自动化运维工具,以其简单易用、无需代理的特点受到广泛欢迎。

本文将详细介绍如何使用Ansible角色(Roles)来自动化部署LNMP(Linux + Nginx + MySQL + PHP)环境,实现一键式部署,大大提高运维效率。

一、环境准备

1.1 主机规划

在本实践中,我们使用以下主机环境:

  • 192.168.10.22 - Ansible控制节点
  • 192.168.10.14 - Web服务器,准备安装Nginx
  • 192.168.10.15 - 数据库服务器,准备安装MySQL
  • 192.168.10.16 - PHP服务器,准备安装PHP

1.2 主机清单配置

首先需要在Ansible控制节点上配置主机清单文件:

vim /etc/ansible/hosts[webservers]
192.168.10.14[dbservers]
192.168.10.15[phpservers]
192.168.10.16

1.3 创建角色目录结构

Ansible角色采用标准的目录结构,便于管理和维护:

# 创建nginx角色目录
mkdir /etc/ansible/roles/nginx/{files,templates,tasks,handlers,vars,defaults,meta} -p# 创建mysql角色目录
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p# 创建php角色目录
mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta} -p# 创建各角色的主配置文件
touch /etc/ansible/roles/nginx/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml

二、编写Nginx角色

2.1 任务(Tasks)配置

2.1.1 初始化任务

创建初始化任务文件,包含系统基础配置:

vim /etc/ansible/roles/nginx/tasks/init.yml- name: disable selinuxcommand: '/usr/sbin/setenforce 0'ignore_errors: true- name: disable firewalldservice: name: firewalld state: stopped enabled: no

2.1.2 主任务文件

定义Nginx安装和配置的主要任务:

vim /etc/ansible/roles/nginx/tasks/main.yml- include: init.yml
- name: install nginx repoyum: name: "{{ repo }}" - name: install nginxyum: name: "{{ app }}" state: latest- name: prepare httpd configuration filecopy: src: default.conf dest: /etc/nginx/conf.d/default.confnotify: - restart nginx- name: start nginxservice: name: "{{ svc }}" state: started enabled: yes

2.2 变量(Vars)定义

定义Nginx角色使用的变量:

vim /etc/ansible/roles/nginx/vars/main.ymlrepo: http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
app: nginx
svc: nginx

2.3 处理程序(Handlers)

定义Nginx服务重启的处理程序:

vim /etc/ansible/roles/nginx/handlers/main.yml- name: restart nginxservice: name: "{{ svc }}" state: restarted

2.4 配置文件

准备Nginx的配置文件:

vim /etc/ansible/roles/nginx/files/default.confserver {listen      80;server_name  www.simoncwh.com;location / {root   /usr/share/nginx/html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}location ~ \.php$ {root           /www;fastcgi_pass   192.168.10.16:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;include        fastcgi_params;}
}

三、编写MySQL角色

3.1 任务(Tasks)配置

定义MySQL安装和配置任务:

vim /etc/ansible/roles/mysql/tasks/main.yml- include: init.yml
- name: install mysql repo firstyum: name: "{{ repo }}"- name: install mysql repo secondreplace:path: /etc/yum.repos.d/mysql-community.reporegexp: '^gpgcheck=1'replace: 'gpgcheck=0'- name: install mysql appyum: name: "{{ app }}" state: latest- name: mysql start service: name: "{{ svc }}"state: started enabled: yes- name: first passwordshell: mysql -uroot -p"{{ passwd }}" --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'Admin@123';"- name: sudo loginshell: mysql -uroot -pAdmin@123 -e "grant all privileges on *.* to root@'%' identified by 'Admin@123' with grant option;"

3.2 变量(Vars)定义

定义MySQL角色使用的变量:

vim /etc/ansible/roles/mysql/vars/main.ymlrepo: https://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpmpasswd: $(grep "password" /var/log/mysqld.log | awk '{print $NF}')app: mysql-server
svc: mysqld

四、编写PHP角色

4.1 任务(Tasks)配置

定义PHP安装和配置任务:

vim /etc/ansible/roles/php/tasks/main.yml- include: init.yml
- name: install php repoyum: name: "{{ repo }}"- name: install php appyum: name: "{{ app }}"ignore_errors: true- name: add php useruser: name: php shell: /sbin/nologin- name: create /www dirfile: path: /www state: directory- name: copy index.phpcopy: src: index.php dest: /www/index.php- name: copy configuration filecopy: src: www.conf dest: /etc/php-fpm.d/www.confnotify: - reload php-fpm- name: modify php.inireplace:path: /etc/php.iniregexp: ;date.timezone =replace: date.timezone = Asia/shanghai- name: start php-fpmservice: name: "{{ svc }}" state: started enabled: yes

4.2 变量(Vars)定义

定义PHP角色使用的变量:

vim /etc/ansible/roles/php/vars/main.ymlapp:- php72w- php72w-cli- php72w-common- php72w-devel- php72w-embedded- php72w-gd- php72w-mbstring- php72w-pdo- php72w-xml- php72w-fpm- php72w-mysqlnd- php72w-opcachesvc: php-fpmrepo:- epel-release- https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

4.3 处理程序(Handlers)

定义PHP-FPM服务重启的处理程序:

vim /etc/ansible/roles/php/handlers/main.yml- name: reload php-fpmservice: name: "{{ svc }}" state: restarted

4.4 配置文件

4.4.1 PHP测试页面

创建PHP测试页面,用于验证PHP与MySQL的连接:

vim /etc/ansible/roles/php/files/index.php<?php
$link=mysqli_connect('192.168.10.15','root','Admin@123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>

4.4.2 PHP-FPM配置文件

配置PHP-FPM服务,确保与Nginx正常通信:

vim /etc/ansible/roles/php/files/www.conf; 精简后的关键配置
[www]
user = php
group = php
listen = 192.168.10.16:9000
listen.allowed_clients = 192.168.10.14
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

五、编写主剧本

创建主剧本文件,编排各个角色的执行顺序:

# role_lnmp.yml
---
- hosts: webserversremote_user: rootroles:- nginx
- hosts: dbserversremote_user: rootroles:- mysql
- hosts: phpserversremote_user: rootroles:- php
# 运行剧本
cd /etc/ansible
ansible-playbook role_lnmp.yml

总结

通过本文的详细介绍,我们完成了使用Ansible角色自动化部署LNMP环境的全过程。这种方法具有以下优势:

  1. 模块化设计:每个服务作为独立的角色,便于维护和复用
  2. 变量集中管理:将配置参数提取为变量,提高灵活性
  3. 任务清晰分离:初始化、安装、配置、服务管理任务分离,逻辑清晰
  4. 处理程序机制:只有在配置变更时才触发服务重启,提高效率
  5. 一键部署:通过主剧本统一调度,实现整个环境的自动化部署

这种基于Ansible角色的部署方法不仅适用于LNMP环境,还可以扩展到其他复杂应用的自动化部署中,是现代化运维工作中不可或缺的重要技能。通过不断优化和完善角色配置,可以构建出更加健壮和高效的自动化部署体系。

http://www.dtcms.com/a/449158.html

相关文章:

  • 【深度学习新浪潮】有没有可能设计出一种统一架构,可以同时处理图像理解的各种下游任务?
  • 介绍一下什么是RabbitMQ的发送者可靠性?
  • 网站后台管理页面模板北京企业建网站定制价格
  • AI编辑器(二) ---调用模型的fim功能
  • UniApp 自定义导航栏适配指南:微信小程序胶囊遮挡、H5 与 App 全端通用方案
  • 数据结构其一 线性表
  • 2025年--Lc164--H14.最长公共前缀(数组和字符串)--Java版
  • 网站html有了怎么建设网站钉钉小程序开发
  • Linux基本指令(2)
  • 从工具到中枢:2025 年 AI 重构实体经济的实践图景
  • 虚幻基础:攻击 与 受击 之间的联动
  • 如何在不降低画质的前提下缩小图片体积?附实操方案
  • 个人网站注册费用互联网广告价格
  • 【学习笔记02】C++面向对象编程核心技术详解
  • vite与ts的结合
  • arcgis如何将一部分shp地图截取下来并处理成networkx格式
  • .NET Aspire深度解析:重新定义云原生分布式应用开发的“秘密武器“
  • 标准件网站开发手机淘宝网页版
  • 【网络编程】揭秘 HTTPS 数据安全:加密方案与证书体系的协同防护
  • Windows Server 2022 安装教程(从 ISO 文件安装 Server STD CORE 2022 64位系统)​
  • 【STM32】墨水屏驱动开发
  • Java 大视界 -- 基于 Java 的大数据实时流处理在工业物联网设备故障预测与智能运维中的应用
  • 【MySQL】SQL的分类
  • Flutter GridView 使用指南
  • day86——有效的字母异位词(LeetCode-242)
  • 企业的网站建设费用重庆seo什么意思
  • 网站搭建介绍网站建设的原因
  • 怎么建免费网站建设公司网站新闻宣传管理制度
  • Deep Code Research:当 Deep Research 遇上 ABCoder
  • JavaEE初阶——中秋特辑:网络编程送祝福从 Socket 基础到 TCP/UDP 实战