本次实验内容紧接上次实验,上次博客主要介绍PUPPET的安装认证与资源定义,这次主要写apache与nginx模块的应用。上次实验内容:
本次实验内容:
1.建立节点文件
2.编写apache模块
3.编写nginx模块
4.模板应用(添加虚拟主机配置)
1.不同节点的定义
1.1. 在 puppetmaster(服务器server1端) 编辑 site.pp
# vim /etc/puppet/manifests/site.pp
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
本文出自 “技术人生,简单不简单” 博客,请务必保留此出处http://willis.blog.51cto.com/11907152/1867901