Puppet 安裝Nginx
搞puppet也有三幾天了,一些概念還不是很清晰。很多時候實驗未成功,都是概念沒有理清楚、文檔沒有看全。別的就先不說了,先來安裝一個nginx 來試一下吧。
1、編寫nginx模塊
接下來我們先採動創建模塊信息來完成Nginx的部署:需要創建模塊錄,虛擬主機採件
的式進管理。創建模塊的信息需要運如下知識點:
資源:yumrepo、package、file、service、cron。
模板:nginx.conf.erb。
創建模塊時建議創建README件,接下來對模塊的使與安裝進詳細說明。
2、創建模塊錄,代碼如下:
#mkdir -p /etc/puppet/modules/nginx/{manifests,templates,files,tests}
3、創建模塊主配置件,代碼如下:
#cat /etc/puppet/modules/nginx/manifests/init.pp # Class: nginx # #Install nginx. # #Parameters: # * $nginx_user. Defaults to 'nginx'. # * worker_processes. Defaults to <%= processorcount %>. # #Create config directories : # * /etc/nginx/conf.d for sites includes # #Templates: # - nginx.conf.erb => /etc/nginx/nginx.conf # class nginx { $real_nginx_user = $nginx_user ? { '' => 'nginx', default => $nginx_user } $nginx_conf = "/etc/nginx/conf.d" $nginx_logrote = "/etc/nginx/conf.d/nginx_logrote.sh" yumrepo { "nginx": descr => "nginx repo", baseurl => "http://nginx.org/packages/centos/\$releasever/\$basearch/", gpgcheck => "0", enabled => "1"; } package { "nginx": ensure => installed, require => Yumrepo["nginx"], allow_virtual => false; } service { 'nginx': ensure => running, enable => true, hasrestart => true, hasstatus => true, subscribe => File["nginx.conf"], } file { 'nginx.conf': ensure => present, mode => 644, owner => root, group => root, path => '/etc/nginx/nginx.conf', content => template("nginx/nginx.conf.erb"), notify => Exec["reload-nginx"], require => Package["nginx"], } file { "$nginx_conf": ensure => directory, recurse => true, force => true, #purge => true, source => "puppet:///modules/nginx/conf.d", notify => Exec["reload-nginx"], require => Package["nginx"], } file { "$nginx_logrote": ensure => file, mode => 755, owner => root, group => root, source => "puppet:///modules/nginx/nginx_logrote.sh", } cron { 'nginx_logrote_cron': command => "/bin/bash {$nginx_logrote} > /dev/null 2>&1", user => root, minute => '0', hour => '0', } exec { 'reload-nginx': command => "/etc/init.d/nginx reload", refreshonly => true, } }
以上代碼中定義了:
變量,將nginx戶、虛擬主機錄及志件定義爲變量,便在該作域內引。
yumrepo資源,使yumrepo定義Nginx軟件包來源,Puppet會在yum軟件源中創建
nginx.repo件。
以上代碼中定義了:
File資源,nginx.conf採模塊的式實現,配置件中部分參數便使facts或變量進傳遞。志件與虛擬主機件採件同步的式實現,並保持錄的致性,以避免虛擬主機刪除後 不同步的問題。且還使notify屬性觸發exec進reload動作。
service資源,定義Nginx服務的狀態,默認隨開機啓動,puppet agent運時每次檢測Nginx服
務是否運等。該資源依賴package資源Nginx軟件包的安裝。
cron資源,定義志清除腳本定時運。每天零點採root進志切割。
exec資源,定義Nginx服務的reload命令爲資源,便虛擬主機變更時進加載。
4、創建nginx主配置件:
我們定義節選核的nginx.conf配置件,其中的nginx進程個數由facts傳遞,與服務器線程數相
同。具體代碼如下:
# cat /etc/puppet/modules/nginx/templates/nginx.conf.erb user <%= real_nginx_user %>; worker_processes <%= processorcount %>; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { use epoll; worker_connections 51200; } http { include /etc/nginx/mime.types; default_type application/octet-stream; charset utf-8; 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 /var/log/nginx/access.log main; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_body_buffer_size 8m; #256k sendfile on; #timeouts keepalive_timeout 0; #TCP Options tcp_nopush on; tcp_nodelay on; client_max_body_size 50m; include /etc/nginx/conf.d/*.conf; }
4、創建虛擬主機錄及件。
對所有的虛擬主機進錄同步管理,創建agent.domain.com虛擬主機,定義其內容如下:
# mkdir -p /etc/puppet/files/nginx/conf.d # vim /etc/puppet/files/nginx/conf.d/agent1.jeffery.com.conf server { listen 80; server_name agent1.jeffery.com root /var/www/html/agent1.jeffery.com; location /nginx_status { stub_status on; access_log off; } }
5、創建志輪循腳本,具體如下:
# cat /etc/puppet/modules/nginx/files/nginx_logrote.sh #!/bin/bash # This script run at 00:00 # The Nginx logs path logs_path="/var/log/nginx/" PIDFILE=/var/run/nginx.pid ACCESS_LOG="${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" ERROR_LOG="${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/error_$(date -d "yesterday" mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/ mv ${logs_path}access.log $ACCESS_LOG mv ${logs_path}error.log $ERROR_LOG kill -USR1 `cat $PIDFILE` #gzip /bin/gzip -9 $ACCESS_LOG /bin/gzip -9 $ERROR_LOG #rm find ${logs_path} -name "*.log.gz" -mtime +7|xargs rm –f
6、設置同步主機、模塊
# cat /etc/puppet/manifests/site.pp $fileserver = "master.jeffery.com" import "nodes/cnc/*.pp" #import '/etc/puppet/manifests/nodes/cnc/agent1.jeffery.com.pp' # cat /etc/puppet/manifests/nodes/cnc/agent1.jeffery.com.pp node 'agent1.jeffery.com' { include nginx #include httpd #include memcached }
7、在客戶端運puppet命令可以看到Finished完成的提,具體如下:
notice: Finished catalog run in 18.76 seconds
這時我們可以看到/etc/nginx/conf.d錄已經同步了志切割件與虛擬主機agent的配置件,並
且Nginx服務已啓動。
到這我們已經完成了編寫nginx模塊,並在客戶端成功進應。整個過程不是常複雜,
在編寫時只需要知道每個步驟及其實現的功能就可以輕鬆完成。
二、接下來看如何利官Forge提供的nginx模塊實現Nginx部署。
編寫模塊並不像我們想象中的那麼複雜,並且靈活可定製。當然也可以使Puppetlabs官Forge上所提供的nginx模塊來實現。使時只需要參考模塊 錄下的README件即可。
1、使命令puppet modules查找模塊,代碼如下:
#puppet module search nginx # puppet module search nginx Notice: Searching https://forgeapi.puppetlabs.com ... NAME DESCRIPTION AUTHOR KEYWORDS jfryman-nginx Puppet NGINX management module @jfryman nginx http proxy rack puppetlabs-nginx Puppet NGINX management module ...
2、可以看到許多通過官驗證的模塊,在這我們採官Puppetlabs的nginx模塊進安裝,代碼
如下:
# puppet module install puppetlabs-nginx Notice: Preparing to install into /etc/puppet/modules ... Notice: Downloading from https://forgeapi.puppetlabs.com ... Notice: Installing -- do not interrupt ... /etc/puppet/modules └─┬ puppetlabs-nginx (v99.99.99) └── puppetlabs-stdlib (v4.3.2)
安裝完成後,可以看到在modules錄下多出兩個模塊:stdlib與nginx。
stdlib是puppet提供的函數 庫。
nginx模塊使了此函數庫的函數。
查看nginx模塊內容如下:
# ll -th modules/nginx total 32K -r--r--r-- 1 root root 2.6K May 2 02:36 metadata.json -r--r--r-- 1 root root 369 May 2 02:35 Modulefile drwxr-xr-x 4 root root 4.0K Apr 22 08:10 manifests drwxr-xr-x 4 root root 4.0K Apr 22 08:10 templates drwxr-xr-x 2 root root 4.0K Apr 22 08:10 tests -r--r--r-- 1 root root 665 Sep 5 2013 README.markdown -r--r--r-- 1 root root 2.5K Sep 5 2013 ChangeLog -r--r--r-- 1 root root 0 Sep 5 2013 README -r--r--r-- 1 root root 523 Sep 4 2013 LICENSE
# 查看安裝模塊
# puppet module list
#puppet 卸載模塊
# puppet module install puppetlabs-nginx # 或直接將這個目錄幹掉
3、客戶端安裝同上,更多內容請查看 README 文檔