Ruby Gem for generating Apache configurations
Go to file
2011-01-04 16:58:16 -05:00
autotest now generates symlinked dirs in rake task, with option to turn off for specific configs 2011-01-04 16:58:16 -05:00
bin warning for missing dir name 2010-09-15 18:31:29 -04:00
config more reek cleanup 2010-05-18 17:43:23 -04:00
lib now generates symlinked dirs in rake task, with option to turn off for specific configs 2011-01-04 16:58:16 -05:00
skel documentation and such 2010-10-26 10:31:49 -04:00
spec now generates symlinked dirs in rake task, with option to turn off for specific configs 2011-01-04 16:58:16 -05:00
test fix example standalone 2010-11-24 14:37:20 -05:00
.gitignore update rdoc and add tools.watchr 2010-11-29 18:22:03 -05:00
CHANGELOG changelog 2010-11-24 14:38:24 -05:00
Gemfile start making bundler support work more properly 2010-11-24 13:05:20 -05:00
Gemfile.lock update a few things 2010-11-29 18:48:17 -05:00
Rakefile a style thing 2010-11-29 18:48:52 -05:00
README.rdoc update rdoc and add tools.watchr 2010-11-29 18:22:03 -05:00
tools.watchr update rdoc and add tools.watchr 2010-11-29 18:22:03 -05:00

= Apache Config Generator

Programmatically construct your Apache configuration using a powerful DSL built in Ruby.

== Installation

<tt>gem install apache-config-generator</tt>

== Usage

Run <tt>apache-configurator <directory></tt> to create a new directory to hold your config files.
A Rakefile, Gemfile, and config.yml file will also be generated.

=== Rakefile tasks

Apache Config Generator defines several tasks for managing Apache config files:

* apache:create[environment] creates your config files for the specified environment
* apache:environments lists all possible environments that can be generated
* apache:default[environment] sets a default environment to use with a parameter-less apache:create (or the default rake task)

== Building a config file

Configs center around the Apache::Config.build method:

  Apache::Config.build('sites-available/my-site.conf') do
    server_name 'my-cool-website.cool.wow'
    document_root '/var/www/my-cool-website'

    server_admin! "john@coswellproductions.com"

    directory '/' do
      options :follow_sym_links, :indexes
      allow_from_all
    end

    location_match %r{^/secret} do
      deny_from_all

      basic_authentication "My secret", '/etc/apache2/users/global.users', :user => :john
      satisfy :any
    end

    rewrites "My old content" do
      cond "%{HTTP_REFERER}", '!^my-cool-website\.cool\.wow$'
      rule %r{\.(gif|jpg|png|pdf)$}, '/lol-image-stealer.html', :last => true, :redirect => true

      rewrite_test '/index.html', '/index.html', :http_referer => 'other.site'
      rewrite_test '/index.gif', '/lol-image-stealer.html', :http_referer => 'other.site'
      rewrite_test '/index.gif', '/index.gif', :http_referer => 'my-cool-website.cool.wow'
    end
  end

Notes on how the conversion works:

* Methods within the build block are translated into NerdCapsed Apache directives.
* Directives that house children take blocks that contain the child methods.
* Directives that expect regular expressions take a Regexp object.
* Passing a String as a parameter, by default, double-quotes it.
* Passing in a Symbol does not quote the parameter.
  * Some directives NerdCap Symbols, such as Options
* Appending an exclamation point to the method turns off quoting.
* Shortcut methods are defined as modules under the Apache module.

There are also sanity checks that occur when configuration is being generated:

* Directives that rely on a path will check to see if the path exists.
* Since you need to use Regexp objects for directives that require a regular expression,
  bad expressions will be flagged by the Ruby interpreter.
* Rewrite rules can be tested with the rewrite_test method.

The above config is transformed into the following:

  ServerName "my-cool-website.cool.wow"
  DocumentRoot "/var/www/my-cool-website"
  ServerAdmin john@coswellproductions.com

  <Directory "/">
    Options FollowSymLinks, Indexes
    Allow from all
  </Directory>

  <LocationMatch "^/secret">
    Deny from all

    AuthType Basic
    AuthName "My secret"
    AuthUserFile "/etc/apache2/users/global.users"
    Require user john
  </LocationMatch>

  RewriteCond "%{HTTP_REFERER}" "^!my-cool-website\.cool\.wow"
  RewriteRule "\.(gif|jpg|png|pdf)$" "/lol-image-stealer.html" [L,R]

== Using Apache::Config separately

Include the gem and access the methods on Apache::Config directly. See test/example_standalone.rb
for an example.