playbook安裝nginx

1.31 playbook安裝nginx

一、下發文件目錄準備

思路:先在一臺機器上編譯安裝好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下爲定義的變量mysql

[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

二、安裝文件準備

須要事先準備好安裝用到的文件,具體以下:
在一臺機器上事先編譯安裝好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

三、定義變量並拷貝文檔

定義變量
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

四、創建用戶等

接下來會創建用戶,啓動服務,刪除壓縮包
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

五、建立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

執行結果:nginx

[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查看:sql

[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

總結:

1、先準備下發目錄和下發文件:

##目錄:
[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    ##拷貝配置文件

2、編寫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

3、執行便可

[root@Dasoncheng local]# ansible-playbook /etc/ansible/nginx_install/install.yml
相關文章
相關標籤/搜索