通过playbook部署LNMP环境

目录

1、yum安装LNMP环境

1.1、安装nginx软件

 1.2、安装MySQL

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

1.4、提供php的测试页

 1.5、修改nginx.conf,支持php访问

1.6、测试LNMP

 2、roles角色

 3、基于角色的方式部署LNMP

 4、配置playbook创建LNMP构建的任务

4.1、创建相关目录

4.2、配置被管理主机

4.2.1、设置ssh免密连接

4.2.2、定义hosts文件

 4.3、配置site.yml

4.4、配置webserver.yml,构建prepare角色

 5、构建nginx角色

 5.1、配置nginx的tasks

 5.2、复制相应的安装包和模板到对应目录下

5.3、根据需要修改nginx的配置文件模板。(这里改的是work进程生成数和监听的端口)

 5.4、构建nginx的handlers目录和vars/下的main.yml文件

6、 构建PHP角色

 6.1、配置php的tasks

 6.2、复制相应的安装包和模板到对应目录下

6.3、构建php的handlers目录下的main.yml文件

 7、构建mysql角色

 7.1、配置mysql的tasks

7.2、复制相应的安装包和模板到对应目录

 7.3、构建mysql的handlers目录下的main.yml文件


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

1、yum安装LNMP环境

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

1.1、安装nginx软件

[root@cong11 ~]# yum -y install nginx     #通过aliyun和epel源
[root@cong11 ~]# systemctl start nginx

测试访问nginx的默认测试页:

 1.2、安装MySQL

[root@cong11 ~]# yum install -y mariadb-server  mariadb
[root@cong11 ~]# mkdir -p /data/mysql/data   #创建数据库保存目录
[root@cong11 ~]# chown -R mysql:mysql /data/mysql/  #修改权限
[root@cong11 ~]# vim /etc/my.cnf         #修改数据保存目录

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

[root@cong11 ~]# systemctl start mariadb

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

[root@cong11 ~]# yum install -y php php-mysql php-fpm
[root@cong11 ~]# systemctl start php-fpm

1.4、提供php的测试页

[root@cong11 ~]# vim /usr/share/nginx/html/index.php

<?php
phpinfo();
?>

 1.5、修改nginx.conf,支持php访问

[root@cong11 ~]# 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@cong11 ~]# systemctl restart nginx

1.6、测试LNMP

 

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

 2、roles角色

    当我们刚开始学习运用 playbook 时,因为操作很多,所以很可能会把 playbook 写成一个很大的文件,慢慢你会发现,playbook的内容较为混乱,难以管理,怎么组织我们的Playbook才能让他们清晰明了,易于管理呢?也就是在这样的条件下,我们的Roles角色,才能体现出其功能。
    Roles相当于我们剧本当中的角色,每个角色都有不同的事情要做,也正是分工才体现出了每个角色不同的作用,当你需要做不同的事情时,只需要调用不同角色即可。
    比如一个互联网公司,想要研发新的软件时,就需要找产品去设计软件,找开发去研发软件,找测试去测试软件,找运维去维护软件,每一个角色都会完成各自的功能,这就是Role的作用。
    总结:
Roles 角色:以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等;相当于函数的调用把各个事件切割成片段来执行。
    估计对roles还是有一点点模糊吧,没关系,通过案例我们再来捋顺下们的思路

 3、基于角色的方式部署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进行“包含”调用;

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于一键部署 LNMPLinux + Nginx + MySQL + PHP)环境,可以使用 Ansible 来自动化部署。Ansible 是一种配置管理工具,可以通过编写 YAML 或 JSON 格式的配置文件来描述所需的部署步骤。 下面是一个简单的 Ansible playbook 示例,用于一键部署 LNMP 环境: ```yaml --- - name: Deploy LNMP hosts: your_servers become: yes tasks: - name: Install dependencies apt: name: - nginx - mysql-server - php-fpm state: latest - name: Configure Nginx template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf - name: Start Nginx service: name: nginx state: started enabled: yes - name: Configure MySQL template: src: my.cnf.j2 dest: /etc/mysql/my.cnf - name: Start MySQL service: name: mysql state: started enabled: yes - name: Configure PHP-FPM template: src: php-fpm.conf.j2 dest: /etc/php/7.4/fpm/php-fpm.conf - name: Start PHP-FPM service: name: php-fpm state: started enabled: yes ``` 在上面的示例中,您需要将 `your_servers` 替换为目标服务器的 IP 地址或主机名。该 playbook 的任务包括安装依赖软件包、配置 Nginx、MySQL 和 PHP-FPM,以及启动相应的服务。 您还需要编写对应的模板文件,例如 `nginx.conf.j2`、`my.cnf.j2` 和 `php-fpm.conf.j2`,用于生成配置文件。这些模板文件中可以包含您自定义的配置内容。 通过运行以下命令来执行 Ansible playbook: ```shell ansible-playbook deploy_lnmp.yml ``` 以上是一个简单的示例,您可以根据实际需求进行修改和扩展。希望对您有帮助!如有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值