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