基於ansible的roles實現nginx源碼安裝部署

                             基於ansible的roles實現nginx源碼安裝部署php

     ansible是一款比較熱門的自動化部署工具。具備比較好兼用性,並且使用比較簡單,而今天咱們經過roles來實現咱們的自動化部署;先講講經過roles實現部署的好處吧,經過roles咱們便很好的管理咱們要部署的內容,並且經過roles來管理,使得咱們使用ansible變得更方便。html

   環境主機:node1 172.25.0.29 ansiblenode

             node2 172.25.0.30 測試主機nginx

先看一下role角色定義:web

    ---以特定的層級目錄結構進行組織的tasks、variables、handlers、templates、files(依賴的文件)等;shell

角色目錄的定義:bash

role_name/(以角色名命名的目錄)app

files/:框架

   存儲由copy或script等模塊調用的文件; ssh

tasks/:

此目錄中至少應該有一個名爲main.yml的文件,用於定義各task;其它的文件須要由main.yml進行「包含」調用;

handlers/:

此目錄中至少應該有一個名爲main.yml的文件,用於定義各handler;其它的文件須要由main.yml進行「包含」調用;

vars/:

此目錄中至少應該有一個名爲main.yml的文件,用於定義各variable;其它的文件須要由main.yml進行「包含」調用;

templates/:

存儲由template模塊調用的模板文本;

meta/:

此目錄中至少應該有一個名爲main.yml的文件,定義當前角色的特殊設定及其依賴關係;其它的文件須要由main.yml進行「包含」調用;

default/:

此目錄中至少應該有一個名爲main.yml的文件,用於設定默認變量;

接下來開始實現nginx快速安裝

主意小事項:

作ansible要先作ssh的公私鑰認證,我這裏作了就不在演示了。

一、建立roles的所須要的目錄

[root@node1 ansible]# mkdir -pv roles/nginx/{files,templates,vars,handlers,meta,default,tasks}
mkdir: created directory ‘roles/nginx’
mkdir: created directory ‘roles/nginx/files’
mkdir: created directory ‘roles/nginx/templates’
mkdir: created directory ‘roles/nginx/vars’
mkdir: created directory ‘roles/nginx/handlers’
mkdir: created directory ‘roles/nginx/meta’
mkdir: created directory ‘roles/nginx/default’
mkdir: created directory ‘roles/nginx/tasks’

二、定義角色路徑:

[root@node1 nginx]# cat   /etc/ansible/nginx.yaml 
- hosts: 172.25.0.30
  remote_user: root
  roles:
  - nginx           ###這個表示roles目錄下的nginx目錄

三、在tasks文件夾裏面定義咱們的task。

[root@node1 nginx]# cat  tasks/main.yml
- name: copy nginx package to remote host   
  copy: src=nginx-1.12.0.tar.gz   dest=/tmp/nginx-1.12.0.tar.gz     #### 這裏是調用files模塊
  tags: cppkg
- name: tar nginx
  shell: cd /tmp;tar -xf nginx-1.12.0.tar.gz
- name: install pakger
  yum: name={{ item }} state=latest
  with_items:
    - openssl-devel
    - pcre-devel
    - gcc
- name: install nginx
  shell: cd /tmp/nginx-1.12.0;useradd nginx;./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre;make && make install
- name: copy conf file nginx.conf                  ### 這裏調用的是templates模塊 
  template: src=nginx.conf dest=/usr/local/nginx/conf/nginx.conf
  tags: ngxconf
  notify: reload nginx service                    ###這裏調用的是handlers模塊

四、往file添加咱們的nginx壓縮包  

[root@node1 files]# wget http://nginx.org/download/nginx-1.12.0.tar.gz

五、template這一行也要添加對應的template這個目錄和主服務端定義的變量:

