saltstack 之源碼部署管理nginx

來源:互聯網
上載者:User

saltstack 之源碼部署管理nginx

saltstack接觸也有一段時間了,感覺saltstack強大之處在於state檔案部署,通過他可以給我們大批量部署節省很多時間,今天就用部署我前端的轉寄伺服器為例進行源碼部署nginx;水平有限希望大家多多指導。

思路:

1、用grains收集cpu、開啟檔案數等資訊結合jinja配置nginx.conf檔案

2、使用pillar儲存我們要使用的變數結合jinja配置vhost.conf檔案

3、state安裝推送檔案

部署步驟:

1、編寫grains,根據系統開啟檔案數配置合理的nginx開啟檔案數量:

[root@mailnginx]#cd/srv/salt/_grains/[root@mail_grains]#catnginx_config.pyimportos,sys,commandsdefNginxGrains():grains={}max_open_file=65536#Worker_info={'cpus2':'0110','cpus4':'1000010000100001','cpus8':'1000000001000000001000000001000000001000000001000000001000000001'}try:getulimit=commands.getstatusoutput('source/etc/profile;ulimit-n')exceptException,e:passifgetulimit[0]==0:max_open_file=int(getulimit[1])grains['max_open_file']=max_open_filereturngrainsif__name__=='__main__':printNginxGrains()推送檔案到用戶端並開機檔案重啟用戶端生效:salt'*'saltutil.sync_allsalt'*'sys.reload_modules

2、編寫變數之pillar,這裡我定義了網域名稱和後端轉寄主機:

[root@mailpillar]#cattop.slsbase:'*':-vhost[root@mailpillar]#catvhost.slshostname:www.huasuan.compass:192.168.10.100

3、編寫state所有檔案,先查看目錄選項:

[root@mailsalt]#treenginxnginx├──conf.sls├──files│??├──nginx│??├──nginx-1.6.0.tar.gz│??├──nginx.conf│??└──huasuan.conf├──init.sls├──install.sls├──server.sls└──vhost.sls注釋:init.sls指定啟用哪個入口選項,install.sls指定安裝步驟,server.sls表示管理服務指令碼,conf.sls指定管理設定檔nginx.conf,vhost.sls指定管理vhost.sls目錄下的虛擬機器主機。

4、查看top檔案和init檔案:

[root@mailnginx]#catinstall.sls[root@mailsalt]#cattop.slsbase:'*':-nginx[root@mailsalt]#catnginx/init.slsinclude:-nginx.install-nginx.conf-nginx.server-nginx.vhost

5、安裝install,sls檔案:

#nginx.tar.gznginx_source:file.managed:-name:/tmp/nginx-1.6.0.tar.gz-unless:test-e/tmp/nginx-1.6.0.tar.gz-source:salt://nginx/files/nginx-1.6.0.tar.gz#extractextract_nginx:cmd.run:-cwd:/tmp-names:-tarzxvfnginx-1.6.0.tar.gz-unless:test-d/tmp/nginx-1.6.0-require:-file:nginx_source#usernginx_user:user.present:-name:nginx-uid:1501-createhome:False-gid_from_name:True-shell:/sbin/nologin#nginx_pkgsnginx_pkg:pkg.installed:-pkgs:-gcc-openssl-devel-pcre-devel-zlib-devel#nginx_compilenginx_compile:cmd.run:-cwd:/tmp/nginx-1.6.0-names:-./configure--prefix=/usr/local/nginx--user=nginx--group=nginx--with-http_ssl_module--with-http_gzip_static_module--http-client-body-temp-path=/usr/local/nginx/client/--http-proxy-temp-path=/usr/local/nginx/proxy/--http-fastcgi-temp-path=/usr/local/nginx/fcgi/--with-poll_module--with-file-aio--with-http_realip_module--with-http_addition_module--with-http_random_index_module--with-pcre--with-http_stub_status_module-make-makeinstall-require:-cmd:extract_nginx-pkg:nginx_pkg-unless:test-d/usr/local/nginx#cache_dircache_dir:cmd.run:-names:-mkdir-p/usr/local/nginx/{client,proxy,fcgi}&&chown-Rnginx.nginx/usr/local/nginx/-mkdir-p/usr/local/nginx/conf/vhost&&chown-Rnginx.nginx/usr/local/nginx/conf/vhost-unless:test-d/usr/local/nginx/client/-require:-cmd:nginx_compile注釋:nginx使用源碼編譯安裝的方式,包括了檔案包推送,解壓、安裝管理,主要核心是cmd的使用

6、管理設定檔conf.sls:

[root@mailnginx]#catconf.slsinclude:-nginx.installnginx_service:file.managed:-name:/usr/local/nginx/conf/nginx.conf-user:nginx-mode:644-source:salt://nginx/files/nginx.conf-template:jinjaservice.running:-name:nginx-enable:True-reload:True-watch:-file:/usr/local/nginx/conf/nginx.conf

7、服務指令碼開機檔案管理server.sls:

[root@mailnginx]#catserver.slsinclude:-nginx.installserver:file.managed:-name:/etc/init.d/nginx-user:root-mode:755-source:salt://nginx/files/nginxservice.running:-name:nginx-enable:True-reload:True-watch:-file:/etc/init.d/nginxcommand:cmd.run:-names:-/sbin/chkconfig--addnginx-/sbin/chkconfignginxon-unless:/sbin/chkconfig--listnginx

8、虛擬機器主機管理設定檔:vhost.sls

