Ansible 利用playbook批量部署Nginx

我這裏直接部署的,環境已經搭建好,若是不知道的小夥伴能夠看上一遍ansible搭建,都寫好了,這裏是根據前面環境部署的html

192.168.30.21     ansiblenginx

192.168.30.25     client1c++

192.168.30.26     client2shell

 

  1. 建立目錄結構

[root@ansible ~]# mkdir -pv /etc/ansible/roles/nginx/{files,handlers,tasks,templates,vars}vim

mkdir: 已建立目錄 "/etc/ansible/roles/nginx"app

mkdir: 已建立目錄 "/etc/ansible/roles/nginx/files"tcp

mkdir: 已建立目錄 "/etc/ansible/roles/nginx/handlers"測試

mkdir: 已建立目錄 "/etc/ansible/roles/nginx/tasks"spa

mkdir: 已建立目錄 "/etc/ansible/roles/nginx/templates"調試

mkdir: 已建立目錄 "/etc/ansible/roles/nginx/vars"

 

2,Nginx的壓縮包放到 /etc/ansible/roles/nginx/files/文件下

[root@ansible files]# ls -l /etc/ansible/roles/nginx/files/nginx-1.16.0.tar.gz

-rw-r--r--. 1 root root 1032345 5月  16 16:57 /etc/ansible/roles/nginx/files/nginx-1.16.0.tar.gz

 

3.定義一個主調用文件

[root@ansible ansible]# vim /etc/ansible/nginx.yaml

- hosts: cloud

  gather_facts: True

  remote_user: root

  roles:

  - nginx

 

4.handlers:此目錄至少應該包含一個名爲main.yml文件,用來定義handers

其餘的文件須要由main.yml進行「包含」調用

[root@ansible files]# vim /etc/ansible/roles/nginx/handlers/main.yaml

- name: start nginx

  raw: /usr/local/nginx/sbin/nginx

 

5.tasks:目錄至少應該有一個名爲main.yml的文件,用來定義各task,其餘的須要main.yml進行「包含」調用(這裏我把配置文件中的用戶默認登陸爲nginx)

 

[root@ansible files]# vim /etc/ansible/roles/nginx/tasks/main.yaml

- name: yum install

  yum: name={{ item }} state=latest

  with_items:

    - openssl-devel

    - pcre-devel

    - zlib-devel

    - gcc

    - gcc-c++

    - make

 

- name: user nginx

  shell: useradd -M -s /sbin/nologin nginx

 

- name: package

  copy: src=nginx-1.16.0.tar.gz dest=/usr/src

 

- name: install nginx

  shell: cd /usr/src ;tar xf nginx-1.16.0.tar.gz -C /usr/src; cd /usr/src/nginx-1.16.0; ./configure --prefi

x=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stu

b_status_module --with-http_gzip_static_module --with-pcre && make && make install

- name: copy conf file

  template: src=nginx.conf dest=/usr/local/nginx/conf/nginx.conf

 

  notify:

    - start nginx

 

 

6.templates: 存儲由template 模塊調用的模塊文本,(這裏我添加一個基於識別CPU的模塊)會在客戶端配置文件中顯示)(建議修改或者添加本身的CPU數量

這樣咱們的自動化更智能)

[root@ansible files]# vim /etc/ansible/roles/nginx/templates/nginx.conf

user nginx;

worker_proccesses {{ ansible_processor_vcpus }};

{% if ansible_processor_vcpus == 1%}

worker_cpu_affinity 10;

{% elif ansible_processor_vcpus == 2%}

worker_cpu_affinity 01 10;

{% elif ansible_processor_vcpus == 4%}

worker_cpu_affinity 0001 0010 0100 1000;

{% elif ansible_processor_vcpus == 8%}

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 0

0100000 01000000 10000000;{% else %}

worker_cpu_affinity 0001 0010 0100 1000;

{% endif %}

 

error_log logs/error.log;

pid logs/nginx.pid;

 

events {

        use epoll;

        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;

 

 

    keepalive_timeout  65;

    gzip on;

 

    server {

        listen       {{ nginxport }};

        server_name  {{ server_name }};

 

 

        location / {

            root   html;

            index  index.html index.htm;

        }

 

        error_page   500 502 503 504 /50x.html;

        location = /50x.html {

                root html;

        }

        }

}

 

 

7.vars :此目錄至少應該有一個名爲main.yml的文件,用於定義各variable,其餘的文件

須要由main.yml 進行「包含」調用;

[root@ansible files]# vim /etc/ansible/roles/nginx/vars/main.yaml

nginxport: "80"

server_name: "www.ansible.com"

 

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

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

9測試部署

[root@ansible templates]# ansible-playbook  /etc/ansible/nginx.yaml

[root@client1 ~]# netstat -anpt |grep 80

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9483/nginx: master

[root@client2 ~]# netstat -anpt |grep 80

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9483/nginx: master

查完以後CPU會自動調試,執行完畢能夠去客戶端測試查看配置文件cpu和用戶

相關文章
相關標籤/搜索