微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ansible--项目实战

Ansible项目实战lnmp

项目规划

通过ansible roles配置lnmp环境,Nginx通过源码编译安装,PHP通过源码编译安装,MysqL通过yum安装(MysqL源码编译超级慢)支持系统(centos6.xcentos7.x系列)

说明: NginxPHP源码包放到对应的角色文件下的files目录下,通过vars/main.yml控制安装的版本和路径。如下:

[root@ansible roles]# cat Nginx/vars/main.yml 
DOWNLOAD_DIR: "/usr/local/src/"  #软件包拷贝到目标主机的存放路径
INSTALL_DIR: "/usr/local/"       #安装路径
Nginx_VERSION: "1.12.2"          #软件包版本
USER: "Nginx"                    #运行的用户
GROUP: "Nginx"                   #运行的组

环境配置参考

角色编写

这里角色都统一放在了/etc/ansible/roles

安装编译时所需要用到的依赖包

[root@ansible ~]# cd /etc/ansible/roles/
[root@ansible roles]# cat init_pkg.yml 
#安装源码编译PHPNginx时所需要用到的依赖包
---
- hosts: all 
  remote_user: root

  tasks:
    - name: Install Package
      yum: name={{ item }} state=installed
      with_items:
        - gcc-c++
        - glibc
        - glibc-devel
        - glib2
        - glib2-devel
        - pcre
        - pcre-devel
        - zlib
        - zlib-devel
        - openssl
        - openssl-devel
        - libpng
        - libpng-devel
        - freetype
        - freetype-devel
        - libxml2
        - libxml2-devel
        - bzip2
        - bzip2-devel
        - ncurses
        - curl
        - gdbm-devel
        - libXpm-devel
        - libX11-devel
        - gd-devel
        - gmp-devel
        - readline-devel
        - libxslt-devel
        - expat-devel
        - xmlrpc-c
        - libcurl-devel

Nginx roles

1)创建相应文件

[root@ansible roles]# mkdir -p Nginx/{files,handlers,tasks,templates,vars}

2)最终编写效果

[root@ansible roles]# tree Nginx
Nginx
├── files
│   ├── Nginx-1.12.2.tar.gz
│   └── Nginx-1.16.0.tar.gz
├── handlers
│   └── main.yml
├── tasks
│   ├── config.yml
│   ├── copypkg.yml
│   ├── group.yml
│   ├── install.yml
│   ├── main.yml
│   ├── service.yml
│   └── user.yml
├── templates
│   ├── Nginx.conf.j2
│   ├── Nginx_init.j2
│   └── Nginx.service.j2
└── vars
    └── main.yml

5 directories, 14 files

PHP roles

1)创建相应文件

[root@ansible roles]# mkdir -p PHP/{files,handlers,tasks,templates,vars}

2)最终编写效果

[root@ansible roles]# tree PHP
PHP
├── files
│   └── PHP-5.6.40.tar.gz
├── handlers
│   └── main.yml
├── tasks
│   ├── config.yml
│   ├── copypkg.yml
│   ├── group.yml
│   ├── install.yml
│   ├── main.yml
│   ├── service.yml
│   └── user.yml
├── templates
│   ├── PHP-fpm.conf.j2
│   ├── PHP-fpm.init.j2
│   ├── PHP-fpm.service.j2
│   └── PHP.ini.j2
└── vars
    └── main.yml

5 directories, 14 files

MysqL roles

1)创建相应文件

[root@ansible roles]# mkdir -p MysqL/{files,handlers,tasks,templates,vars}

2)最终编写效果

[root@ansible roles]# tree MysqL
MysqL
├── files
├── handlers
│   └── main.yml
├── tasks
│   ├── config.yml
│   ├── install.yml
│   ├── main.yml
│   └── service.yml
├── templates
│   ├── my.cnf6.j2
│   └── my.cnf7.j2
└── vars

5 directories, 7 files

角色执行playbook文件编写

[root@ansible roles]# cat Nginx_roles.yml 
#源码编译安装Nginx
---
- hosts: all
  remote_user: root
  roles:
    - role: Nginx


[root@ansible roles]# cat PHP_roles.yml 
#源码编译安装Nginx
---
- hosts: all
  remote_user: root
  roles:
    - role: PHP


[root@ansible roles]# cat MysqL_roles.yml 
#yum安装MysqL
---
- hosts: all
  remote_user: root
  roles:
    - role: MysqL 