[root@mailnginx]#catvhost.slsinclude:-nginx.installvhostconfig:file.managed:-name:/usr/local/nginx/conf/vhost/huasuan.conf-user:root-mode:644-source:salt://nginx/files/huasuan.conf-template:jinjaservice.running:-name:nginx-enable:True-reload:True-watch:-file:/usr/local/nginx/conf/vhost/huasuan.conf

上面幾個分別是把已經儲存在files目錄下的設定檔推送到用戶端,都是使用jinja模板為了使用系統的grains和pillar變數:

9、分別查看以下幾個設定檔nginx.conf:

#Formoreinformationonconfiguration,see:usernginx;worker_processes{{grains['num_cpus']}};{%ifgrains['num_cpus']==2%}worker_cpu_affinity0110;{%elifgrains['num_cpus']==4%}worker_cpu_affinity1000010000100001;{%elifgrains['num_cpus']>=8%}worker_cpu_affinity0000000100000010000001000000100000010000001000000100000010000000;{%else%}worker_cpu_affinity1000010000100001;{%endif%}worker_rlimit_nofile{{grains['max_open_file']}};error_log/var/log/nginx/error.log;#error_log/var/log/nginx/error.lognotice;#error_log/var/log/nginx/error.loginfo;pid/var/run/nginx.pid;events{worker_connections{{grains['max_open_file']}};}http{includemime.types;default_typeapplication/octet-stream;charsetutf-8;server_names_hash_bucket_size128;client_header_buffer_size32k;large_client_header_buffers432k;client_max_body_size128m;sendfileon;tcp_nopushon;keepalive_timeout60;tcp_nodelayon;server_tokensoff;client_body_buffer_size512k;gzipon;gzip_min_length1k;gzip_buffers416k;gzip_http_version1.1;gzip_comp_level2;gzip_typestext/plainapplication/x-javascripttext/cssapplication/xml;gzip_varyon;log_formatmain'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"''"$http_user_agent""$http_x_forwarded_for""$host"';includevhost/*.conf;}注釋:grains['max_open_file']這個變數由我們第一個建立的自訂grains收集到服務端,基於jinja來返回用戶端

10、虛擬機器主機設定檔vhost:

[root@mailfiles]#cathuasuan.confserver{listen80;server_name{{pillar['hostname']}};location/{proxy_passhttp://{{pillar['pass']}};proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;}location~/\.git{denyall;}}注釋:pillar['hostname']和pillar['pass']由上面我們定義的pillar基於jinja獲得,這裡用反向 Proxy伺服器為例

10、服務啟動指令碼,沒什麼特別;就是放上去伺服器端同步處理到用戶端啟動目錄下:

[root@mailfiles]#catnginx#!/bin/sh##nginx-thisscriptstartsandstopsthenginxdaemon##chkconfig:-8515#description:NginxisanHTTP(S)server,HTTP(S)reverse\#proxyandIMAP/POP3proxyserver#processname:nginx#config:/usr/local/nginx/conf/nginx.conf#pidfile:/usr/local/nginx/logs/nginx.pid#Sourcefunctionlibrary../etc/rc.d/init.d/functions#Sourcenetworkingconfiguration../etc/sysconfig/network#Checkthatnetworkingisup.["$NETWORKING"="no"]&&exit0nginx="/usr/local/nginx/sbin/nginx"prog=$(basename$nginx)NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"lockfile=/var/lock/subsys/nginxmake_dirs(){#makerequireddirectoriesuser=`$nginx-V2>&1|grep"configurearguments:"|sed's/[^*]*--user=\([^]*\).*/\1/g'-`if[-z"`grep$user/etc/passwd`"];thenuseradd-M-s/bin/nologin$userfioptions=`$nginx-V2>&1|grep'configurearguments:'`foroptin$options;doif[`echo$opt|grep'.*-temp-path'`];thenvalue=`echo$opt|cut-d"="-f2`if[!-d"$value"];then#echo"creating"$valuemkdir-p$value&&chown-R$user$valuefifidone}start(){[-x$nginx]||exit5[-f$NGINX_CONF_FILE]||exit6make_dirsecho-n$"Starting$prog:"daemon$nginx-c$NGINX_CONF_FILEretval=$?echo[$retval-eq0]&&touch$lockfilereturn$retval}stop(){echo-n$"Stopping$prog:"killproc$prog-QUITretval=$?echo[$retval-eq0]&&rm-f$lockfilereturn$retval}restart(){configtest||return$?stopsleep1start}reload(){configtest||return$?echo-n$"Reloading$prog:"killproc$nginx-HUPRETVAL=$?echo}force_reload(){restart}configtest(){$nginx-t-c$NGINX_CONF_FILE}rh_status(){status$prog}rh_status_q(){rh_status>/dev/null2>&1}case"$1"instart)rh_status_q&&exit0$1;;stop)rh_status_q||exit0$1;;restart|configtest)$1;;reload)rh_status_q||exit7$1;;force-reload)force_reload;;status)rh_status;;condrestart|try-restart)rh_status_q||exit0;;*)echo$"Usage:$0{start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"exit2esac

11、配置完成:啟動伺服器開始安裝操作:

啟動操作:[root@mailsalt]#salt'monitor'state.highstate

12、查看結果:

查看用戶端檔案設定檔看到已經生效,我用戶端是4核所以給的worker_processer是4:

並且已經啟動了nginx服務:

 

到此全部的安裝部署流程已經走完,用saltstack我們發現有再多的機器很快也能按照我們需求對系統來快速部署。

本文出自 “小羅” 部落格,請務必保留此出處http://xiaoluoge.blog.51cto.com/9141967/1722289

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.