当前位置:   article > 正文

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

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

目录

一.roles概述

1.roles角色

2.roles的目录层次

2.1.roles 内各目录含义解释

二.实操

1.部署nginx

2.部署MySQL

3.部署php

4.编写测试文件

三.总结


一.roles概述

1.roles角色

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

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

作用

实现在playbook中代码复用

2.roles的目录层次

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

  1. cd /opt
  2. mkdir nginx
  3. cd nginx/
  4. 上传nginx.repo、nginx.conf,并且修改nginx.conf为nginx.conf.j2
  5. vim nginx.conf.j2
  6. 37、38行
  7. listen {{nginx_addr}}:{{nginx_port}};
  8. server_name {{nginx_hostname}};
  9. 45行
  10. root {{root_dir}};
  11. 68行
  12. fastcgi_pass {{php_addr}}:{{php_port}};
  13. 70行
  14. fastcgi_param SCRIPT_FILENAME {{root_dir}}$fastcgi_script_name;

  1. vim lnmp-playbook.yaml
  2. - name: nginx play
  3. hosts: webservers
  4. remote_user: root
  5. gather_facts: false
  6. vars:
  7. - nginx_addr: 192.168.80.101
  8. - nginx_port: 80
  9. - nginx_hostname: www.xy101.com
  10. - root_dir: /var/www/html
  11. - php_addr: 192.168.80.102
  12. - php_port: 9000
  13. tasks:
  14. - name: disable firewalld
  15. service: name=firewalld state=stopped enabled=no
  16. - name: disable selinux
  17. command: 'setenfoce 0'
  18. ignore_errors: true
  19. - name: copy nginx repo
  20. copy: src=/opt/nginx/nginx.repo dest=/etc/yum.repos.d/
  21. - name: install nginx
  22. yum: name=nginx state=latest
  23. - name: create root dir
  24. file: path={{root_dir}} state=directory
  25. - name: copy nginx config template file
  26. template: src=/opt/nginx/nginx.conf.j2 dest=/etc/nginx/nginx.conf
  27. notify: 'reload nginx'
  28. - name: create nfs config
  29. copy: content="{{root_dir}} 192.168.80.0/24(rw,sync,no_root_squash)" dest=/etc/exports
  30. - name: restart rpcbind,nfs,nginx
  31. service: name={{item}} state=restarted enabled=yes
  32. with_items:
  33. - rpcbind
  34. - nfs
  35. - nginx
  36. handlers:
  37. - name: reload nginx
  38. service: name=nginx state=reloaded
  39. ansible-playbook lnmp-playbook.yaml

2.部署MySQL

  1. - name: mysql play
  2. hosts: dbservers
  3. remote_user: root
  4. gather_facts: false
  5. tasks:
  6. - name: disable mysql_server firewalld
  7. service: name=firewalld state=stopped enabled=no
  8. - name: disable mysql_server selinux
  9. command: 'setenforce 0'
  10. ignore_errors: true
  11. - name: remove mariadb
  12. yum: name=mariadb* state=absent
  13. - name: copy mysql repo
  14. copy: src=/opt/mysql/mysql-community.repo dest=/etc/yum.repos.d/
  15. - name: modify mysql repo
  16. replace: path=/etc/yum.repos.d/mysql-community.repo regexp="gpgcheck=1" replace="gpgcheck=0"
  17. - name: install mysql
  18. yum: name=mysql-server state=present
  19. - name: start mysql
  20. service: name=mysqld state=started enabled=yes
  21. - name: init mysql
  22. script: '/opt/mysql/mysql-init.sh'

3.部署php

  1. - name: php play
  2. hosts: phpservers
  3. remote_user: root
  4. gather_facts: false
  5. vars:
  6. - php_username: nginx
  7. - php_addr: 192.168.80.102:9000
  8. - nginx_addr: 192.168.80.101
  9. - root_dir: /var/www/html
  10. tasks:
  11. - name: disable php_server firewalld
  12. service: name=firewalld state=stopped enabled=no
  13. - name: disable php_server selinux
  14. command: 'setenforce 0'
  15. - name: unarchive php tar pkg
  16. unarchive: copy=yes src=/opt/php/php.tar.gz dest=/mnt/
  17. - name: copy local repo
  18. copy: src=/opt/php/local.repo dest=/etc/yum.repos.d/
  19. - name: create repo
  20. shell: 'createrepo /mnt && yum clean all && yum makecache'
  21. - name: install php
  22. 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
  23. - name: create php user
  24. user: name={{php_username}} shell=/sbin/nologin create_home=no
  25. - name: modify php.ini
  26. replace: path=/etc/php.ini regexp=";date.timezone =" replace="date.timezone = Asia/Shanghai"
  27. - name: modify user and group in www.conf
  28. replace: path=/etc/php-fpm.d/www.conf regexp="apache" replace="{{php_username}}"
  29. notify: "reload php-fpm"
  30. - name: modify listen in www.conf
  31. replace: path=/etc/php-fpm.d/www.conf regexp="127.0.0.1:9000" replace="{{php_addr}}"
  32. notify: "reload php-fpm"
  33. - name: modify listen.allowed_clients in www.conf
  34. replace: path=/etc/php-fpm.d/www.conf regexp="127.0.0.1" replace="{{nginx_addr}}"
  35. notify: "reload php-fpm"
  36. - name: start php-fpm
  37. service: name=php-fpm state=started enabled=yes
  38. - name: create www root dir
  39. file: path={{root_dir}} state=directory
  40. - name: mount nfs
  41. mount: src="{{nginx_addr}}:{{root_dir}}" path={{root_dir}} fstype=nfs state=mounted opts="defaults,_netdev"
  42. handlers:
  43. - name: reload php-fpm
  44. service: name=php-fpm state=reloaded

4.编写测试文件

  1. cd /var/www/html
  2. vim index.php
  3. <?php
  4. phpinfo();
  5. ?>

浏览器访问测试

三.总结

roles目录格式
 

  1. roles/ #角色总目录,其每个子目录就是一个角色目录
  2. nginx/ #角色目录,一个角色相当于playbook中的一个play主题,目录名就是角色名
  3. files/ #存放copy、script、unarchive等模块默认调用的文件
  4. templates/ #存放template模块默认调用的模板文件
  5. tasks/mian.yml #定义此角色的tasks任务列表
  6. handlers/mian.yml #定义此角色通过nofity触发执行的handlers任务列表
  7. vars/mian.yml #定义此角色使用的自定义变量
  8. defaults/mian.yml #定义此角色使用的默认变量(一般不用)
  9. meta/mian.yml #定义此角色的元数据信息和依赖关系
  10. mysql/
  11. ....
  12. php/
  13. ....
  14. vim XXX.yaml
  15. - name:
  16. hosts:
  17. remote_user:
  18. roles:
  19. - 角色名1
  20. - 角色名2
  21. ....
  22. ansible-playbook XXX.yaml
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号