playbook安装nginx

1.31 playbook安装nginx

1、下发文件目录准备

 思路:先在一台机器上编译安装好nginx、打包,然后再用ansible去下发
 cd /etc/ansible   进入ansible配置文件目录
 mkdir  nginx_install   创建一个nginx_install的目录,方便管理
 cd nginx_install
 mkdir -p roles/{common,install}/{handlers,files,meta,tasks,templates,vars}

说明:roles目录下有两个角色,common为一些准备操作,install为安装nginx的操作。
每个角色下面又有几个目录,handlers下面是当发生改变时要执行的操作,通常用在配置文件发生改变,重启服务。
files为安装时用到的一些文件,
meta为说明信息,说明角色依赖等信息,
tasks里面是核心的配置文件,
templates通常存一些配置文件,启动脚本等模板文件,
vars下为定义的变量

[root@Dasoncheng ~]# cd /etc/ansible/
[root@Dasoncheng ansible]# mkdir nginx_install && cd nginx_install
[root@Dasoncheng nginx_install]# mkdir -p roles/{common,install}/{handlers,files,meta,tasks,templates,vars}
[root@Dasoncheng nginx_install]# ls
roles
[root@Dasoncheng nginx_install]# ls roles/
common  install
[root@Dasoncheng nginx_install]# ls roles/common/
files  handlers  meta  tasks  templates  vars
[root@Dasoncheng nginx_install]# ls roles/install/
files  handlers  meta  tasks  templates  vars

2、安装文件准备

需要事先准备好安装用到的文件,具体如下:
在一台机器上事先编译安装好nginx,配置好启动脚本,配置好配置文件
安装好后,我们需要把nginx目录打包,并放到/etc/ansible/nginx_install/roles/install/files/下面,名字为nginx.tar.gz
启动脚本、配置文件都要放到/etc/ansible/nginx_install/roles/install/templates下面
cd  /etc/ansible/nginx_install/roles
定义common的tasks,nginx是需要一些依赖包的
vim  ./common/tasks/main.yml //内容如下,这里用到了循环 但使用过程中会报错,我就在下面直接yum: name="zlib-devel,pcre-devel" state=installed 这样安装了;
- name: Install initializtion require software
  yum: name={{ item }} state=installed
  with_items:
    - zlib-devel
    - pcre-devel
[root@Dasoncheng ~]# cd /usr/local/
[root@Dasoncheng local]# tar -zcvf nginx.tar.gz --exclude "ngin.conf" --exclude "vhosts" nginx/
[root@Dasoncheng local]# cp nginx.tar.gz /etc/ansible/nginx_install/roles/install/files/nginx.tar.gz    ##拷贝安装目录
[root@Dasoncheng local]# cp /etc/init.d/nginx /etc/ansible/nginx_install/roles/install/templates/nginx  ##拷贝启动脚本
[root@Dasoncheng local]# cp nginx/conf/nginx.conf /etc/ansible/nginx_install/roles/install/templates/nginx.conf    ##拷贝配置文件
[root@Dasoncheng local]# vim /etc/ansible/nginx_install/roles/common/tasks/main.yml
[root@Dasoncheng local]# cat /etc/ansible/nginx_install/roles/common/tasks/main.yml 
---
- name: install initaliztion require software
  yum: name="zlib-devel,pcre-devel" state=installed

3、定义变量并拷贝文档

定义变量
vim /etc/ansible/nginx_install/roles/install/vars/main.yml //内容如下
nginx_user: www
nginx_port: 80
nginx_basedir: /usr/local/nginx
首先要把所有用到的文档拷贝到目标机器
vim   /etc/ansible/nginx_install/roles/install/tasks/copy.yml //内容如下
- name: Copy Nginx Software
  copy: src=nginx.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root
- name: Uncompression Nginx Software
  shell: tar zxf /tmp/nginx.tar.gz -C /usr/local/
- name: Copy Nginx Start Script
  template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755
- name: Copy Nginx Config
  template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644
