小木木 发表于 2018-8-2 06:49:33

实战Puppet 集中配置管理系统(2)——apache与nginx模块配置

  本次实验内容紧接上次实验,上次博客主要介绍PUPPET的安装认证与资源定义,这次主要写apache与nginx模块的应用。上次实验内容:
  实战Puppet 集中配置管理系统(1)——认证与资源定义
  本次实验内容:
  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 =>>  }
  }
  #vim config.pp
  class httpd::config {
  file {
  "/etc/httpd/conf/httpd.conf":
  source => "puppet:///modules/httpd/httpd.conf",

  require =>>
  notify =>>  }
  }
  #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 =>>  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 =>>  }
  exec {

  "nginx>
  command => "/usr/local/lnmp/nginx/sbin/nginx -s>  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)# ls
  install-nginx.shnginx-1.8.0.tar.gznginx.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 =>>
  notify =>>  }
  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.comwww2.example.com两个目录

  6)在主机上添加解析,浏览器上测试
  访问server2.example.com
  www2.example.com

页: [1]
查看完整版本: 实战Puppet 集中配置管理系统(2)——apache与nginx模块配置