saltstack通过state安装nginx
创建nginx.sls文件
install_nginx是安装Nginx的配置,nginx_running负责进程管理,nginx_conf下发Nginx主配置的模板文件,vhost_conf下发Vhost的配置文件。
[root@29-server]# cat /srv/salt/nginx.sls
{% set confdir="/etc/nginx/" %}
{% if grains['num_cpus'] > 2 %}
install_nginx:
pkg.installed:
- name: nginx
nginx_running:
service.running:
- name: nginx
- enable: Ture
- require:
- pkg: install_nginx
- watch:
- file: nginx_conf
- file: vhost_conf
nginx_conf:
file.managed:
- name: {{confdir}}nginx.conf
- source: salt://nginx.j2
- user: root
- group: root
- template: jinja
- mode: 644
vhost_conf:
file.managed:
- name: {{confdir}}conf.d/nginx.conf
- source: salt://test_vhost.conf
- user: root
- group: root
- mode: 644
{%endif%}
nginx主配置文件内容
[root@29-server]# cat /srv/salt/nginx.j2
user root;
worker_processes {{ grains['num_cpus'] }};
{% if grains['num_cpus'] == 4 %}
worker_cpu_affinity 1000 0100 0010 0001;
{% elif grains['num_cpus'] == 8 %}
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
{% else %}
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
{% endif %}
#error_log logs/error.log;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
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;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
tcp_nodelay on;
send_timeout 60;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
server {
listen 80 default;
server_name _;
return 403;
}
server_tokens off;
upstream backend {
server 192.168.0.1:80 max_fails=3 fail_timeout=30s;
server 192.168.0.2:80 max_fails=3 fail_timeout=30s;
server 192.168.0.3:80 max_fails=3 fail_timeout=30s;
}
include /etc/nginx/conf.d/*.conf;
}
vhost配置文件内容
[root@29-server]# cat test_vhost.conf
server {
listen 80;
server_name www.test.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
执行状态模块命令
这是第二次执行显示的信息,第一次执行显示信息太多,就不放在这里了。
[root@29-server salt]# salt "minion-one" state.sls nginx
minion-one:
----------
ID: install_nginx
Function: pkg.installed
Name: nginx
Result: True
Comment: All specified packages are already installed
Started: 15:28:34.922277
Duration: 2494.279 ms
Changes:
----------
ID: nginx_conf
Function: file.managed
Name: /etc/nginx/nginx.conf
Result: True
Comment: File /etc/nginx/nginx.conf is in the correct state
Started: 15:28:37.423235
Duration: 40.325 ms
Changes:
----------
ID: vhost_conf
Function: file.managed
Name: /etc/nginx/conf.d/nginx.conf
Result: True
Comment: File /etc/nginx/conf.d/nginx.conf is in the correct state
Started: 15:28:37.463761
Duration: 9.871 ms
Changes:
----------
ID: nginx_running
Function: service.running
Name: nginx
Result: True
Comment: The service nginx is already running
Started: 15:28:37.473951
Duration: 84.594 ms
Changes:
Summary for minion-one
------------
Succeeded: 4
Failed: 0
------------
Total states run: 4
Total run time: 2.629 s