puppet模板主要用於文件,例如各類服務的配置文件,相同的服務,不一樣的配置就能夠考慮使用模板文件,例如Nginx和Apache的虛擬主機配置就能夠考慮採用ERB模板,nginx的安裝在這裏建議用系統內部自帶的YUM源來安裝或其它第三方YUM源來安裝,若是是用Nginx的官方源來安裝nginx的話,咱們能夠查看下/etc/yum.repos.d/nginx.repo文件內容,以下所示:php
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1
這種方式更加寧活,咱們能夠在nginx官網去下載適合本身的rpm包,而後添加進本身的YUM源,在自動化運維要求嚴格的定製環境中,絕大多數運維同窗都會選擇這種方法。你們經過此種方式安裝nginx之後會發現,確實比源碼安裝Nginx方便多了,像自動分配了運行nginx的用戶nginx:nginx,Nginx的日誌存放會自動保存在/var/log/nginx下,其工做目錄爲/etc/nginx。
像Puppet其它初級知識點我這裏就略過了,我直接貼上文件內容,/etc/puppet的文件結構以下:html
|-- auth.conf |-- fileserver.conf |-- manifests | |-- nodes | | |-- client.cn7788.com.pp | | `-- test.cn7788.com.pp | `-- site.pp |-- modules | `-- nginx | |-- files | |-- manifests | | `-- init.pp | `-- templates | |-- nginx.conf.erb | `-- nginx_vhost.conf.erb `-- puppet.conf
site.pp的文件內容以下:node
import "nodes/*.pp"
client.cn7788.com.pp的文件內容以下所示:nginx
node 'client.cn7788.com' { include nginx nginx::vhost {'client.cn7788.com': sitedomain => "client.cn7788.com" , rootdir => "client", } }
test.cn7788.com.pp的文件內容以下所示:centos
node 'test.cn7788.com' { include nginx nginx::vhost {'test.cn7788.com': sitedomain => "test.cn7788.com" , rootdir => "test", } }
/etc/puppet/modules/nginx/manifests/init.pp文件內容以下所示:app
class nginx{ package{"nginx": ensure =>present, } service{"nginx": ensure =>running, require =>Package["nginx"], } file{"nginx.conf": ensure => present, mode => 644,owner => root,group => root, path => "/etc/nginx/nginx.conf", content=> template("nginx/nginx.conf.erb"), require=> Package["nginx"], } } define nginx::vhost($sitedomain,$rootdir) { file{ "/etc/nginx/conf.d/${sitedomain}.conf": content => template("nginx/nginx_vhost.conf.erb"), require => Package["nginx"], } }
/etc/puppet/modules/nginx/templates/nginx.conf.erb文件內容以下所示:運維
user nginx; worker_processes 8; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { use epoll; worker_connections 51200; } http { include /etc/nginx/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 /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }
/etc/puppet/modules/nginx/templates/nginx_vhost.conf.erb文件內容以下所示:dom
server { listen 80; server_name <%= sitedomain %>; access_log /var/log/nginx/<%= sitedomain %>.access.log; location / { root /var/www/<%= rootdir %>; index index.php index.html index.htm; } }