HOWTO - set up a load-balancing web services framework in the REST style. You can very quickly deploy new resources to the network, for all to use.

# INSTALL PREREQUISITES

# on gentoo:
emerge lighttpd
emerge expat

# on any unix:

# perl-compatible regular expressions
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-6.6.tar.gz tar zxvf pcre-6.6.tar.gz
cd pcre-6.6.tar.gz
./configure
make test
sudo make install
cd ..

# lighttpd load balancer
wget http://lighttpd.net/download/lighttpd-1.4.11.tar.gz tar zxvf lighttpd-1.4.11.tar.gz
cd lighttpd-1.4.11.tar.gz
./configure --with-openssl
make
sudo make install
cd ..

# xml manipulation lib
wget http://umn.dl.sourceforge.net/sourceforge/expat/expat-2.0.0.tar.gz tar zxvf expat-2.0.0.tar.gz
cd expat-2.0.0
make
sudo make install
cd ..

# PERL MODULES
sudo cpan
install FCGI
install XML::Dumper
install JSON
install WWW::Resource

# CREATE ROOT

mkdir webroot
mkdir webroot/conf
mkdir webroot/log
mkdir webroot/bin
mkdir webroot/keys

# GENERATE SELF-SIGNED KEY/CERTIFICATE PAIR for HTTPS

openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes # (answer with a single period '.' for each question if you want total anonymity) mv server.pem webroot/keys/.

# CONFIGURE LOAD BALANCER

edit webroot/conf/lighttpd.conf

# contents of lighttpd.conf (this one is on MacOSX; edit for your location):

server.modules              = (
                               "mod_access",
                               "mod_status",
                               "mod_fastcgi",
                               "mod_accesslog" )

server.document-root        = "/Users/ira/webroot"
accesslog.filename          = "/Users/ira/webroot/logs/access.log"
server.errorlog             = "/Users/ira/webroot/logs/error.log"
status.status-url          = "/server-status"
status.config-url          = "/server-config"

ssl.engine                 = "enable"
ssl.pemfile                = "/Users/ira/webroot/keys/server.pem"

server.bind                = "localhost"
server.port                = 3000

# MAKE a new entry here for each new service fastcgi.server = (

        "/env" => 
           ((
                "socket"       => "/tmp/env.socket",
                "check-local"  => "disable",
                "bin-path"     => "/Users/ira/webroot/bin/env",
                "min-procs"    => 1,
                "max-procs"    => 5,
                "max-load-per-proc" => 1,
                "idle-timeout" => 10,
           ))

)


# CREATE TEST RESOURCE
# This will be a server-environment-variable viewer, very helpful # for development.

edit webroot/bin/env

# contents of webroot/bin/env:

#!/usr/bin/perl
package EnvResource;

use HTTP::Status;
use Resource;
@ISA = qw( Resource );

sub GET {
return ( RC_OK, \%ENV );
}

EnvResource->run();

# make executable
chmod +x webroot/bin/env

# START SYSTEM
/usr/local/sbin -D -f webroot/conf/lighttpd.conf

# TEST
https://localhost:3000/env?format=browser

# other formats: xml, json

Congratulations. Happy deploying!