Dancer

 view release on metacpan or  search on metacpan

lib/Dancer/Deployment.pod  view on Meta::CPAN

=head4 Using balance

C<balance> is a simple load-balancer from Inlab Software, available from
L<http://www.inlab.de/balance.html>.

It could be used simply to hand requests to a standalone Dancer app. You could
even run several instances of your Dancer app, on the same machine or on several
machines, and use a machine running balance to distribute the requests between
them, for some serious heavy traffic handling!

To listen on port 80, and send requests to a Dancer app on port 3000:

    balance http localhost:3000

To listen on a specified IP only on port 80, and distribute requests between
multiple Dancer apps on multiple other machines:

    balance -b 10.0.0.1 80 10.0.0.2:3000 10.0.0.3:3000 10.0.0.4:3000

=head4 Using Lighttpd

You can use Lighttp's mod_proxy:

    $HTTP["url"] =~ "/application" {
        proxy.server = (
            "/" => (
                "application" => ( "host" => "127.0.0.1", "port" => 3000 )
            )
        )
    }

This configuration will proxy all request to the B</application> path to the
path B</> on localhost:3000.

=head4 Using Nginx

with Nginx:

    upstream backendurl {
        server unix:THE_PATH_OF_YOUR_PLACKUP_SOCKET_HERE.sock;
    }

    server {
      listen       80;
      server_name YOUR_HOST_HERE;

      access_log /var/log/YOUR_ACCESS_LOG_HERE.log;
      error_log  /var/log/YOUR_ERROR_LOG_HERE.log info;

      root YOUR_ROOT_PROJECT/public;
      location / {
        try_files $uri @proxy;
        access_log off;
        expires max;
      }

      location @proxy {
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_pass       http://backendurl;
      }

    }

You will need plackup to start a worker listening on a socket :

    cd YOUR_PROJECT_PATH
    sudo -u www plackup -E production -s Starman --workers=2 -l THE_PATH_OF_YOUR_PLACKUP_SOCKET_HERE.sock -a bin/app.pl

A good way to start this is to use C<daemontools> and place this line with
all environments variables in the "run" file.

=head4 Using HAProxy

C<HAProxy> is a reliable high-performance TCP/HTTP load balancer written in C available from
L<http://haproxy.1wt.eu/>.

Suppose we want to run an application at C<app.example.com:80> and would to use two
backends listen on hosts C<app-be1.example.com:3000> and C<app-be2.example.com:3000>.

Here is HAProxy configuration file (haproxy.conf):

    global
        nbproc  1
        maxconn 4096
        user    nobody
        group   nobody
        # haproxy logs will be collected by syslog
        # syslog: unix socket path or tcp pair (ipaddress:port)
        log     /var/run/log local0
        daemon
        # enable compression (haproxy v1.5-dev13 and above required)
        tune.comp.maxlevel  5

    defaults
        log     global
        option  httpclose
        option  httplog
        option  dontlognull
        option  forwardfor
        option  abortonclose
        mode    http
        balance roundrobin
        retries 3
        timeout connect         5s
        timeout server          30s
        timeout client          30s
        timeout http-keep-alive 200m
        # enable compression (haproxy v1.5-dev13 and above required)
        compression algo gzip
        compression type text/html application/javascript text/css application/x-javascript text/javascript

    # application frontend (available at http://app.example.com)
    frontend app.example.com
        bind                  :80
        # modify request headers
        reqadd                X-Forwarded-Proto:\ http
        reqadd                X-Forwarded-Port:\ 80



( run in 0.866 second using v1.01-cache-2.11-cpan-39bf76dae61 )