# Deploy LemonLDAP::NG on a Plack server

Plack is a powerful engine that powers many very fast servers. LLNG uses some Plack libraries to run as FastCGI server. So, It can be easily run on these servers. See also Advanced PSGI usage if you want to replace LLNG FastCGI server.

## Complete example

llapp.psgi

      #!/usr/bin/perl

      use Data::Dumper;
      use Plack::Builder;

      # Basic test app
      my $testApp = sub {
          my ($env) = @_;
          return [
              200,
              [ 'Content-Type' => 'text/plain' ],
              [ "Hello LLNG world\n\n" . Dumper($env) ],
          ];
      };

      # Build protected app
      my $test = builder {
          enable "Auth::LemonldapNG";
          $testApp;
      };

      # Build portal app
      use Lemonldap::NG::Portal::Main;
      my $portal = builder {
          enable "Plack::Middleware::Static",
            path => '^/static/',
            root => '/path/to/portal/htdocs/';
          Lemonldap::NG::Portal::Main->run( {} );
      };

      # Build manager app
      use Lemonldap::NG::Manager;
      my $manager = builder {
          enable "Plack::Middleware::Static",
            path => '^/static/',
            root => '/path/to/manager/htdocs/';
          enable "Plack::Middleware::Static",
            path => '^/doc/',
            root => '/path/to/dir/that/contains/"doc"';
          enable "Plack::Middleware::Static",
            path => '^/lib/',
            root => '/path/to/doc/pages/documentation/current/';
          Lemonldap::NG::Manager->run( {} );
      };

      # Global app
      builder {
          mount 'http://test1.example.com/'   => $test;
          mount 'http://auth.example.com/'    => $portal;
          mount 'http://manager.example.com/' => $manager;
      };

Launch it with Starman for example:

    $ starman --port 80 --workers 32 llapp.psgi