1. 程式人生 > 其它 >ansible-playbook+roles自動化部署lamp環境

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