管理 Apache 服务

Apache 是一款流行的 web 服务器,然而对于其配置者来说并不轻松。 Puppet 可以在一定程度上缓解配置者因管理 Apache 服务器所带来的痛苦。

操作步骤

  1. 如果 Apache 模块还不存在就创建它:

    # mkdir /etc/puppet/modules/apache
    # mkdir /etc/puppet/modules/apache/templates
    # mkdir /etc/puppet/modules/apache/manifests
    
  2. 使用如下内容创建 /etc/puppet/modules/apache/manifests/init.pp 文件:

    class apache {
        package { "apache2-mpm-prefork": ensure => installed }
    
        service { "apache2":
            enable  => true,
            ensure  => running,
            require => Package["apache2-mpm-prefork"],
        }
    
        file { "/etc/apache2/logs":
            ensure  => directory,
            require => Package["apache2-mpm-prefork"],
        }
    
        file { "/etc/apache2/conf.d/name-based-vhosts.conf":
            content => "NameVirtualHost *:80",
            require => Package["apache2-mpm-prefork"],
            notify  => Service["apache2"],
        }
    }
    
  3. 在一个节点中添加如下代码:

    include apache
    
  4. 运行 Puppet:

    # puppet agent --test
    info: Retrieving plugin
    info: Caching catalog for cookbook.bitfieldconsulting.com
    info: Applying configuration version '1309189590'
    
    notice: /Stage[main]/Apache/Package[apache2-mpm-prefork]/ensure:
    ensure changed 'purged' to 'present'
    
    notice: /Stage[main]/Apache/File[/etc/apache2/logs]/ensure:
    created
    
    notice: /Stage[main]/Apache/File[/etc/apache2/conf.d/name-basedvhosts.
    conf]/ensure: defined content as '{md5}78465aacbd01eb537b94
    1b21ae0af8b8'
    
    info: /Stage[main]/Apache/File[/etc/apache2/conf.d/name-basedvhosts.
    conf]: Scheduling refresh of Service[apache2]
    
    notice: Finished catalog run in 39.45 seconds
    

更多用法

在下一节中,我们将看到如何为 Apache 定义虚拟主机的内容。 然而你可能会发现,你需要为整个 Apache 服务器(包括虚拟主机)提供特殊的配置选项。 你可以使用 Puppet 通过部署 apache2.conf 来配置这些选项, 但是将配置片段放在 /etc/apache2/conf.d 目录中会更加整洁清晰。 例如,你可以在 init.pp 中添加如下代码:

define snippet() {
    file { "/etc/apache2/conf.d/${name}":
        source => "puppet:///modules/apache/${name}",
        notify => Service["apache2"],
    }
}

并在节点上包含如下的代码片段:

apache::snippet { "site-specific.conf": }