ansible-playbook+roles自動化部署lamp環境
roles(⻆⾊)
就是通過分別將variables, tasks及handlers等放置於單獨的⽬錄中,並可以便捷地調⽤它們的⼀種機制。假設我們要寫⼀個playbook來安裝管理lamp環境,那麼這個playbook就會寫很⻓。所以我們希望把這個很⼤的⽂件分成多個功能拆分, 分成apache管理,php管理,mysql管理,然後在需要使⽤的時候直接調⽤就可以了,以免重複寫。就類似程式設計⾥的模組化的概念,以達到程式碼復⽤的效果。如果以後要部署lnmp,那麼我們只需要再寫個nginx就好了。
roles目錄結構介紹
files:⽤來存放由copy模組或script模組調⽤的⽂件。
tasks:⾄少有⼀個main.yml⽂件,定義各tasks。
handlers:有⼀個main.yml⽂件,定義各handlers。
templates:⽤來存放jinjia2模板。
vars:有⼀個main.yml⽂件,定義變數。
meta:有⼀個main.yml⽂件,定義此⻆⾊的特殊設定及其依賴關係。
roles+playbook搭建lamp
#環境
centos7系統
#建立roles目錄結構
[root@manage01 ansible]# cd /etc/ansible/
[root@manage01 ansible]# mkdir -p roles/{httpd,mysql,php}/{files,tasks,handlers,templates,vars,meta}
[root@manage01 ansible]# touch roles/{httpd,mysql,php}/{tasks,handlers,vars,meta}/main.yml
#準備好需要替換的http配置檔案和php主頁檔案
#httpd.conf修改apache使用者為lampuser phpinfo.php為新建立<?php phpinfo();?>
[root@manage01 /]# scp -r [email protected]:/root/httpd.conf phpinfo.php /etc/ansible/roles/httpd/files/
#配置http角色
1、配置http變數
[root@ansible]# cat /etc/ansible/roles/httpd/vars/main.yml
user: lampuser
2、配置呼叫模組(常用於重啟服務,可被notify呼叫,類似java的方法)
[root@ansible]# cat /etc/ansible/roles/httpd/handlers/main.yml
- name: restart apache
service: name=httpd state=restarted
3、配置httpd主模組方法
[root@ansible]# cat /etc/ansible/roles/httpd/tasks/main.yml
- name: httpd軟體包安裝
yum: name={{item}} state=latest
with_items:
- httpd
- httpd-devel
- httpd-manual
- name: 建立apache管理賬戶lampuser
user: name={{user}} state=present
- name: 設定apache開機啟動,並啟動服務
service: name=httpd enabled=yes state=started
- name: 替換配置檔案,初始化業務
copy: src=/etc/ansible/roles/httpd/files/httpd.conf dest=/etc/httpd/conf/httpd.conf
#定義通知呼叫,當配置檔案更新,需要重啟服務
notify:
- restart apache
- name: 拷貝php測試頁
copy: src=/etc/ansible/roles/httpd/files/phpinfo.php dest=/var/www/html/
#配置mysql角色
1、配置http變數
[root@ansible]# cat /etc/ansible/roles/mysql/vars/main.yml
user: mysql
2、配置mysql主模組方法
[root@ansible]# cat /etc/ansible/roles/mysql/tasks/main.yml
- name: mysql使用者建立
user: name={{user}} state=present
- name: mysql 軟體安裝
yum: name={{item}} state=latest
with_items:
- mariadb
- mariadb-server
- name: 啟動服務,並設定開機啟動
service: name=mariadb enabled=yes state=started
- name: 改變mysql檔案的所有者為mysql
file: path='/var/lib/mysql' owner={{user}} group={{user}} recurse=yes
#配置php角色
1、準備php-fpm配置檔案(如有修改)
[root@manage01 files]# ls /etc/ansible/roles/php/files
www.conf
2、配置呼叫模組
[root@manage01 handlers]# cat /etc/ansible/roles/php/handlers/main.yml
- name: restart php-fpm
service: name=php-fpm state=restarted
3、配置php主模組方法
[root@manage01 php]# cat /etc/ansible/roles/php/tasks/main.yml
- name: 安裝php
yum: name={{item}} state=latest
with_items:
- php
- php-mysql
- php-gd
- php-ldap
- php-odbc
- php-pear
- php-xml
- php-xmlrpc
- php-mbstring
- php-snmp
- php-soap
- curl
- curl-devel
- php-bcmath
- php-fpm
- name: copy www.conf to /etc/php-fpm.d
copy: src=/etc/ansible/roles/php/files/www.conf dest=/etc/php-fpm.d force=yes
notify:
- restart php-fpm
#配置playbook呼叫roles
[root@manage01 web]# cat /etc/ansible/lamp.yaml
---
- hosts: web
remote_user: root
roles:
- httpd
- mysql
- php
#執行
[root@manage01 yaml]# ansible-playbook -C lamp.yml
[root@manage01 yaml]# ansible-playbook lamp.yml
FAQ:
1、空格格式問題一定要注意,規範很嚴格
ERROR! A malformed block was encountered while loading a block
2、部署完成後訪問192.168.192.130/phpinfo.php沒有出現頁面,出現了檔案內容
原因為php-fpm配置檔案/etc/php-fpm.d/www.conf所屬使用者和使用者組配置成apache了,應該是mysql的使用者,修改後重啟服務。
[root@node03 php-fpm.d]# systemctl restart httpd
[root@node03 php-fpm.d]# systemctl restart mysql
[root@node03 php-fpm.d]# systemctl restart mariadb