我這裏直接部署的,環境已經搭建好,若是不知道的小夥伴能夠看上一遍ansible搭建,都寫好了,這裏是根據前面環境部署的html
192.168.30.21 ansiblenginx
192.168.30.25 client1c++
192.168.30.26 client2shell
- 建立目錄結構
[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和用戶