開發環境和測試環境均是CentOS6.4 x86_64,ngxin的模闆檔案是在puppet子產品下面templates目錄中以”.erb”結尾的檔案,puppet模闆主要用于檔案,例如各種服務的配置檔案,相同的服務,不同的配置就可以考慮使用模闆檔案,例如Nginx和Apache的虛拟主機配置就可以考慮采用ERB模闆,nginx的安裝在這裡建議用第三方yum源來安裝,如果是用Nginx的官方源來安裝nginx的話,我們可以檢視下/etc/yum.repos.d/nginx.repo檔案内容,如下所示:
1
2
3
4
5
<code>[nginx]</code>
<code>name=nginx repo</code>
<code>baseurl=http:</code><code>//nginx</code><code>.org</code><code>/packages/centos/</code><code>$releasever/$basearch/</code>
<code>gpgcheck=0</code>
<code>enabled=1</code>
第二種方式就是通過createrepo自建自己的YUM源,這種方式更加甯活,我們可以在nginx官網去下載下傳适合自己的rpm包,然後添加進自己的YUM源,在自動化運維要求嚴格的定制環境中,絕大多數運維同學都會選擇這種方法。大家通過此種方式安裝nginx以後會發現,确實比源碼安裝Nginx友善多了,像自動配置設定了運作nginx的使用者nginx:nginx,Nginx的日志存放會自動儲存在/var/log/nginx下,其工作目錄為/etc/nginx,這一點跟源碼編譯安裝的nginx差別很大,請大家在實驗過程也注意甄别。
我比較關心的是ruby的版本和puppet的版本,結果顯示如下:
<code>[root@server manifests]</code><code># ruby -v</code>
<code>ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]</code>
<code>[root@server manifests]</code><code># puppet -V</code>
<code>3.7.4</code>
像Puppet的安裝和其它初級知識點我這裡就略過了,我直接貼上檔案内容,/etc/puppet的檔案結構如下:
6
7
8
9
10
11
12
13
14
15
16
<code>|-- auth.conf</code>
<code>|-- fileserver.conf</code>
<code>|-- manifests</code>
<code>| |-- nodes</code>
<code>| | |-- client.cn7788.com.pp</code>
<code>| | `-- </code><code>test</code><code>.cn7788.com.pp</code>
<code>| `-- site.pp</code>
<code>|-- modules</code>
<code>| `-- nginx</code>
<code>| |-- files</code>
<code>| |-- manifests</code>
<code>| | `-- init.pp</code>
<code>| `-- templates</code>
<code>| |-- nginx.conf.erb</code>
<code>| `-- nginx_vhost.conf.erb</code>
<code>`-- puppet.conf</code>
site.pp的檔案内容如下:
<code>import</code> <code>"nodes/*.pp"</code>
<code>Package {</code>
<code>allow_virtual => </code><code>false</code><code>,</code>
<code>}</code>
client.cn7788.com.pp的檔案内容如下所示:
<code>node </code><code>'client.cn7788.com'</code> <code>{</code>
<code> </code><code>include nginx</code>
<code> </code><code>nginx::vhost {</code><code>'client.cn7788.com'</code><code>:</code>
<code> </code><code>sitedomain => </code><code>"client.cn7788.com"</code> <code>,</code>
<code> </code><code>rootdir => </code><code>"client"</code><code>,</code>
test.cn7788.com.pp的檔案内容如下所示:
<code>node </code><code>'test.cn7788.com'</code> <code>{</code>
<code> </code><code>nginx::vhost {</code><code>'test.cn7788.com'</code><code>:</code>
<code> </code><code>sitedomain => </code><code>"test.cn7788.com"</code> <code>,</code>
<code> </code><code>rootdir => </code><code>"test"</code><code>,</code>
/etc/puppet/modules/nginx/manifests/init.pp檔案内容如下所示:
17
18
19
20
21
22
<code>class nginx{</code>
<code> </code><code>package{</code><code>"nginx"</code><code>:</code>
<code> </code><code>ensure =>present,</code>
<code> </code><code>service{</code><code>"nginx"</code><code>:</code>
<code> </code><code>ensure =>running,</code>
<code> </code><code>require =>Package[</code><code>"nginx"</code><code>],</code>
<code>file</code><code>{</code><code>"nginx.conf"</code><code>:</code>
<code>ensure => present,</code>
<code>mode => 644,owner => root,group => root,</code>
<code>path => </code><code>"/etc/nginx/nginx.conf"</code><code>,</code>
<code>content=> template(</code><code>"nginx/nginx.conf.erb"</code><code>),</code>
<code>require=> Package[</code><code>"nginx"</code><code>],</code>
<code>define nginx::vhost($sitedomain,$rootdir) {</code>
<code> </code><code>file</code><code>{ </code><code>"/etc/nginx/conf.d/${sitedomain}.conf"</code><code>:</code>
<code> </code><code>content => template(</code><code>"nginx/nginx_vhost.conf.erb"</code><code>),</code>
<code> </code><code>require => Package[</code><code>"nginx"</code><code>],</code>
<code> </code><code>}</code>
/etc/puppet/modules/nginx/templates/nginx.conf.erb檔案内容如下所示:
<code>user nginx;</code>
<code>worker_processes 8;</code>
<code>error_log </code><code>/var/log/nginx/error</code><code>.log warn;</code>
<code>pid </code><code>/var/run/nginx</code><code>.pid;</code>
<code>events {</code>
<code> </code><code>use epoll; </code>
<code> </code><code>worker_connections 51200;</code>
<code>http {</code>
<code> </code><code>include </code><code>/etc/nginx/mime</code><code>.types;</code>
<code> </code><code>default_type application</code><code>/octet-stream</code><code>;</code>
<code> </code><code>log_format main </code><code>'$remote_addr - $remote_user [$time_local] "$request" '</code>
<code> </code><code>'$status $body_bytes_sent "$http_referer" '</code>
<code> </code><code>'"$http_user_agent" "$http_x_forwarded_for"'</code><code>;</code>
<code> </code><code>access_log </code><code>/var/log/nginx/access</code><code>.log main;</code>
<code> </code><code>sendfile on;</code>
<code> </code><code>#tcp_nopush on;</code>
<code> </code><code>keepalive_timeout 65;</code>
<code> </code><code>#gzip on;</code>
<code> </code><code>include </code><code>/etc/nginx/conf</code><code>.d/*.conf;</code>
/etc/puppet/modules/nginx/templates/nginx_vhost.conf.erb檔案内容如下所示:
<code>server {</code>
<code> </code><code>listen </code><code>80</code><code>;</code>
<code>server_name <%= sitedomain %>;</code>
<code>access_log /</code><code>var</code><code>/log/nginx/<%= sitedomain %>.access.log;</code>
<code>location / {</code>
<code>root /</code><code>var</code><code>/www/<%= rootdir %>;</code>
<code>index index.php index.html index.htm;</code>
最後我們可以在節點名為client.cn7788.com和test.cn7788.com的機器驗證效果,指令如下所示:
<code>puppet agent --</code><code>test</code> <code>--server server.cn7788.com</code>
部分執行指令結果如下:
<code>Info: Computing checksum on </code><code>file</code> <code>/etc/nginx/nginx</code><code>.conf</code>
<code>Info: FileBucket got a duplicate </code><code>file</code> <code>{md5}f7984934bd6cab883e1f33d5129834bb</code>
<code>Info: </code><code>/Stage</code><code>[main]</code><code>/Nginx/File</code><code>[nginx.conf]: Filebucketed </code><code>/etc/nginx/nginx</code><code>.conf to puppet with </code><code>sum</code> <code>f7984934bd6cab883e1f33d5129834bb</code>
<code>Notice: </code><code>/Stage</code><code>[main]</code><code>/Nginx/File</code><code>[nginx.conf]</code><code>/content</code><code>: content changed </code><code>'{md5}f7984934bd6cab883e1f33d5129834bb'</code> <code>to </code><code>'{md5}6f57d21ca18f7256ef6c6ccd068505dc'</code>
<code>Notice: Finished catalog run </code><code>in</code> <code>15.47 seconds</code>
為了友善大家下載下傳和閱讀,此子產品我特的收錄進了我的github倉庫,位址為https://github.com/yuhongchun/avaliablity/
本文轉自 撫琴煮酒 51CTO部落格,原文連結:http://blog.51cto.com/yuhongchun/1624871,如需轉載請自行聯系原作者