Hi, here are know the first steps for a better integration with nginx (http://nginx.net/) and lighty (http://www.lighttpd.net/).
They are able to connect to fast-cgi (fcgi) backends and the fcgi can
behave like a apache with mod_perl ;-)
The files are:
index_new.fpl => the starting point it forks 5 (n_processes), write a
pidfile (pid_fname). In this file depending on the
request uri ($ENV{'REQUEST_URI'}) the different
interfaces will be called.
fcgi-startup.pl => is mainly a copy from apache2-httpd-new.include.conf
otrs-2.2.4.diff => I have changed some small parts in the otrs System an
this are the diffs.
otrs.nginx.conf => nginx configfile. Please pay attention that the
socket (fastcgi_pass && FCGI_SOCKET_PATH) is rw for
both users (otrs && nginx).
TODOs:
I have only tested it with a small setup.
Better and bigger testing.
Documentation.
start/stop script. I try to decide which process managment system to us,
please can somebody help to find a 'good' way which you can go.
POE::Component::Pool::Thread
(http://search.cpan.org/~tag/POE-Component-Pool-Thread-0.015/Thread.pm)
PTools::Proc::NWay
http://search.cpan.org/~ccobb/PTools-Proc-NWay-0.09/lib/PTools/Proc/NWay.pm
Daemon::Generic
http://search.cpan.org/~muir/Daemon-Generic-0.51/lib/Daemon/Generic.pod
Generic POE solution e.g.
http://poe.perl.org/?POE_Cookbook/Web_Server_With_Forking
DJB's Daemontools http://cr.yp.to/daemontools.html
Other Ideas ;-)
Please tell me what you think and if this is the way otrs is able to go
;-)
Thanks & greetings
Aleks#!/usr/bin/perl -w # -- # bin/fcgi-bin/index.fpl - the global FastCGI handle file (incl. auth) for OTRS # Copyright (C) 2001-2006 OTRS GmbH, http://otrs.org/ # -- # $Id: index.fpl,v 1.4 2006/08/26 17:33:32 martin Exp $ # -- # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -- if (not defined $ENV{'FCGI_SOCKET_PATH'}){ die "Please export the 'FCGI_SOCKET_PATH'"; } # use ../../ as lib location use FindBin qw($Bin); use lib "$Bin/../.."; use lib "$Bin/../../Kernel/cpan-lib"; use vars qw($VERSION @INC); $VERSION = '$Revision: 1.4 $'; $VERSION =~ s/^\$.*:\W(.*)\W.+?$/$1/; # check @INC for mod_perl (add lib path for "require module"!) push (@INC, "$Bin/../..", "$Bin/../../Kernel/cpan-lib"); # Imports the library; required line use CGI::Fast; use strict; use FCGI::ProcManager; # load agent web interface use Kernel::System::Web::InterfaceAgent(); require "scripts/fcgi-startup.pl"; # create common objects my %CommonObject = (); $CommonObject{ConfigObject} = Kernel::Config->new(); $CommonObject{LogObject} = Kernel::System::Log->new( LogPrefix => 'FCGI-Starter', ConfigObject => $CommonObject{ConfigObject}, ); #$CommonObject{MainObject} = Kernel::System::Main->new(%CommonObject); #$CommonObject{DBObject} = Kernel::System::DB->new(%CommonObject); my $proc_manager = FCGI::ProcManager->new({ n_processes => 5 , pid_fname => 'fcgi.pid' }); # 0=off;1=on; my $Debug = 03; my $FCGI_Mode = 1; #my $Cnt = 0; $proc_manager->pm_manage(); # Response loop while (my $WebRequest = new CGI::Fast) { my $Interface; $CommonObject{LogObject}->Log( Priority => 'Debug', Message => "index_new.fpl:".$ENV{'REQUEST_URI'}, ); $proc_manager->pm_pre_dispatch(); if ( $ENV{'REQUEST_URI'} =~ /index\.fpl/o ){ # create new object $Interface= Kernel::System::Web::InterfaceAgent->new(Debug => $Debug, WebRequest => $WebRequest , FCGI_Mode => $FCGI_Mode); } elsif ( $ENV{'REQUEST_URI'} =~ /customer\.fpl/o ){ # create new object $Interface = Kernel::System::Web::InterfaceCustomer->new(Debug => $Debug, WebRequest => $WebRequest); } elsif ( $ENV{'REQUEST_URI'} =~ /public\.fpl/o ){ # create new object $Interface = Kernel::System::Web::InterfacePublic->new(Debug => $Debug, WebRequest => $WebRequest); } $Interface->Run(); $proc_manager->pm_post_dispatch(); # $Cnt++; # print STDERR "This is connection number $Cnt\n"; }
fcgi-startup.pl
Description: Perl program
Only in otrs-2.2.4_fcgi/bin/fcgi-bin: index_new.fpl
diff -ru otrs-2.2.4/Kernel/System/DB.pm otrs-2.2.4_fcgi/Kernel/System/DB.pm
--- otrs-2.2.4/Kernel/System/DB.pm 2007-08-28 22:02:13.000000000 +0200
+++ otrs-2.2.4_fcgi/Kernel/System/DB.pm 2007-12-20 13:06:49.000000000 +0100
@@ -76,6 +76,8 @@
# 0=off; 1=updates; 2=+selects; 3=+Connects;
$Self->{Debug} = $Param{Debug} || 0;
+ $Self->{FCGI_Mode} = $Param{FCGI_Mode} || 0;
+
# check needed objects
foreach (qw(ConfigObject LogObject MainObject)) {
if ($Param{$_}) {
@@ -794,7 +796,9 @@
sub DESTROY {
my $Self = shift;
- $Self->Disconnect();
+ if (!$Self->{FCGI_Mode}) {
+ $Self->Disconnect();
+ }
return 1;
}
1;
diff -ru otrs-2.2.4/Kernel/System/Web/InterfaceAgent.pm
otrs-2.2.4_fcgi/Kernel/System/Web/InterfaceAgent.pm
--- otrs-2.2.4/Kernel/System/Web/InterfaceAgent.pm 2007-09-07
11:12:46.000000000 +0200
+++ otrs-2.2.4_fcgi/Kernel/System/Web/InterfaceAgent.pm 2007-12-20
13:05:55.000000000 +0100
@@ -67,6 +67,8 @@
# get debug level
$Self->{Debug} = $Param{Debug} || 0;
+ $Self->{FCGI_Mode} = $Param{FCGI_Mode} || 0;
+
# performance log
$Self->{PerformanceLogStart} = time();
@@ -707,16 +709,29 @@
Comment => 'Please contact your admin'
);
}
+
+
# debug info
if ($Self->{Debug}) {
- $Self->{LogObject}->Log(
- Priority => 'debug',
+ $Self->{LogObject}->Log(
+ Priority => 'debug',
Message => 'Global handle stopped.',
);
}
- # db disconnect && undef %Param
- $Self->{DBObject}->Disconnect();
- undef %Param;
+
+ if (!$Self->{FCGI_Mode}) {
+ # db disconnect && undef %Param
+ $Self->{DBObject}->Disconnect();
+ }else{
+ if ($Self->{Debug}) {
+ $Self->{LogObject}->Log(
+ Priority => 'debug',
+ Message => 'DB connection NOT Disconnected.',
+ );
+ }
+ }
+
+ undef %Param;
}
1;
Only in otrs-2.2.4_fcgi/scripts: fcgi-startup.pl
user nobody;
worker_processes 5;
#error_log logs/error.log;
#error_log logs/error.log debug;
#error_log logs/error.log notice;
error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format timing '$remote_addr [$time_local] $request $status '
'msec $msec upstream_response_time
$upstream_response_time '
'upstream_status $upstream_status';
access_log logs/access.log combined;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
# another virtual host using mix of IP-, name-, and port-based configuration
#
server {
listen 8000;
server_name _;
client_max_body_size 15m;
location /otrs-web {
alias /home/otrs/download/otrs/otrs-2.2.4/var/httpd/htdocs;
}
location / {
root /opt/otrs/var/httpd/htdocs/;
# FCGI_SOCKET_PATH in the fcgi-process env
fastcgi_pass unix:/home/otrs/sock/otrs.sock;
fastcgi_index index.fpl;
fastcgi_param SCRIPT_FILENAME
/opt/otrs/bin/fcgi-bin$fastcgi_script_name;
include fastcgi_params;
# index index.html index.htm;
}
}
}
_______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev
