本次實驗內容緊接上次實驗,上次博客主要介紹PUPPET的安裝認證與資源定義,此次主要寫apache與nginx模塊的應用。上次實驗內容:html
實戰Puppet 集中配置管理系統(1)——認證與資源定義
node
本次實驗內容:nginx
1.創建節點文件shell
2.編寫apache模塊apache
3.編寫nginx模塊vim
4.模板應用(添加虛擬主機配置)瀏覽器
1.不一樣節點的定義bash
1.1. 在 puppetmaster(服務器server1端) 編輯 site.pp服務器
# vim /etc/puppet/manifests/site.ppdom
import "nodes/*.pp"
1.2. 創建節點文件
#mkdir -p /etc/puppet/manifests/nodes
# vi /etc/puppet/manifests/nodes/server2.pp
node 'server2.example.com' {
file { "/var/www/html/index.html":
content => "server2.example.com"
}
}
# vi /etc/puppet/manifests/nodes/server3.pp
node 'server3.example.com' {
file { "/var/www/html/index.html":content => "server3.example.com"
}
}
1.3 在client上測試:
#puppet agent --server server1.example.com --no-daemonize -vt
2.編寫apache模塊
#mkdir -p /etc/puppet/modules/httpd/manifests
#mkdir -p /etc/puppet/modules/httpd/files
#cd /etc/puppet/modules/httpd/manifests
#vim install.pp
class httpd::install {
package { "httpd" :
ensure => present
}
}
#vim service.pp
class httpd::service
{
service {
"httpd":
ensure => running,
require => Class["httpd::install","httpd::config"]
}
}
#vim config.pp
class httpd::config {
file {
"/etc/httpd/conf/httpd.conf":
source => "puppet:///modules/httpd/httpd.conf",
require => Class["httpd::install"],
notify => Class["httpd::service"]
}
}
#vim init.pp
class httpd {
include httpd::install,httpd::config,httpd::service
}
#cd /etc/puppet/modules/httpd/files
#cp /etc/httpd/conf/httpd.conf .
#cd /etc/puppet/manifests/nodes
#vim server2.pp
node 'server2.example.com' {
include httpd
file { "/var/www/html/index.html":
content => "server2.example.com"
}
}
在server2上測試:
#puppet agent --server server1.example.com --no-daemonize -vt
3.編寫nginx模塊
1) #mkdir -p /etc/puppet/modules/nginx/manifests
2) #mkdir -p /etc/puppet/modules/nginx/files
3) #cd /etc/puppet/modules/nginx/manifests
#vim install.pp
class nginx::install{
package {
["pcre-devel","gcc","openssl-devel"]:
ensure => present
}
file {
"/mnt/nginx-1.8.0.tar.gz":
source => "puppet:///modules/nginx/nginx-1.8.0.tar.gz";
"/mnt/install-nginx.sh":
source => "puppet:///modules/nginx/install-nginx.sh"
}
exec {
"install nginx":
command => "sh /mnt/install-nginx.sh",
path => "/bin:/usr/bin:/sbin:/usr/sbin",
require => File["/mnt/install-nginx.sh","/mnt/nginx-1.8.0.tar.gz"],
creates => "/usr/local/lnmp/nginx/sbin/nginx"
#provider => shell,
}
}
#vim service.pp
class nginx::service {
exec {
"nginx start":
command => "/usr/local/lnmp/nginx/sbin/nginx",
require => Class["nginx::install"],
creates => "/usr/local/lnmp/nginx/logs/nginx.pid"
}
}
#vim config.pp
class nginx::config {
file {
"/usr/local/lnmp/nginx/conf/nginx.conf":
source => "puppet:///modules/nginx/nginx.conf",
require => Class["nginx::service"]
}
exec {
"nginx reload":
command => "/usr/local/lnmp/nginx/sbin/nginx -s reload",
refreshonly => true,
subscribe => File["/usr/local/lnmp/nginx/conf/nginx.conf"]
}
}
#cd /etc/puppet/modules/nginx/files/
#vim install-nginx.sh
#!/bin/bash
cd /mnt
tar -zxf nginx-1.8.0.tar.gz
cd nginx-1.8.0
./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module
make && make install
5)[root@server1 files]# ls
install-nginx.sh nginx-1.8.0.tar.gz nginx.conf
#cd /etc/puppet/manifests/nodes
#vim server3.pp
node 'server3.example.com' {
include nginx
}
在server3上測試:
#puppet agent --server server1.example.com --no-daemonize -vt
4. 模板應用(添加虛擬主機配置):
文件存放在 templates 目錄中,以*.erb 結尾。
# vim /etc/puppet/modules/httpd/manifests/init.pp
//#添加如下行
define httpd::vhost($domainname) {
file { "/etc/httpd/conf.d/${domainname}_vhost.conf":
content => template("httpd/httpd_vhost.conf.erb"),
require => Class["httpd::install"],
notify => Class["httpd::service"]
}
file { "/var/www/$domainname":
ensure => directory
}
file { "/var/www/$domainname/index.html":
content => $domainname
}
#cd /etc/puppet/modules/httpd/templates/
# vim httpd_vhost.conf.erb
<VirtualHost *:80>
ServerName <%= domainname %>
DocumentRoot /var/www/<%= domainname %>
ErrorLog logs/<%= domainname %>_error.log
CustomLog logs/<%= domainname %>_access.log common
</VirtualHost>
#vim /etc/puppet/manifests/nodes/server4.pp
node 'server2.example.com' {
include httpd
httpd::vhost { 'server2.example.com':
domainname => "server2.example.com",
}
httpd::vhost { 'www2.example.com':
domainname => "www2.example.com",
}
}
# vim /etc/puppet/modules/httpd/files/httpd.conf
990 NameVirtualHost *:80
5)在server2 上測試:
#puppet agent --server server2.example.com --no-daemonize -vt
//在/var/www下會生成server2.example.com www2.example.com兩個目錄
6)在主機上添加解析,瀏覽器上測試
訪問server2.example.com
www2.example.com