class websites::setup { # Third-party hosted nodes generally aren't behind an https proxy $hosting_type = hiera('nodo::vserver::hosting_type', 'direct') # Include apache class { 'apache': https_proxy => $hosting_type ? { 'direct' => 'yes', default => false, }, } # The needed apache modules apache::module { "alias": ensure => present, } # Images folder file { "${apache::www_folder}/images": ensure => directory, recurse => true, purge => true, force => true, owner => "root", group => "root", # This mode will also apply to files from the source directory mode => 0644, # Puppet will automatically set +x for directories source => [ "puppet:///modules/site_apache/htdocs/${::domain}/images", "puppet:///modules/nodo/htdocs/images", ] } # Web index file { "${apache::www_folder}/index.html": ensure => present, owner => "root", group => "root", mode => 0644, source => [ "puppet:///modules/site_apache/htdocs/${::domain}/index.html", "puppet:///modules/nodo/htdocs/index.html", ] } # Missing page file { "${apache::www_folder}/missing.html": ensure => present, owner => "root", group => "root", mode => 0644, source => [ "puppet:///modules/site_apache/htdocs/${::domain}/missing.html", "puppet:///modules/nodo/htdocs/missing.html", ] } # Make sure that a top level index exists file { "/var/www/index.html": ensure => present, } # Default vhost: can just be applied on the defining host apache::site { "${apache::server_name}": server_alias => "${::domain}", docroot => "${apache::www_folder}", mpm => false, tag => 'all', } # We have to use 'zzz-error' so it will be the last matched vhost apache::site { "error": template => 'apache/error.erb', docroot => "${apache::error_folder}", filename => 'zzz-error', mpm => false, tag => 'all', } # Index page for error file { "${apache::error_folder}/index.html": ensure => "${apache::www_folder}/index.html", owner => "root", group => "root", force => true, require => File["${apache::error_folder}"], } # Images folder for error file { "${apache::error_folder}/images": ensure => "${apache::www_folder}/images", owner => "root", group => "root", force => true, require => File["${apache::error_folder}", "${apache::www_folder}/images"], } } class websites::hosting inherits websites::setup { # Include the needed classes for website hosting include php include trac include websvn include moin include apache::rails # Declare the needed classes for website hosting class { [ 'drupal', 'ikiwiki', 'pmwiki', 'hotglue', 'wordpress' ]: } class { 'viewvc': root_parents => "/var/svn : svn"; } $git_daemon = hiera('nodo::web::git_daemon', True) if $git_daemon != false { class { 'gitweb': } } apache::site { "images": docroot => "${apache::www_folder}/images", mpm => false, tag => 'all', } # Remove untagged site instances Apache::Site <| tag != $::hostname and tag != 'all' |> { ensure => absent, } # Remove untagged database instances Database::Instance <| tag != $::hostname and tag != 'all' |> { ensure => absent, } # Remove untagged ikiwiki instances Ikiwiki::Instance <| tag != $::hostname and tag != 'all' |> { ensure => absent, } } class websites::hosting::admin inherits websites::setup { # Include the needed classes for admin interfaces include trac include gitweb } class websites::dev::setup inherits websites::setup { # Include the needed classes for website development include php include apache::rails # Declare the needed classes for website development class { 'drupal': } }