[root@node1 nginx]# cat  templates/nginx.conf      ###這裏文件用來自定義咱們所須要的,我這裏只做演示,就定了兩個參數。
user  nginx;
worker_processes  {{ ansible_processor_vcpus }};      #修改CPU進程數量
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  65535;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                 '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    server {
        listen       {{ ngxport }};
        server_name  www.xiaozhang.com;
        access_log  logs/www.xiaozhang.com ;
        #location / {
        #    proxy_pass http://172.25.0.29;
        #}
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            root           /web;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
   include vhosts/*.conf;
}

##這裏須要注意的就是模板變量(客戶端自動採集)、和在服務端定義的變量`ngx_port`

六、接下來在vars目錄下添加自定義變量

[root@node1 nginx]# cat  vars/main.yml
ngxport: "8080"

七、接下來再到handlers目錄下添加自定義觸發器模塊:

[root@node1 handlers]# cat main.yml
- name: reload nginx service
  shell: /usr/local/nginx/sbin/nginx

八、咱們查看一下目錄結構:

[root@node1 roles]# tree 
.
└── nginx
    ├── default
    ├── files
    │   └── nginx-1.12.0.tar.gz
    ├── handlers
    │   └── main.yml
    ├── meta
    ├── tasks
    │   └── main.yml
    ├── templates
    │   └── nginx.conf
    └── vars
        └── main.yml

九、開始部署,先檢查一下

[root@node1 ~]#  ansible-playbook  -C  /etc/ansible/nginx.yaml
PLAY [172.25.0.30] ******************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************
ok: [172.25.0.30]
TASK [nginx : copy nginx package to remote host] ************************************************************************************************************
changed: [172.25.0.30]
TASK [nginx : tar nginx] ************************************************************************************************************************************
skipping: [172.25.0.30]
TASK [nginx : install pakger] *******************************************************************************************************************************
ok: [172.25.0.30] => (item=[u'openssl-devel', u'pcre-devel', u'gcc'])
TASK [nginx : install nginx] ********************************************************************************************************************************
skipping: [172.25.0.30]
TASK [nginx : copy conf file nginx.conf] ********************************************************************************************************************
changed: [172.25.0.30]
RUNNING HANDLER [nginx : reload nginx service] **************************************************************************************************************
skipping: [172.25.0.30]
PLAY RECAP **************************************************************************************************************************************************
172.25.0.30                : ok=4    changed=2    unreachable=0    failed=0   
[root@node1 ~]#

##咱們發現檢測沒問題,開始部署:

[root@node1 ~]#  ansible-playbook    /etc/ansible/nginx.yaml
PLAY [172.25.0.30] ******************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************
ok: [172.25.0.30]
TASK [nginx : copy nginx package to remote host] ************************************************************************************************************
changed: [172.25.0.30]
TASK [nginx : tar nginx] ************************************************************************************************************************************
changed: [172.25.0.30]
TASK [nginx : install pakger] *******************************************************************************************************************************
ok: [172.25.0.30] => (item=[u'openssl-devel', u'pcre-devel', u'gcc'])
TASK [nginx : install nginx] ********************************************************************************************************************************
changed: [172.25.0.30]
TASK [nginx : copy conf file nginx.conf] ********************************************************************************************************************
changed: [172.25.0.30]
NOTIFIED: [nginx | reload nginx service] ******************************************************************************************************************** 
changed: [172.25.0.30]
PLAY RECAP **************************************************************************************************************************************************
172.25.0.30                : ok=6    changed=2    unreachable=0    failed=0

十、查看測試結果,在node2上:

[root@node2 conf]# cat  /usr/local/nginx/conf/nginx.conf
user  nginx;
worker_processes  2;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  65535;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                 '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    server {
        listen       8080;
        server_name  www.xiaozhang.com;
        access_log  logs/www.xiaozhang.com ;
        #location / {
        #    proxy_pass http://172.25.0.29;
 ###咱們能夠看到 worker_processes 和listen 這兩個參數已經獲取到。
[root@node2 conf]# netstat -ntpl
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:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      10896/nginx: master

咱們也發現咱們的服務也起來了。證實咱們的roles部署是成功的。


                                                                           總結


       該實驗是ansible的roles一個方面應用,主要是爲了可以快速實現一個服務的部署,固然啦,咱們利用這樣的方法還能夠部署更多的服務,咱們要認識到ansible提供給咱們的只是一個框架。因此咱們在應用時要懂得轉變,靈活運用。 

相關文章
相關標籤/搜索