[root@Dasoncheng roles]# vim install/vars/main.yml    ##定义变量
[root@Dasoncheng roles]# cat install/vars/main.yml
nginx_user: www
nginx_port: 80
nginx_basedir: /usr/local/nginx
[root@Dasoncheng roles]# vim install/tasks/copy.yml    ##拷贝文档
[root@Dasoncheng roles]# cat !$
cat install/tasks/copy.yml
- name: copy nginx software
  copy: src=nginx.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root
- name: uncopression nginx software
  shell: tar -zxf /tmp/nginx.tar.gz -C /usr/local/
- name: copy nginx start script
  template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755
- name: copy nginx config
  template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644

4、建立用户等

接下来会建立用户,启动服务,删除压缩包
vim   /etc/ansible/nginx_install/roles/install/tasks/install.yml //内容如下
- name: Create Nginx User
  user: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin
- name: Start Nginx Service
  shell: /etc/init.d/nginx start
- name: Add Boot Start Nginx Service
  shell: chkconfig --level 345 nginx on
- name: Delete Nginx compression files
  shell: rm -rf /tmp/nginx.tar.gz
[root@Dasoncheng roles]# vim install/tasks/install.yml
[root@Dasoncheng roles]# cat !$
cat install/tasks/install.yml
- name: create nginx user
  user: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin
- name: start nginx service
  shell: /etc/init.d/nginx start
- name: add boot start nginx service
  shell: chkconfig --level 345 nginx on
- name: delete nginx compression files
  shell: rm -f /tmp/nginx.tar.gz

5、创建mail.yml调用copy和install

再创建main.yml并且把copy和install调用
vim   /etc/ansible/nginx_install/roles/install/tasks/main.yml //内容如下
- include: copy.yml
- include: install.yml
到此两个roles:common和install就定义完成了,接下来要定义一个入口配置文件

vim  /etc/ansible/nginx_install/install.yml  //内容如下
---
- hosts: testhost
  remote_user: root
  gather_facts: True
  roles:
    - common
    - install
执行: ansible-playbook /etc/ansible/nginx_install/install.yml
[root@Dasoncheng roles]# vim install/tasks/main.yml
[root@Dasoncheng roles]# cat !$
cat install/tasks/main.yml
- include: copy.yml
- include: install.yml
[root@Dasoncheng roles]# cd ..
[root@Dasoncheng nginx_install]# pwd
/etc/ansible/nginx_install
[root@Dasoncheng nginx_install]# vim install.yml
[root@Dasoncheng nginx_install]# cat !$
cat install.yml
---
- hosts: rs
  remote_user: root
  gather_facts: true
  roles:
    - common
    - install

执行结果:

[root@Dasoncheng local]# ansible-playbook /etc/ansible/nginx_install/install.yml 

PLAY [rs] ********************************************************************************************

TASK [Gathering Facts] *******************************************************************************
ok: [cdn002]
ok: [cdn003]

TASK [common : install initaliztion require software] ************************************************
ok: [cdn002]
ok: [cdn003]

TASK [install : copy nginx software] *****************************************************************
changed: [cdn003]
changed: [cdn002]

TASK [install : uncopression nginx software] *********************************************************
 [WARNING]: Consider using the unarchive module rather than running tar.  If you need to use command
because unarchive is insufficient you can add warn=False to this command task or set
command_warnings=False in ansible.cfg to get rid of this message.

changed: [cdn003]
changed: [cdn002]

TASK [install : copy nginx start script] *************************************************************
ok: [cdn002]
ok: [cdn003]

TASK [install : copy nginx config] *******************************************************************
ok: [cdn002]
ok: [cdn003]

TASK [install : create nginx user] *******************************************************************
ok: [cdn002]
ok: [cdn003]

TASK [install : start nginx service] *****************************************************************
changed: [cdn002]
changed: [cdn003]

TASK [install : add boot start nginx service] ********************************************************
changed: [cdn002]
changed: [cdn003]

TASK [install : delete nginx compression files] ******************************************************
 [WARNING]: Consider using the file module with state=absent rather than running rm.  If you need to
use command because file is insufficient you can add warn=False to this command task or set
command_warnings=False in ansible.cfg to get rid of this message.

