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

 

  • 前言

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


 

1、环境描述

软件 版本

OS

CentOS 7.4

Ansible

2.4.2 (extra仓库)

Nginx

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