debian+lighttpd+postgres+request tracker

Октябрь 8, 2008 at 4:27 дп (Главное) (, , , )

Потребовалось прикрутить багтрекер 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

Добавить комментарий

Fill in your details below or click an icon to log in:

Логотип WordPress.com

You are commenting using your WordPress.com account. Log Out / Изменить )

Фотография Twitter

You are commenting using your Twitter account. Log Out / Изменить )

Фотография Facebook

You are commenting using your Facebook account. Log Out / Изменить )

Connecting to %s

Follow

Get every new post delivered to your Inbox.