自动化运维工具Ansible——(3)Playbook部署LNMP

本文详细介绍了如何使用Ansible的Playbook自动化部署LNMP(Nginx、MySQL、PHP)环境。从yum安装LNMP组件到配置Nginx、PHP、MySQL,再到使用Roles组织Playbook,实现模块化部署。文章涵盖了创建相关目录、配置hosts文件、编写site.yml和webserver.yml、构建并配置Nginx、PHP、MySQL角色,以及使用handlers处理服务重启等任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

playbook

通过playbook安装管理LNMP

本案例是通过rpm包部署LNMP环境(基于aliyun和epel源),如果要通过源码包部署的话,可以编写shell脚本,通过script模块进行批量部署LNMP。

yum安装LNMP环境

首先,我们可以在ansible服务器上安装LNMP环境,然后,再将配置文件通过ansible拷贝到远程主机上

安装nginx软件

[root@ansible-server ~]# yum -y install nginx     #通过aliyun和epel源(epel 7)

[root@ansible-server ~]# systemctl start nginx

测试访问nginx的默认测试页:http://192.168.10.4

安装MySQL

[root@ansible-server ~]# yum install -y mariadb-server  mariadb

[root@ansible-server ~]# mkdir -p /data/mysql/data   #创建数据库保存目录

[root@ansible-server ~]# chown -R mysql:mysql /data/mysql/  #修改权限

[root@ansible-server ~]# vim /etc/my.cnf         #修改数据保存目录

[mysqld]
datadir=/data/mysql/data    #修改此行,其他参数保持默认即可

安装PHP和php-mysql模块和php-fpm模块

[root@ansible-server ~]# yum install -y php php-mysql php-fpm

[root@ansible-server ~]# systemctl start php-fpm

提供php的测试页

[root@ansible-server ~]# vim /usr/share/nginx/html/index.php

<?php
phpinfo();
?>

修改nginx.conf,支持php访问

[root@ansible-server ~]# vim /etc/nginx/nginx.conf  #在server{}中添加标红部分的内容

user nginx;

worker_processes auto;

error_log /var/log/nginx/error.log;

pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {

    worker_connections 1024;

}

http {

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;

    tcp_nopush          on;

    tcp_nodelay         on;

    keepalive_timeout   65;

    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;

    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;

    server {

        listen       80 default_server;

        listen       [::]:80 default_server;

        server_name  _;

        root         /usr/share/nginx/html;

        index index.php index.html;

        include /etc/nginx/default.d/*.conf;

        location / {

        }

        location ~ .*\.(php|php5)?$ {

            fastcgi_pass 127.0.0.1:9000;

            fastcgi_index index.php;

            include fastcgi.conf;

        }

        error_page 404 /404.html;

            location = /40x.html {

        }

        error_page 500 502 503 504 /50x.html;

            location = /50x.html {

        }

    }

}

重启nginx服务

[root@ansible-server ~]# systemctl restart nginx

测试LNMP

http://192.168.10.4/

确保已经出现上面的测试页,而且,要看到MySQL已经被整合进来了,才能进行下一步操作

roles 角色

当我们刚开始学习运用 playbook 时,因为操作很多,所以很可能会把 playbook 写成一个很大的文件,慢慢你会发现,playbook的内容较为混乱,难以管理,怎么组织我们的Playbook才能让他们清晰明了,易于管理呢?也就是在这样的条件下,我们的Roles角色,才能体现出其功能。

Roles相当于我们剧本当中的角色,每个角色都有不同的事情要做,也正是分工才体现出了每个角色不同的作用,当你需要做不同的事情时,只需要调用不同角色即可。

比如一个互联网公司,想要研发新的软件时,就需要找产品去设计软件,找开发去研发软件,找测试去测试软件,找运维去维护软件,每一个角色都会完成各自的功能,这就是Role的作用。

总结:

Roles 角色:以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等;相当于函数的调用把各个事件切割成片段来执行。

基于角色的方式部署LNMP

基于此案例我们先了解下Ansible自动化部署目录结构,当我们在做一个自动化部署的案例时,往往不会使用默认的配置项以及配置文件,都会单独创建自己的配置文件,也会根据功能不同,划分出不同的目录,因此,一个成熟的ansible项目会具备自己所需求的目录结构。

ansible.cfg 对于整个项目的配置文件

hosts 定义主机的配置文件

roles 定义角色的目录(名字不能修改)

prepare 角色目录

nginx 角色目录

mysql 角色目录

php 角色目录

role_name/     #在相关角色目录下通常要创建如下目录

files/:存储由copy或script等模块调用的文件,例如存放需要同步到远程服务器的源码文件及配置文件等。

tasks/:此目录中至少应该有一个名为main.yml的文件,用于定义各task;其它的文件需要由main.yml进行“包含”调用;

handlers/:此目录中至少应该有一个名为main.yml的文件,用于定义各handler;其它的文件需要由main.yml进行“包含”调用;例如当服务的配置文件发生变化时需要进行的操作,比如:重启服务,重新加载配置文件。

vars/:此目录中至少应该有一个名为main.yml的文件,用于定义各variable;其它的文件需要由main.yml进行“包含”调用;

templates/:存储由template模块调用的模板文本。如用于执行lnmp相关配置文件的模板文件。

meta/:角色定义,可留空。此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的文件需要由main.yml进行“包含”调用;

site.yml 整个项目的入口文件

webserver.yml webserver分支的入口文件

注:这些目录、文件都需要自己创建

配置playbook创建LNMP构建的任务

创建相关目录

root@ansible-server ~]# mkdir -p /ansible/lnmp/roles/{prepare,nginx,mysql,php}/{tasks,files,templates,vars,meta,handlers}

[root@ansible-server lnmp]# touch {firewalld.yml,main.yml,selinux.yml,yum.yml}

配置被管理主机

开始编辑各自的文件,首先是hosts文件

设置ssh免密连接

注:设置过请跳过

[root@ansible-server ~]# ssh-keygen

[root@ansible-server ~]# ssh-copy-id root@192.168.10.5

[root@ansible-server ~]# ssh-copy-id root@192.168.10.6

定义hosts文件

[root@ansible-server ~]# vim /ansible/lnmp/hosts

[nginx]
nginx01 ansible_ssh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值