Ansible--項目實戰

Ansible項目實戰lnmp

項目規劃

經過ansible roles配置lnmp環境,nginx經過源碼編譯安裝,php經過源碼編譯安裝,mysql經過yum安裝(mysql源碼編譯超級慢)支持系統(centos6.xcentos7.x系列)php

說明: nginxphp源碼包放到對應的角色文件下的files目錄下,經過vars/main.yml控制安裝的版本和路徑。以下:mysql

[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"                   #運行的組

環境配置參考nginx

角色編寫

這裏角色都統一放在了/etc/ansible/rolesc++

安裝編譯時所須要用到的依賴包git

[root@ansible ~]# cd /etc/ansible/roles/
[root@ansible roles]# cat init_pkg.yml 
#安裝源碼編譯php、nginx時所須要用到的依賴包
---
- 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)建立相應文件夾github

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

2)最終編寫效果sql

[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)建立相應文件夾shell

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

2)最終編寫效果centos

[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)建立相應文件夾curl

[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

 

 

如需源碼及軟件包聯繫我

相關文章
相關標籤/搜索