当前位置:   article > 正文

Ansible—通过role角色部署lnmp架构

Ansible—通过role角色部署lnmp架构

目录

一、部署nginx

2.部署MySQL

3.部署php

4.编写测试文件

二、Roles 模块

roles 内各目录含义解释


一、部署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用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令引入即可。
  2. 简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷的include它们的一种机制。roles一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。主要使用场景代码复用度较高的情况下。

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 文件,用于定义此角色的元数据信息及其依赖关系。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/894645
推荐阅读
  

闽ICP备14008679号