[root@ansible roles]# cat lnmp.yml 
#配置lnmp,创建虚拟主机
---
- hosts: all
  remote_user: root
  roles:
    - role: Nginx
    - role: PHP 
    - role: MysqL
  
  vars:
    PORT: 8081
    WEBDIR: "/opt/www"
    CONfigDIR: "/usr/local/Nginx/conf/conf.d"

  tasks:
    - name: create vhost dir
      file: name={{ WEBDIR }} state=directory owner=www group=www mode=755

    - name: create vhost conf
      template: src=vhost.conf.j2 dest={{ CONfigDIR }}/vhost.conf
      notify: Restart Nginx

    - name: create index.PHP
      shell: "echo '<?PHP PHPinfo(); ?>' > {{ WEBDIR }}/index.PHP"
    
  handlers:
    - name: Restart Nginx
      service: name=Nginx state=restarted


# hostslist文件准备,这样方便执行,可以在执行playbook时指定某台机器上运行
[root@ansible roles]# cat hostlist 
192.168.1.31
192.168.1.32
192.168.1.33
192.168.1.36


#所有文件查看
[root@ansible roles]# ll 
总用量 28
-rw-r--r--. 1 root root  53 6月   4 22:37 hostlist
-rw-r--r--. 1 root root 824 6月   5 10:53 init_pkg.yml
-rw-r--r--. 1 root root 646 6月   5 12:05 lnmp.yml
drwxr-xr-x. 7 root root  77 6月   5 10:44 MysqL
-rw-r--r--. 1 root root  81 6月   5 10:06 MysqL_roles.yml
drwxr-xr-x. 7 root root  77 6月   4 15:37 Nginx
-rw-r--r--. 1 root root  89 6月   4 17:10 Nginx_roles.yml
drwxr-xr-x. 7 root root  77 6月   4 17:18 PHP
-rw-r--r--. 1 root root  87 6月   4 17:37 PHP_roles.yml
-rw-r--r--. 1 root root 811 6月   5 11:53 vhost.conf.j2

所有文件查看

[root@ansible roles]# tree 
.
├── hostlist
├── init_pkg.yml
├── lnmp.yml
├── MysqL
│   ├── files
│   ├── handlers
│   │   └── main.yml
│   ├── tasks
│   │   ├── config.yml
│   │   ├── install.yml
│   │   ├── main.yml
│   │   └── service.yml
│   ├── templates
│   │   ├── my.cnf6.j2
│   │   └── my.cnf7.j2
│   └── vars
├── MysqL_roles.yml
├── Nginx
│   ├── files
│   │   ├── Nginx-1.12.2.tar.gz
│   │   └── Nginx-1.16.0.tar.gz
│   ├── handlers
│   │   └── main.yml
│   ├── tasks
│   │   ├── config.yml
│   │   ├── copypkg.yml
│   │   ├── group.yml
│   │   ├── install.yml
│   │   ├── main.yml
│   │   ├── service.yml
│   │   └── user.yml
│   ├── templates
│   │   ├── Nginx.conf.j2
│   │   ├── Nginx_init.j2
│   │   └── Nginx.service.j2
│   └── vars
│       └── main.yml
├── Nginx_roles.yml
├── PHP
│   ├── files
│   │   └── PHP-5.6.40.tar.gz
│   ├── handlers
│   │   └── main.yml
│   ├── tasks
│   │   ├── config.yml
│   │   ├── copypkg.yml
│   │   ├── group.yml
│   │   ├── install.yml
│   │   ├── main.yml
│   │   ├── service.yml
│   │   └── user.yml
│   ├── templates
│   │   ├── PHP-fpm.conf.j2
│   │   ├── PHP-fpm.init.j2
│   │   ├── PHP-fpm.service.j2
│   │   └── PHP.ini.j2
│   └── vars
│       └── main.yml
├── PHP_roles.yml
└── vhost.conf.j2

18 directories, 42 files

执行说明

1)单独某一台机器安装Nginx

[root@ansible roles]# ansible-playbook -i hostlist Nginx_roles.yml --limit 192.168.1.31

2)单独某一台机器安装PHP

[root@ansible roles]# ansible-playbook -i hostlist PHP_roles.yml --limit 192.168.1.31

3)单独某一台机器安装MysqL

[root@ansible roles]# ansible-playbook -i hostlist MysqL_roles.yml --limit 192.168.1.31

4)单独某一台机器部署lnmp

[root@ansible roles]# ansible-playbook -i hostlist lnmp.yml --limit 192.168.1.31

5)所有机器部署PHP

[root@ansible roles]# ansible-playbook PHP_roles.yml

6)所有机器部署Nginx

[root@ansible roles]# ansible-playbook Nginx_roles.yml

7)所有机器部署MysqL

[root@ansible roles]# ansible-playbook MysqL_roles.yml

8)所有机器部署lnmp

[root@ansible roles]# ansible-playbook lnmp.yml

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