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 root@192.168.192.129:/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

posted @ 2022-06-01 15:49  国家一级开机运动员  阅读(128)  评论(0编辑  收藏  举报