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

  • 前言


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


 

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

如果要手动生成可以参考上一篇文章"Ansible playbook部署LNMP(RPM包形式)",同样也可以通过如下连接直接获取

https://github.com/junfengjiang/

上一篇文章"Ansible playbook部署LNMP(RPM包形式)"中我们直接使用playbook部署LAMP,这种方式中相当于把ad-hoc方式的操作文档化通过playbook来描述,playbook中写成一个个 “play”,每个“play”中有不同的host(主机)和task(任务),或其他一些更复杂一些的控制逻辑或模块来完成我们的需求,然后ansbile再把我们编排好的这一个一个“play”中流程走一遍,从而达到我们所期望的结果。

这种方式一旦配置太多playbook会过于臃肿,而且所有文件都在不同的地方存放,移动管理起来也非常不方便。role的方式就相当于把这个playbook分割开来,把不同的文件和编排内容按照不同的角色先划分,然后再按照固定的组织结构去存放这些信息,使用用时只需要写一个简单入口文件调用这些角色就可以实现同样的编排效果。最重要的是管理和移动起来也非常方便,只需要了解目录的结构就知道去哪里找对应文件,只要把需要的role的文件(比如nginx)复制过去其他主机,再简单编写一个入口文件来调用这些角色就可以实现编排。


所以我们这次的组织结构和上一篇文章就有所不同了

准备role需要的目录

首先要按照特定的格式去组织目录,先定义三个role并创建必要目录结构

cd /etc/ansible/roles
mkdir -pv /etc/ansible/roles/{nginx,php,mysql}/{tasks,files,templates,meta,handlers,vars,default} 

准备nginx需要的文件

cp /ansible/{index.html,jjf.conf,node01-pma.sh,config.inc.php,phpMyAdmin-4.4.15-all-languages.tar.gz} /etc/ansible/roles/nginx/files/

注意:这里的环境是已经把前面描述中需要的文件放到 /ansible/ 目录下,后面的步骤也是一样就直接从/ansible/ 进行复制了

准备php所需要的文件

cp /ansible/{index.php,www.conf,node02-pma.sh,config.inc.php,phpMyAdmin-4.4.15-all-languages.tar.gz} /etc/ansible/roles/php/files/

准备mysql所需要的文件

cp /ansible/server.cnf /etc/ansible/roles/mysql/files/

编写nginx任务列表

/etc/ansible/roles/nginx/tasks/main.yaml 是用于定义nginx的任务列表,也就是分割开来后nginx要执行的task

vim /etc/ansible/roles/nginx/tasks/main.yaml

- name: install epel
  yum: name=epel-release state=latest
- name: install nginx
  yum: name=nginx state=latest

- name: mkdir nginx root dir
  shell: mkdir -pv /data/nginx/html
- name: copy nginx homepage
  copy: src=phpMyAdmin-4.4.15-all-languages.tar.gz dest=/data/nginx/html/
- name: copy phpmyadmin config file
  copy: src=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=node01-pma.sh dest=/data/nginx/html/
- name: bash pma.sh
  shell: bash /data/nginx/html/node01-pma.sh
- name: copy config inc php
  copy: src=config.inc.php dest=/data/nginx/html/pma/
- name: copy nginx config jjf.conf
  copy: src=jjf.conf dest=/etc/nginx/conf.d
- name: start nginx service
  service: name=nginx state=restarted

编写php任务列表

同样也是分割开来后php要执行的task

vim /etc/ansible/roles/php/tasks/main.yaml

- name: install epel
  yum: name=epel-release state=latest
- name: install php
  yum: name={{ item }} state=latest
  with_items:
  - php-fpm
  - php-mysql
  - php-mbstring
  - php-mcrypt
- 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=www.conf dest=/etc/php-fpm.d/
- name: start php-fpm
  service: name=php-fpm state=restarted
- name: copy phpmyadmin config
  copy: src=phpMyAdmin-4.4.15-all-languages.tar.gz dest=/appadata/
- name: tar zxvf phpMyAdmin-4.4.15-all-languages.tar.gz
  shell: tar zxvf /appdata/phpMyAdmin-4.4.15-all-languages.tar.gz -C /appadta/
- name: copy pma.sh
  copy: src=node02-pma.sh dest=/appdata
- name: bash pma.sh 
  shell: bash /appdata/node02-pma.sh
- name: copy config.inc.php 
  copy: src=config.inc.php dest=/appdata/pma/
- name: copy config index.php 
  copy: src=index.php dest=/appdata/   
  tags: copyindexphp

 

编写mysql任务列表

- name: install mysql
  yum: name=mariadb-server state=latest
- name: copy mariadb config
  copy: src=server.cnf dest=/etc/my.cnf.d/
- name: start mysql
  service: name=mariadb state=restarted
 


4、编写playbook

提供一个入口文件lnmp_role.yaml


vim lnmp_role.yaml

- hosts: node01
  remote_user: root
  roles:
  - nginx
- hosts: node02
  remote_user: root
  roles:
  - php
  - mysql

playbook就变得非常简单,只需要指明那些host调用那些role即可,代码重用的思想也可以在这里体现

5、运行playbook

语法检查

ansible-playbook --syntax-check  lnmp.yaml


dryrun测试一下

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 · 访问量 65

猜你喜欢

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