| Index: modules/discourse/manifests/init.pp |
| =================================================================== |
| --- a/modules/discourse/manifests/init.pp |
| +++ b/modules/discourse/manifests/init.pp |
| @@ -28,44 +28,136 @@ class discourse { |
| } |
| package {'bundler': |
| ensure => present, |
| provider => gem |
| } |
| $gem_dependencies = ['git', 'build-essential', 'ruby1.9.1-dev', 'libxml2-dev', |
| - 'libxslt-dev', 'libpq-dev'] |
| + 'libxslt-dev', 'libpq-dev', 'libfcgi-dev'] |
| package {$gem_dependencies: ensure => present} |
| - file {'/etc/discourse': ensure => directory} |
| + file {'/opt/discourse': |
| + ensure => directory, |
| + mode => 755, |
| + owner => discourse, |
| + group => www-data |
| + } |
| - file {'/etc/discourse/database.yml': |
| - mode => 640, |
| + file {'/opt/discourse/discourse.fcgi': |
| + mode => 755, |
| + owner => discourse, |
| + group => www-data, |
| + source => 'puppet:///modules/discourse/discourse.fcgi', |
| + require => Exec['fetch-discourse'] |
| + } |
| + |
| + file {'/opt/discourse/config/database.yml': |
| + mode => 600, |
| + owner => discourse, |
| + group => www-data, |
| + source => 'puppet:///modules/discourse/database.yml', |
| + require => Exec['fetch-discourse'] |
| + } |
| + |
| + file {'/opt/discourse/config/redis.yml': |
| + mode => 600, |
| + owner => discourse, |
| + group => www-data, |
| + source => 'puppet:///modules/discourse/redis.yml', |
| + require => Exec['fetch-discourse'] |
| + } |
| + |
| + file {'/usr/local/bin/init-discourse': |
| + mode => 0755, |
| owner => root, |
| group => root, |
| - source => 'puppet:///modules/discourse/database.yml' |
| + source => 'puppet:///modules/discourse/init-discourse' |
| } |
| - file {'/etc/discourse/redis.yml': |
| - mode => 640, |
| + user {'discourse': |
| + ensure => present, |
| + comment => 'Discourse user', |
| + home => '/home/discourse', |
| + gid => www-data, |
| + password => '*', |
| + managehome => true |
| + } |
| + |
| + file {'/etc/sudoers.d/discourse': |
| + ensure => present, |
| owner => root, |
| group => root, |
| - source => 'puppet:///modules/discourse/redis.yml' |
| + mode => 0440, |
| + source => 'puppet:///modules/discourse/sudoers', |
| + require => User['discourse'] |
| } |
| - file {'/usr/local/bin/deploy-discourse': |
| - mode => 0744, |
| - owner => root, |
| - group => root, |
| - source => 'puppet:///modules/discourse/deploy-discourse' |
| + exec {'fetch-discourse': |
| + command => "hg clone https://hg.adblockplus.org/discourse /opt/discourse && echo gem \\'fcgi\\' >> /opt/discourse/Gemfile", |
| + path => ["/usr/bin/", "/bin/"], |
| + user => discourse, |
| + group => www-data, |
| + require => [Package['mercurial'], File['/opt/discourse']], |
| + onlyif => "test ! -d /opt/discourse/.hg" |
| } |
| - exec {'/usr/local/bin/deploy-discourse': |
| - subscribe => File['/usr/local/bin/deploy-discourse'], |
| + exec {'/usr/local/bin/init-discourse': |
| + subscribe => File['/usr/local/bin/init-discourse'], |
| refreshonly => true, |
| + user => discourse, |
| + group => www-data, |
| timeout => 0, |
| + logoutput => true, |
| require => [Package['bundler', 'postgresql-contrib', $gem_dependencies], |
| - File['/etc/discourse/database.yml', '/etc/discourse/redis.yml']] |
| + User['discourse'], File['/etc/sudoers.d/discourse'], |
| + Exec['fetch-discourse'], |
| + File['/opt/discourse/discourse.fcgi'], |
| + File['/opt/discourse/config/database.yml'], |
| + File['/opt/discourse/config/redis.yml']] |
| } |
| - # TODO: Set up thin to run the app, with nginx as a proxy if necessary |
| + class {'spawn-fcgi':} |
| + |
| + spawn-fcgi::pool {'discourse-fastcgi': |
| + ensure => 'present', |
| + user => 'discourse', |
| + group => 'www-data', |
| + mode => 0664, |
| + fcgi_app => '/opt/discourse/discourse.fcgi', |
| + socket => '/tmp/discourse-fastcgi.sock', |
| + require => File['/opt/discourse/discourse.fcgi'], |
| + } |
| + |
| + class {'nginx': |
| + worker_processes => 1, |
| + worker_connections => 500 |
| + } |
| + |
| + file {'/etc/nginx/sites-available/adblockplus.org_sslcert.key': |
| + ensure => file, |
| + notify => Service['nginx'], |
| + before => Nginx::Hostconfig['intraforum.adblockplus.org'], |
| + require => Package['nginx'], |
| + source => 'puppet:///modules/private/adblockplus.org_sslcert.key' |
| + } |
| + |
| + file {'/etc/nginx/sites-available/adblockplus.org_sslcert.pem': |
| + ensure => file, |
| + mode => 0400, |
| + notify => Service['nginx'], |
| + before => Nginx::Hostconfig['intraforum.adblockplus.org'], |
| + require => Package['nginx'], |
| + source => 'puppet:///modules/private/adblockplus.org_sslcert.pem' |
| + } |
| + |
| + nginx::hostconfig{'intraforum.adblockplus.org': |
| + source => 'puppet:///modules/discourse/intraforum.adblockplus.org', |
| + enabled => true |
| + } |
| + |
| + file {'/etc/logrotate.d/nginx_intraforum.adblockplus.org': |
| + ensure => file, |
| + require => Nginx::Hostconfig['intraforum.adblockplus.org'], |
| + source => 'puppet:///modules/discourse/logrotate' |
| + } |
| } |