001.Ansible playbook部署LNMP(RPM包形式)

 

  • 前言

基于 Ansible playbook 快速构建起LNMP环境的实战的第一篇 。


 

1、环境描述

软件 版本

OS

CentOS 7.4

Ansible

2.4.2 (extra仓库)

Nginx

扫描二维码关注公众号,回复: 9949117 查看本文章

1.16.1(epel仓库)

PHP

5.4.16

Mysql

5.5.64
节点 规格 地址 角色

node1

2CPU 2G

192.168.3.175

Ansible管理节点及被管理节点,部署nginx

node2

2CPU 2G

192.168.3.176

Ansible被管理节点,部署php、mysql

2、准备操作

1.配置YUM源

yum install epel release yum clean all && yum makecache

2.安装Ansible

yum install ansible

3.配置Ansible

修改host文件

vim /etc/hosts

192.168.3.175 node01

192.168.3.176 node02

配置免密登录

ssh-keygen ssh-copy-id root@node01 ssh-copy-id root@node02

修改inventory文件

vim /etc/ansible/hosts

[nginx]

node01

[phpmysql]

node02

[LNMP]

node01

node02

测试Ansible

ansible all -m ping

3、准备所需文件

文件及目录描述

需要准备的文件如下:

1) phpmyadmin,phpMyAdmin-4.4.15-all-languages.tar.gz、node01-pma.sh、node02-pma.sh,config.inc.php

2)nginx,index.html ,www.jjf.com.conf

3)php-fpm,index.php,www.conf

4) mariadb,server.cnf

具体的生成步骤可以参考下文,也可以根据需要自行生成或修改。

文章中所用的文件的打包,可以通过如下链接进行获取

https://github.com/junfengjiang/

创建一个目录存稍后放这些文件,这些文件在稍后playbook当中都会用到

# mkdir /ansible

# cd /ansible/

准备phpMyAdmin所需文件

phpMyAdmin,简单来说是一个以php为基础的web服务器程序,让管理者可用Web接口 管理MySQL数据库。文章最后我们将通过phpMyAdmin来验证我们NMP环境可用性。

我们是已RPM包的形式部署的LNMP环境,考虑到phpMyAdmin对NMP版本的依赖,我们这里使用的是phpMyAdmin-4.4.15,其他软件本可以参考文章开头软件信息说明。

要说明的是其中phpMyAdmin配置脚本要两个,因为phpMyAdmin的动态内容和静态内容不是分开的,所以最简单的方式是到时node1和node2上都要有一份。

下载phpMyAdmin - > phpMyAdmin-4.4.15-all-languages.tar.gz

curl -O https://files.phpmyadmin.net/phpMyAdmin/4.4.15/phpMyAdmin-4.4.15-all-languages.tar.gz

提供phpMyAdmin配置脚本 -> node01-pma.sh

vim node01-pma.sh

#!/bin/bash

ln -sv /appdata/phpMyAdmin-4.4.15-all-languages /data/nginx/html/pma

提供phpMyAdmin配置脚本 -> node02-pma.sh

vim node02-pma.sh

#!/bin/bash ln -sv /appdata/phpMyAdmin-4.4.15-all-languages /appdata/pma

提供phpMyAdmin配置文件 ->config.inc.php

获取phpMyAdmin配置文件模板

tar -xvf phpMyAdmin-4.4.15-all-languages.tar.gz

cp phpMyAdmin-4.4.15-all-languages/config.sample.inc.php ./config.inc.php 

rm phpMyAdmin-4.4.15-all-languages -rf

生成一段随机数

openssl rand -base64 10 YyL82Wu2J4EjIw==

vim config.inc.php

只需修改这一项为上面生成的随机数

$cfg['blowfish_secret'] = 'YyL82Wu2J4EjIw'

准备nginx所需文件

我们需要提供一个nginx的测试页面,后面来验证nginx的安装情况。

而后需要定义一个server,其中定义两个location,所有以.php结尾的动态内容都通过fastcgi模块代理至后端的fpmserver,其余所有静态内容都由nginx自身来进行处理。

提供nginx测页 -> index.html

我们需要提供一个nginx的测试页面,后面来验证nginx的安装情况。

 vim index.html

<h1>hello nginx !!</h1>

提供nginx子配置文件 -> jjf.conf

server {
        listen 80;
        server_name www.jjf.com;
        index index.php index.html;
        location / {
                root /data/nginx/html;

        }
        location ~* \.php$ {
                fastcgi_pass 192.168.3.176:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME     /appdata$fastcgi_script_name;
                include fastcgi_params;
                
        }

}

准备php-fpm所需文件

同样提供一个php的简单测试页面(phpinfo函数),后面来验证php的安装情况。

