Puppet之簡單安裝Nginx

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 文檔

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章