changed: [cdn002]
changed: [cdn003]

PLAY RECAP *******************************************************************************************
cdn002                     : ok=10   changed=5    unreachable=0    failed=0   
cdn003                     : ok=10   changed=5    unreachable=0    failed=0 

机器cdn002查看:

[root@Dason02 tmp]# ps aux |grep nginx
root      11526  0.0  0.0  20500   620 ?        Ss   17:55   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody    11527  0.0  0.3  22944  3208 ?        S    17:55   0:00 nginx: worker process
nobody    11528  0.0  0.3  22944  3208 ?        S    17:55   0:00 nginx: worker process
root      11654  0.0  0.1 112664   968 pts/1    S+   17:55   0:00 grep --color=auto nginx
[root@Dason02 tmp]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      11526/nginx: master 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      899/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1683/master         
tcp6       0      0 :::3306                 :::*                    LISTEN      1378/mysqld         
tcp6       0      0 :::22                   :::*                    LISTEN      899/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1683/master 

总结:

一、先准备下发目录和下发文件:

##目录:
[root@Dasoncheng ~]# cd /etc/ansible/
[root@Dasoncheng ansible]# mkdir nginx_install && cd nginx_install
[root@Dasoncheng nginx_install]# mkdir -p roles/{common,install}/{handlers,files,meta,tasks,templates,vars}
[root@Dasoncheng nginx_install]# ls
roles
[root@Dasoncheng nginx_install]# ls roles/
common  install
[root@Dasoncheng nginx_install]# ls roles/common/
files  handlers  meta  tasks  templates  vars
[root@Dasoncheng nginx_install]# ls roles/install/
files  handlers  meta  tasks  templates  vars
##文件:
[root@Dasoncheng ~]# cd /usr/local/
[root@Dasoncheng local]# tar -zcvf nginx.tar.gz --exclude "ngin.conf" --exclude "vhosts" nginx/
[root@Dasoncheng local]# cp nginx.tar.gz /etc/ansible/nginx_install/roles/install/files/nginx.tar.gz    ##拷贝安装目录
[root@Dasoncheng local]# cp /etc/init.d/nginx /etc/ansible/nginx_install/roles/install/templates/nginx  ##拷贝启动脚本
[root@Dasoncheng local]# cp nginx/conf/nginx.conf /etc/ansible/nginx_install/roles/install/templates/nginx.conf    ##拷贝配置文件

二、编写yml脚本

[root@Dasoncheng ~]# cd /etc/ansible/nginx_install/
[root@Dasoncheng nginx_install]# cat install.yml 
---
- hosts: rs
  remote_user: root
  gather_facts: true
  roles:
    - common
    - install
[root@Dasoncheng nginx_install]# ls roles/common/tasks/main.yml 
roles/common/tasks/main.yml
[root@Dasoncheng nginx_install]# cat !$
cat roles/common/tasks/main.yml
---
- name: install initaliztion require software
  yum: name="zlib-devel,pcre-devel" state=installed
[root@Dasoncheng nginx_install]# ls roles/install/tasks/
copy.yml  install.yml  main.yml
[root@Dasoncheng nginx_install]# cat !$main.yml
cat roles/install/tasks/main.yml
- include: copy.yml
- include: install.yml
[root@Dasoncheng nginx_install]# cat roles/install/tasks/copy.yml 
- name: copy nginx software
  copy: src=nginx.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root
- name: uncopression nginx software
  shell: tar -zxf /tmp/nginx.tar.gz -C /usr/local/
- name: copy nginx start script
  template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755
- name: copy nginx config
  template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644
[root@Dasoncheng nginx_install]# cat roles/install/tasks/install.yml 
- name: create nginx user
  user: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin
- name: start nginx service
  shell: /etc/init.d/nginx start
- name: add boot start nginx service
  shell: chkconfig --level 345 nginx on
- name: delete nginx compression files
  shell: rm -f /tmp/nginx.tar.gz

三、执行即可

[root@Dasoncheng local]# ansible-playbook /etc/ansible/nginx_install/install.yml

猜你喜欢

转载自my.oschina.net/u/3651233/blog/1798991