package Mojolicious::Command::daemon; use Mojo::Base 'Mojolicious::Command'; use Mojo::Server::Daemon; use Mojo::Util qw(getopt); has description => 'Start application with HTTP and WebSocket server'; has usage => sub { shift->extract_usage }; sub build_server { my ($self, @args) = @_; my $daemon = Mojo::Server::Daemon->new(app => $self->app); die $self->usage unless getopt \@args, 'b|backlog=i' => sub { $daemon->backlog($_[1]) }, 'c|clients=i' => sub { $daemon->max_clients($_[1]) }, 'i|inactivity-timeout=i' => sub { $daemon->inactivity_timeout($_[1]) }, 'k|keep-alive-timeout=i' => sub { $daemon->keep_alive_timeout($_[1]) }, 'l|listen=s' => \my @listen, 'p|proxy:s' => \my @proxy, 'r|requests=i' => sub { $daemon->max_requests($_[1]) }; $daemon->listen(\@listen) if @listen; $daemon->reverse_proxy(1) if @proxy; my @trusted = grep {length} @proxy; $daemon->trusted_proxies(\@trusted) if @trusted; return $daemon; } sub run { shift->build_server(@_)->run } 1; =encoding utf8 =head1 NAME Mojolicious::Command::daemon - Daemon command =head1 SYNOPSIS Usage: APPLICATION daemon [OPTIONS] ./myapp.pl daemon ./myapp.pl daemon -m production -p -l http://*:8080 ./myapp.pl daemon -l http://127.0.0.1:8080 -l https://[::]:8081 ./myapp.pl daemon -l 'https://*:443?cert=./server.crt&key=./server.key' ./myapp.pl daemon -l http+unix://%2Ftmp%2Fmyapp.sock ./myapp.pl daemon -l http://127.0.0.1:8080 -p 127.0.0.0/8 -p fc00::/7 Options: -b, --backlog Listen backlog size, defaults to SOMAXCONN -c, --clients Maximum number of concurrent connections, defaults to 1000 -h, --help Show this summary of available options --home Path to home directory of your application, defaults to the value of MOJO_HOME or auto-detection -i, --inactivity-timeout Inactivity timeout, defaults to the value of MOJO_INACTIVITY_TIMEOUT or 30 -k, --keep-alive-timeout Keep-alive timeout, defaults to the value of MOJO_KEEP_ALIVE_TIMEOUT or 5 -l, --listen One or more locations you want to listen on, defaults to the value of MOJO_LISTEN or "http://*:3000" -m, --mode Operating mode for your application, defaults to the value of MOJO_MODE/PLACK_ENV or "development" -p, --proxy [] Activate reverse proxy support, defaults to the value of MOJO_REVERSE_PROXY, optionally takes one or more trusted proxy addresses or networks -r, --requests Maximum number of requests per keep-alive connection, defaults to 100 =head1 DESCRIPTION L starts applications with the L backend. This is a core command, that means it is always enabled and its code a good example for learning to build new commands, you're welcome to fork it. See L for a list of commands that are available by default. =head1 ATTRIBUTES L inherits all attributes from L and implements the following new ones. =head2 description my $description = $daemon->description; $daemon = $daemon->description('Foo'); Short description of this command, used for the command list. =head2 usage my $usage = $daemon->usage; $daemon = $daemon->usage('Foo'); Usage information for this command, used for the help screen. =head1 METHODS L inherits all methods from L and implements the following new ones. =head2 build_server my $server = $daemon->build_server(@ARGV); Build L instance from command line arguments. =head2 run $daemon->run(@ARGV); Run this command. =head1 SEE ALSO L, L, L. =cut