The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Clustericious::Command::apache - Clustericious command to stat Apache

VERSION

version 1.29

DESCRIPTION

Start an Apache web server. The Apache start and stop commands recognize these options in their configuration section:

pid_file

The location to the pid file. This should usually be the same as the PidFile directive in your Apache configuration.

EXAMPLES

These examples are for Apache 2.4. Getting them to work on Apache 2.2 will require some tweaking.

mod_proxy with hypnotoad

Create a apache24-proxy.conf:

---
% my $root = dir "@{[ home ]}/var/run";
% $root->mkpath(0,0700);

url: http://<%= $host %>:<%= $port %>
start_mode:
  - hypnotoad
  - apache

apache:
  args: -f <%= $root %>/apache.<%= $port %>.conf -E <%= $root %>/apache.<%= $port %>.startup.log
  pid_file: <%= $root %>/apache.<%= $port %>.pid
  autogen:
    filename: <%= $root %>/apache.<%= $port %>.conf
    content: |
      LoadModule unixd_module      modules/mod_unixd.so
      LoadModule headers_module    modules/mod_headers.so
      LoadModule proxy_module      modules/mod_proxy.so
      LoadModule proxy_http_module modules/mod_proxy_http.so
      LoadModule authn_core_module modules/mod_authn_core.so
      LoadModule authz_core_module modules/mod_authz_core.so
      LoadModule authz_host_module modules/mod_authz_host.so
      LoadModule log_config_module modules/mod_log_config.so
      
      Listen <%= $host %>:<%= $port %>
      ServerName <%= $host %>
      PidFile <%= $root %>/apache.<%= $port %>.pid
      
      ErrorLog   <%= $root %>/apache.<%= $port %>.error.log
      LogFormat "%h %l %u %t \"%r\" %>s %b" common
      CustomLog  <%= $root %>/apache.<%= $port %>.access.log common
      
      <Location />
        ProxyPreserveHost On
        ProxyPass         http://localhost:<%= $port %>/
        ProxyPassReverse  http://localhost:<%= $port %>/
        RequestHeader append set X-Forward-Proto
        <RequireAll>
          Require all granted
        </RequireAll>
      </Location>

hypnotoad:
  listen:
    - http://127.0.0.1:<%= $port %>
  pid_file: <%= $root %>/hypnotoad.<%= $port %>.pid

Note that this configuration binds hypnotoad to localhost and Apache to the IP that you pass in. Then call from your application's config file:

---
# If hostname() (should be the same as what the command hostname
# prints) is not a valid address that you can bind to, or if 
# your hostname is the IP as localhost, then change the host to
# a literal IP address
% extend_config 'apache24-proxy', host => hostname(), port => 3001;

CGI

CGI is not recommends, for reasons that are hopefully obvious. It does allow you to run Clustericious from

Create a apache24-cgi.conf:

---
% my $root = dir "@{[ home ]}/var/run";
% $root->mkpath(0,0700);

url: http://<%= $host %>:<%= $port %>
start_mode: apache

apache:
  args: -f <%= $root %>/apache.<%= $port %>.conf -E <%= $root %>/apache.<%= $port %>.startup.log
  pid_file: <%= $root %>/apache.<%= $port %>.pid
  autogen:
    filename: <%= $root %>/apache.<%= $port %>.conf
    content: |
      LoadModule alias_module      modules/mod_alias.so
      LoadModule cgi_module        modules/mod_cgi.so
      LoadModule unixd_module      modules/mod_unixd.so
      LoadModule authn_core_module modules/mod_authn_core.so
      LoadModule authz_core_module modules/mod_authz_core.so
      LoadModule authz_host_module modules/mod_authz_host.so
      LoadModule env_module        modules/mod_env.so
      LoadModule log_config_module modules/mod_log_config.so
      
      Listen     <%= $host %>:<%= $port %>
      ServerName <%= $host %>
      PidFile    <%= $root %>/apache.<%= $port %>.pid
      
      ErrorLog   <%= $root %>/apache.<%= $port %>.error.log
      LogFormat "%h %l %u %t \"%r\" %>s %b" common
      CustomLog  <%= $root %>/apache.<%= $port %>.access.log common
      
      PassEnv PERL5LIB
      PassEnv HOME
      ScriptAlias / <%= $0 %>/
      
      <Directory <%= $0 %>/ >
        Options +ExecCGI
        SetHandler cgi-script
        <RequireAll>
          Require all granted
        </RequireAll>
      </Directory>
      

Then call from your application's config file:

---
% extend_config 'apache24-cgi', host => 'localhost', port => 3001;

SEE ALSO

Clustericious

AUTHOR

Original author: Brian Duggan

Current maintainer: Graham Ollis <plicease@cpan.org>

Contributors:

Curt Tilmes

Yanick Champoux

COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by NASA GSFC.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.