debian+lighttpd+postgres+request tracker
Потребовалось прикрутить багтрекер Request Tracker к lighttpd.
Приступим.
Устанавливаем lighttpd:
apt-get install lighttpd
Request Tracker лично я ставил руками:
Качаем:
wget http://download.bestpractical.com/pub/rt/release/rt-3.8.1.tar.gz
Далее:
tar xzvf rt-3.8.1.tar.gz -C /tmp; cd /tmp/rt-3.8.1
По умолчанию трекер ставится в каталог /opt/rt3, использует базу в mysql и работает от пользователя www. Меня это не устраивает, так как у меня postgres, да и lighttpd работает от www-data, поэтому:
./configure --prefix=/usr/share/rt3 --with-db-type=Pg --with-db-port=5432
--with-db-dba=superpg --with-web-user=www-data --with-web-group=www-data
Где superpg – пользователь postgres с правами root.
Проверяем наличие необходимых перловых модулей:
make testdeps
У меня не оказалось почти всех, и потому:
make fixdeps
После установки модулей, проверяем еще раз с помощью testdeps и если все хорошо:
make install
Осталось только создать базу в postgres:
make initialize-database
Отвечаем на вопросы скрипта и вуаля, база создана.
Редактируем /usr/share/rt3/etc/RT_SiteConfig.pm, заменив example.com на ваш домен:
Set($rtname,"example.com");
Set($Organization,"example.com");
Set($CorrespondAddress,"support@example.com");
Set($CommentAddress,"support-comment@example.com");
Set($Timezone,"Europe/Moscow");
Set($WebPath,"/rt");
Set($WebBaseURL,"http://example.com");
1;
Теперь переходим к прикручиванию трекера к lighttpd через fastcgi. Сразу оговорюсь, в поставке RT есть готовый хэндлер mason_handler.fcgi, но у меня с ним RT работать отказывался. Посему пришлось использовать модифицированную версию, взятую из вики. Вот она:
#!/usr/bin/perl
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
#
# This software is Copyright (c) 1996-2008 Best Practical Solutions, LLC
#
package RT::Mason;
use strict;
use vars '$Handler';
use File::Basename;
require (dirname(__FILE__) . '/webmux.pl');
# Enter CGI::Fast mode, which should also work as a vanilla CGI script.
require CGI::Fast;
RT::Init();
while ( my $cgi = CGI::Fast->new ) {
# the whole point of fastcgi requires the env to get reset here..
# So we must squash it again
$ENV{'PATH'} = '/bin:/usr/bin';
$ENV{'CDPATH'} = '' if defined $ENV{'CDPATH'};
$ENV{'SHELL'} = '/bin/sh' if defined $ENV{'SHELL'};
$ENV{'ENV'} = '' if defined $ENV{'ENV'};
$ENV{'IFS'} = '' if defined $ENV{'IFS'};
Module::Refresh->refresh if RT->Config->Get('DevelMode');
RT::ConnectToDatabase();
if ( ( !$Handler->interp->comp_exists( $cgi->path_info ) )
&& ( $Handler->interp->comp_exists( $cgi->path_info . "/index.html" ) ) )
{$cgi->path_info( $cgi->path_info . "/index.html" );}
eval { $Handler->handle_cgi_object($cgi); };
if ($@) {
$RT::Logger->crit($@);
}
RT::Interface::Web::Handler->CleanupRequest();
}
1;
Проще всего заменить этим содержимое исходного mason_handler.fcgi, который располагается в каталоге /usr/share/rt3/bin в моем случае.
Добавим кое-какие костыли
Для этого в /etc/lighttpd/lighttpd.conf:
откоментируем
"mod_rewrite", "mod_redirect", "mod_setenv",
и добавим три строчки перед server.document-root :
fastcgi.map-extensions = ( ".css" => ".html", ".js" => ".html", "/" => ".html",
"mail-gateway" => ".html", "Search/Chart" => ".html", "Search/Results.rdf" =>
".html", "Search/Results.tsv" => ".html" )
setenv.add-environment = ("SCRIPT_NAME" => "/",)
url.rewrite-once = ("^/(?!NoAuth/images/)(.*)" => "/$1","^(.*)/
Ticket/Attachment/(.*)" => "/$1/Ticket/Attachment/$2/")
Включим поддержку fastcgi в lighttpd:
ln -s /etc/lighttpd/conf-available/10-fastcgi.conf /etc/lighttpd/conf-enabled/
И добавим обработку файлов html, приведя /etc/lighttpd/conf-available/10-fastcgi.conf к такому виду:
server.modules += ( "mod_fastcgi" )
## Start an FastCGI server for php (needs the php5-cgi package)
fastcgi.server = ( ".php" =>
((
"bin-path" => "/opt/php/bin/php-cgi",
"socket" => "/tmp/php.socket",
"max-procs" => 2,
"idle-timeout" => 20,
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "4",
"PHP_FCGI_MAX_REQUESTS" => "10000"
),
"bin-copy-environment" => (
"PATH", "SHELL", "USER"
),
"broken-scriptfilename" => "enable"
)),
".html" =>
((
"socket" => "/tmp/rt-fcgi.socket",
"bin-path" => "/usr/share/rt3/bin/mason_handler.fcgi",
"check-local" => "disable",
))
)
Пути естественно мои, подправьте если не устраивает
Делаем симлинк:
ln -s /usr/share/rt3/share/html /var/www/rt
Перезапускаем lighttpd:
/etc/init.d/lighttpd restart
Входим на трекер броузером: http://example.com/rt
Логин: root, пароль: password