而后提供一个www.conf的配置文件,简单修改www这个连接池的listen参数。

提供php测页 -> index.php

vim index.php

<?php
      phpinfo();

?>

提供php服务子配置文件 -> www.conf

这个配置文件内容太多就不贴出来了,可以跑一个php容器获取或者通过其他安装php的机器获取,文章中所有文件的打包上文也有链接

只需修改其中listene这一项

listen = 0.0.0.0:9000

准备mysql所需文件

最后我们也为mysql提供一个配置文件,但mysql就不做过多配置,只简单给出两个参数验证可行性。

提供mysql配置文件 -> server.cnf

这个配置文件内容太多就不贴出来了,可以跑一个mysql容器获取或者通过其他安装mysql的机器获取,文章中所有文件的打包上文也有链接。

简单修改[mysqld]这个配置段中,如下两个参数

[mysqld]

skip_name_resolve=ON

innodb_file_per_table=ON

到此我们需要的文件已经准备完成。

4、编写playbook

vim lnmp.yaml

# 安装软件包
- hosts: node01
  remote_user: root
  tasks:
  - name: install epel
    yum: name=epel-release state=latest
  - name: install nginx
    yum: name=nginx state=latest
- hosts: node02
  remote_user: root
  tasks:
  - name: install epel
    yum: name=epel-release state=latest
  - name: install php mysql
    yum: name={{ item }} state=latest
    with_items:
    - php-fpm
    - php-mysql
    - php-mbstring
    - php-mcrypt
    - mariadb-server

#配置并启动服务
- hosts: node01
  remote_user: root
  tasks:
  - name: mkdir nginx root
    shell: mkdir -pv /data/nginx/html
  - name: copy nginx config
    copy: src=/ansible/index.html dest=/data/nginx/html/
  - name: copy nginx config
    copy: src=/ansible/phpMyAdmin-4.4.15-all-languages.tar.gz dest=/data/nginx/html/
  - name: tar zxvf phpMyAdmin-4.4.15-all-languages.tar.gz
    shell: tar zxvf /data/nginx/html/phpMyAdmin-4.4.15-all-languages.tar.gz -C /data/nginx/html/
  - name: copy  pma.sh
    copy: src=/ansible/node01-pma.sh  dest=/data/nginx/html/
  - name: exec pma.sh
    shell: bash /data/nginx/html/node01-pma.sh
  - name: copy config inc php
    copy: src=/ansible/config.inc.php dest=/data/nginx/html/pma/
  - name: copy nginx config jjf.conf
    copy: src=/ansible/jjf.conf dest=/etc/nginx/conf.d
  - name: start nginx service
    service: name=nginx state=restarted
- hosts: node02
  remote_user: root
  tasks:
  - name: mkdir /var/lib/php/session
    shell: mkdir -pv /var/lib/php/session/ && chown apache:apache /var/lib/php/session/
  - name: copy www.conf
    copy: src=/ansible/www.conf dest=/etc/php-fpm.d/
  - name: start php-fpm
    service: name=php-fpm state=restarted
  - name: copy nginx config
    copy: src=/ansible/phpMyAdmin-4.4.15-all-languages.tar.gz dest=/appdata/
  - name: tar zxvf phpMyAdmin-4.4.15-all-languages.tar.gz
    shell: tar zxvf /appdata/phpMyAdmin-4.4.15-all-languages.tar.gz  -C /appdata/
  - name: copy  pma.sh
    copy: src=/ansible/node02-pma.sh  dest=/appdata
  - name: bash pma.sh
    shell: bash /appdata/node02-pma.sh
  - name: copy config.inc.php
    copy: src=/ansible/config.inc.php dest=/appdata/pma
  - name: copy config index.php
    copy: src=/ansible/index.php dest=/appdata/
    tags: copyindexphp
  - name: copy mariadb config
    copy: src=/ansible/server.cnf dest=/etc/my.cnf.d/
  - name: start mysql
    service: name=mariadb state=restarted

5、运行playbook

语法检查和dryrun测试一下

ansible-playbook --syntax-check lnmp.yaml

ansible-playbook -C lnmp.yaml

执行playbook

ansible-playbook lnmp.yaml

6、验证结果

测试nginx安装情况

测试php安装情况

最后测试phpmyadmin安装情况

phpmyadmin默认情况下,如果mysql的root为空是拒绝登录的。如果需要登录root需要有密码

mysqladmin -u root -p password '你的密码'

设置root密码后可以登录到web界面上,查看验证我们LAMP的各种版本信息

发布了2 篇原创文章 · 获赞 1 · 访问量 46

猜你喜欢

转载自blog.csdn.net/qq_33748334/article/details/104936106