【Ansible】通过role角色部署lnmp架构

avatar
作者
猴君
阅读量:0

目录

一.roles概述

1.roles角色

2.roles的目录层次

2.1.roles 内各目录含义解释

二.实操

1.部署nginx

2.部署MySQL

3.部署php

4.编写测试文件

三.总结


一.roles概述

1.roles角色

可以把playbook剧本里的每个play看作为一个角色,将每个角色要用到的文件、变量、任务列表定

义到对应角色的目录中,需要时可以直接在playbook中调用角色

作用

实现在playbook中代码复用

2.roles的目录层次

cd /etc/ansible/ tree roles/ roles/ ├── web/    #相当于 playbook 中的 每一个 play 主题 │   ├── files/       #用来存放由 copy 模块或 script 模块调用的文件。 │   ├── templates/   #用来存放 jinjia2 模板,template 模块会自动在此目录中寻找 jinjia2 模板文件。 │   ├── tasks/       #此目录应当包含一个 main.yml 文件,用于定义此角色的任务列表,此文件可以使用 include 包含其它的位于此目录的 task 文件。 │   ├── handlers/    #此目录应当包含一个 main.yml 文件,用于定义此角色中触发条件时执行的动作。 │   ├── vars/        #此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。 │   ├── defaults/    #此目录应当包含一个 main.yml 文件,用于为当前角色设定默认变量。 这些变量具有所有可用变量中最低的优先级,并且可以很容易地被任何其他变量覆盖。所以生产中我们一般不在这里定义变量 │   └── meta/        #此目录应当包含一个 main.yml 文件,用于定义此角色的元数据信息及其依赖关系。  └── db/     ├── files/     ├── templates/     ├── tasks/     ├── handlers/     ├── vars/     ├── defaults/     └── meta/

2.1.roles 内各目录含义解释

  • files

用来存放由 copy 模块或 script 模块调用的文件。

  • templates

用来存放 jinjia2 模板,template 模块会自动在此目录中寻找 jinjia2 模板文件。

  • tasks

此目录应当包含一个 main.yml 文件,用于定义此角色的任务列表,此文件可以使用 include 包含

其它的位于此目录的 task 文件。

  • handlers

此目录应当包含一个 main.yml 文件,用于定义此角色中触发条件时执行的动作。

  • vars

此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。

  • defaults

此目录应当包含一个 main.yml 文件,用于为当前角色设定默认变量。 这些变量具有所有可用变量

中最低的优先级,并且可以很容易地被任何其他变量覆盖。所以生产中我们一般不在这里定义变量

  • meta

此目录应当包含一个 main.yml 文件,用于定义此角色的元数据信息及其依赖关系

二.实操

1.部署nginx

cd /opt mkdir nginx cd nginx/ 上传nginx.repo、nginx.conf,并且修改nginx.conf为nginx.conf.j2 vim nginx.conf.j2 37、38行 listen       {{nginx_addr}}:{{nginx_port}};          server_name  {{nginx_hostname}}; 45行 root   {{root_dir}}; 68行 fastcgi_pass   {{php_addr}}:{{php_port}}; 70行 fastcgi_param  SCRIPT_FILENAME  {{root_dir}}$fastcgi_script_name;

vim lnmp-playbook.yaml - name: nginx play   hosts: webservers   remote_user: root   gather_facts: false   vars:   - nginx_addr: 192.168.80.101   - nginx_port: 80   - nginx_hostname: www.xy101.com   - root_dir: /var/www/html   - php_addr: 192.168.80.102   - php_port: 9000   tasks:   - name: disable firewalld     service: name=firewalld state=stopped enabled=no   - name: disable selinux     command: 'setenfoce 0'     ignore_errors: true   - name: copy nginx repo     copy: src=/opt/nginx/nginx.repo dest=/etc/yum.repos.d/   - name: install nginx     yum: name=nginx state=latest   - name: create root dir     file: path={{root_dir}} state=directory   - name: copy nginx config template file     template: src=/opt/nginx/nginx.conf.j2 dest=/etc/nginx/nginx.conf     notify: 'reload nginx'   - name: create nfs config     copy: content="{{root_dir}} 192.168.80.0/24(rw,sync,no_root_squash)" dest=/etc/exports   - name: restart rpcbind,nfs,nginx     service: name={{item}} state=restarted enabled=yes     with_items:     - rpcbind     - nfs     - nginx     handlers:   - name: reload nginx     service: name=nginx state=reloaded   ansible-playbook lnmp-playbook.yaml

