Ansible playbook Role部署LNMP

  • 前言


基於 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的各種版本信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章