2.部署MySQL

- name: mysql play   hosts: dbservers   remote_user: root   gather_facts: false   tasks:   - name: disable mysql_server firewalld     service: name=firewalld  state=stopped  enabled=no   - name: disable mysql_server selinux     command: 'setenforce 0'     ignore_errors: true   - name: remove mariadb     yum: name=mariadb*  state=absent   - name: copy mysql repo     copy: src=/opt/mysql/mysql-community.repo  dest=/etc/yum.repos.d/   - name: modify mysql repo     replace: path=/etc/yum.repos.d/mysql-community.repo  regexp="gpgcheck=1"  replace="gpgcheck=0"   - name: install mysql     yum: name=mysql-server state=present   - name: start mysql     service: name=mysqld  state=started  enabled=yes   - name: init mysql     script: '/opt/mysql/mysql-init.sh'

3.部署php

- name: php play   hosts: phpservers   remote_user: root   gather_facts: false   vars:   - php_username: nginx   - php_addr: 192.168.80.102:9000   - nginx_addr: 192.168.80.101   - root_dir: /var/www/html   tasks:   - name: disable php_server firewalld     service: name=firewalld  state=stopped  enabled=no   - name: disable php_server selinux     command: 'setenforce 0'   - name: unarchive php tar pkg     unarchive: copy=yes  src=/opt/php/php.tar.gz  dest=/mnt/   - name: copy local repo     copy: src=/opt/php/local.repo  dest=/etc/yum.repos.d/   - name: create repo     shell: 'createrepo /mnt && yum clean all && yum makecache'   - name: install php     yum: name=php72w,php72w-cli,php72w-common,php72w-devel,php72w-embedded,php72w-gd,php72w-mbstring,php72w-pdo,php72w-xml,php72w-fpm,php72w-mysqlnd,php72w-opcache,php72w-ldap,php72w-bcmath  state=present   - name: create php user     user: name={{php_username}}  shell=/sbin/nologin  create_home=no   - name: modify php.ini     replace: path=/etc/php.ini  regexp=";date.timezone ="  replace="date.timezone = Asia/Shanghai"   - name: modify user and group in www.conf     replace: path=/etc/php-fpm.d/www.conf  regexp="apache"  replace="{{php_username}}"     notify: "reload php-fpm"   - name: modify listen in www.conf     replace: path=/etc/php-fpm.d/www.conf  regexp="127.0.0.1:9000"  replace="{{php_addr}}"     notify: "reload php-fpm"   - name: modify listen.allowed_clients in www.conf     replace: path=/etc/php-fpm.d/www.conf  regexp="127.0.0.1"  replace="{{nginx_addr}}"     notify: "reload php-fpm"   - name: start php-fpm     service: name=php-fpm  state=started  enabled=yes   - name: create www root dir     file: path={{root_dir}}  state=directory   - name: mount nfs     mount: src="{{nginx_addr}}:{{root_dir}}"  path={{root_dir}}  fstype=nfs  state=mounted  opts="defaults,_netdev"   handlers:   - name: reload php-fpm     service: name=php-fpm  state=reloaded

4.编写测试文件

cd /var/www/html vim index.php  <?php phpinfo(); ?>

浏览器访问测试

三.总结

roles目录格式
 

roles/                    #角色总目录,其每个子目录就是一个角色目录   nginx/                     #角色目录,一个角色相当于playbook中的一个play主题,目录名就是角色名     files/                       #存放copy、script、unarchive等模块默认调用的文件 	templates/                   #存放template模块默认调用的模板文件 	tasks/mian.yml               #定义此角色的tasks任务列表 	handlers/mian.yml            #定义此角色通过nofity触发执行的handlers任务列表 	vars/mian.yml                #定义此角色使用的自定义变量 	defaults/mian.yml            #定义此角色使用的默认变量(一般不用) 	meta/mian.yml                #定义此角色的元数据信息和依赖关系   mysql/     ....   php/     ....  vim XXX.yaml - name:   hosts:   remote_user:   roles:   - 角色名1   - 角色名2   ....  ansible-playbook XXX.yaml 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!