<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>FreeSource - Статьи/TracNginx</title>
<link>http://freesource.info/wiki/Статьи/TracNginx</link>
<description>History/revisions of FreeSource/Статьи/TracNginx</description>
<language>en-us</language>
<item>
<title>2006-03-20 17:38:24</title>
<link>http://freesource.info/wiki/Stat'i/TracNginx/show?time=2006-03-20+17%3A38%3A24</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a name=".stat_i.tracnginx" href="http://freesource.info/wiki/Stat'i/TracNginx&amp;" class="">/Статьи&amp;nbsp;/&amp;nbsp;Trac&amp;nbsp;Nginx&lt;/a> за &lt;a href="http://freesource.info/wiki/Stat'i/TracNginx?time=2006-03-20+17%3A38%3A24">2006-03-20 17:38:24&lt;/a> и &lt;a href="http://freesource.info/wiki/Stat'i/TracNginx">2006-03-20 17:39:42&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">include /etc/nginx/addon.d/A.trac.cgi.conf;&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-03-17 16:48:40</title>
<link>http://freesource.info/wiki/Stat'i/TracNginx/show?time=2006-03-17+16%3A48%3A40</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Stat'i/TracNginx&amp;" class="">/Статьи&amp;nbsp;/&amp;nbsp;Trac&amp;nbsp;Nginx&lt;/a> за &lt;a href="http://freesource.info/wiki/Stat'i/TracNginx?time=2006-03-17+16%3A48%3A40">2006-03-17 16:48:40&lt;/a> и &lt;a href="http://freesource.info/wiki/Stat'i/TracNginx?time=2006-03-20+17%3A38%3A24">2006-03-20 17:38:24&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Далее предположим, что&amp;nbsp;виртуальным путём к&amp;nbsp;CGI-скрипту &lt;tt>trac.cgi&lt;/tt> будет &lt;tt>/trac-cgi/&lt;/tt>. Этот и&amp;nbsp;другие скрипты кладутся в&amp;nbsp;папку &lt;tt>/usr/share/trac/cgi-bin/&lt;/tt> (или в&amp;nbsp;аналогичную, зависит от&amp;nbsp;установки), а&amp;nbsp;прочие статические документы (картинки и&amp;nbsp;шаблоны) &amp;ndash; в&amp;nbsp;&lt;tt>/usr/share/trac/htdocs/&lt;/tt> &amp;ndash; на&amp;nbsp;эту папку должен ссылаться путь &lt;tt>/trac/&lt;/tt>. Виртуальным путём к&amp;nbsp;FastCGI-скрипту &lt;tt>trac.fcgi&lt;/tt> и&amp;nbsp;к обработчику mod_python будем считать &lt;tt>/projects/&lt;/tt>.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Далее предположим, что&amp;nbsp;виртуальным путём к&amp;nbsp;CGI-скрипту &lt;tt>trac.cgi&lt;/tt> будет &lt;tt>/trac-cgi/&lt;/tt>. Этот и&amp;nbsp;другие скрипты кладутся в&amp;nbsp;папку &lt;tt>/usr/share/trac/cgi-bin/&lt;/tt> (или в&amp;nbsp;аналогичную, зависит от&amp;nbsp;установки), а&amp;nbsp;прочие статические документы (картинки и&amp;nbsp;шаблоны) &amp;ndash; в&amp;nbsp;&lt;tt>/usr/share/trac/htdocs/&lt;/tt> &amp;ndash; на&amp;nbsp;эту папку должен ссылаться путь &lt;tt>/trac/&lt;/tt>. Виртуальным путём к&amp;nbsp;&lt;span class="missingpage">Fast&amp;nbsp;CGI&lt;/span>&lt;a href="http://freesource.info/wiki/FastCGI/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>-скрипту &lt;tt>trac.fcgi&lt;/tt> и&amp;nbsp;к обработчику mod_python будем считать &lt;tt>/projects/&lt;/tt>.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-03-15 16:02:35</title>
<link>http://freesource.info/wiki/Stat'i/TracNginx/show?time=2006-03-15+16%3A02%3A35</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Stat'i/TracNginx&amp;" class="">/Статьи&amp;nbsp;/&amp;nbsp;Trac&amp;nbsp;Nginx&lt;/a> за &lt;a href="http://freesource.info/wiki/Stat'i/TracNginx?time=2006-03-15+16%3A02%3A35">2006-03-15 16:02:35&lt;/a> и &lt;a href="http://freesource.info/wiki/Stat'i/TracNginx?time=2006-03-17+16%3A48%3A40">2006-03-17 16:48:40&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;a name="h1600-1">&lt;/a>&lt;h1>Настройка Trac&lt;/h1>
&lt;a href="http://www.edgewall.com/trac/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/web.gif" alt="" border="0" />Trac&lt;/a> &amp;ndash; интегрированная среда управления проектом, включающая баг-трекер, страницы wiki, интерфейс к&amp;nbsp;репозитарию &lt;a href="http://subversion.tigris.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/web.gif" alt="" border="0" />Subversion&lt;/a>.&lt;br />
Trac включает в&amp;nbsp;себя консольную утилиту &lt;tt>trac-admin&lt;/tt> для&amp;nbsp;первоначального создания веб-окружения и&amp;nbsp;последующей раздачи прав, добавления/удаления компонент и&amp;nbsp;т.д. Веб-интерфейс доступен через CGI, FastCGI, mod_python или&amp;nbsp;через отдельный сервер &lt;tt>tracd&lt;/tt>.&lt;br />
Как&amp;nbsp;отмечено в&amp;nbsp;статье &lt;span class="missingpage">Php&amp;nbsp;Fast&amp;nbsp;CGI&lt;/span>&lt;a href="http://freesource.info/wiki/PhpFastCGI/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>, существует много разных веб-серверов. Поэтому здесь будут даны настройки не&amp;nbsp;только для&amp;nbsp;&lt;a href="http://httpd.apache.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/web.gif" alt="" border="0" />Apache&lt;/a>, но&amp;nbsp;и для&amp;nbsp;&lt;a href="http://sysoev.ru/nginx/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/web.gif" alt="" border="0" />Nginx&lt;/a> и&amp;nbsp;&lt;a href="http://www.0x50.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/web.gif" alt="" border="0" />Cherokee&lt;/a>.&lt;br />
&lt;small>TODO: кто&amp;nbsp;хочет, добавьте свой веб-сервер.&lt;/small>&lt;a name="h1600-2">&lt;/a>&lt;h2>Соглашения&lt;/h2>
Далее предположим, что&amp;nbsp;виртуальным путём к&amp;nbsp;CGI-скрипту &lt;tt>trac.cgi&lt;/tt> будет &lt;tt>/trac-cgi/&lt;/tt>. Этот и&amp;nbsp;другие скрипты кладутся в&amp;nbsp;папку &lt;tt>/usr/share/trac/cgi-bin/&lt;/tt> (или в&amp;nbsp;аналогичную, зависит от&amp;nbsp;установки), а&amp;nbsp;прочие статические документы (картинки и&amp;nbsp;шаблоны) &amp;ndash; в&amp;nbsp;&lt;tt>/usr/share/trac/htdocs/&lt;/tt> &amp;ndash; на&amp;nbsp;эту папку должен ссылаться путь &lt;tt>/trac/&lt;/tt>. Виртуальным путём к&amp;nbsp;&lt;span class="missingpage">Fast&amp;nbsp;CGI&lt;/span>&lt;a href="http://freesource.info/wiki/FastCGI/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>-скрипту &lt;tt>trac.fcgi&lt;/tt> и&amp;nbsp;к обработчику mod_python будем считать &lt;tt>/projects/&lt;/tt>.&lt;br />
Несомненный интерес представляет обслуживание при&amp;nbsp;одних и&amp;nbsp;тех же&amp;nbsp;настройках как&amp;nbsp;можно большего числа проектов. Поэтому будем располагать веб-окружения trac в&amp;nbsp;под-дереве папки &lt;tt>/var/lib/trac&lt;/tt> и&amp;nbsp;сошлёмся на&amp;nbsp;неё переменной &lt;tt>TRAC_ENV_PARENT_DIR&lt;/tt>. Веб-серверу необходимы права на&amp;nbsp;запись в&amp;nbsp;окружения trac. Этого можно добиться, включив псевдо-пользователя, от&amp;nbsp;имени которого запущен веб-сервер (или FastCGI-сервер), в&amp;nbsp;группу &lt;tt>tracadmin&lt;/tt>, и&amp;nbsp;разрешив этой группе запись в&amp;nbsp;&lt;tt>/var/lib/trac&lt;/tt> и&amp;nbsp;под-директории.&lt;br />
Пароли пользователей будем хранить в&amp;nbsp;&lt;tt>/etc/trac/htpasswd&lt;/tt>. &lt;span class="cite">Внимание&lt;/span> Nginx поддерживает шифрование паролей лишь методом &lt;tt>crypt&lt;/tt>.&lt;a name="h1600-3">&lt;/a>&lt;h2>CGI&lt;/h2>&lt;a name="h1600-4">&lt;/a>&lt;h3>Apache2&lt;/h3>
&lt;!--notypo-->&lt;textarea class="code" rows="12" readonly="readonly">Alias /trac/ /usr/share/trac/htdocs/
ScriptAlias /trac-cgi/ /usr/share/trac/cgi-bin/
&amp;lt;Location &amp;quot;/trac-cgi/trac.cgi&amp;quot;&amp;gt;
        SetEnv TRAC_ENV_PARENT_DIR &amp;quot;/var/lib/trac&amp;quot;
&amp;lt;/Location&amp;gt;
&amp;lt;LocationMatch &amp;quot;/trac-cgi/trac.cgi/[^/]+/login&amp;quot;&amp;gt;
        AuthType Basic
        AuthName &amp;quot;Trac projects&amp;quot;
        AuthUserFile /etc/trac/htpasswd
        Require valid-user
&amp;lt;/LocationMatch&amp;gt;&lt;/textarea>&lt;!--/notypo-->&lt;a name="h1600-5">&lt;/a>&lt;h3>Nginx&lt;/h3>
Веб-сервер nginx не&amp;nbsp;поддерживает непосредственное исполнение CGI-скриптов. Вместо этого рекомендуется пробрасывать запросы к&amp;nbsp;ним на&amp;nbsp;второй веб-сервер (&lt;em>backend&lt;/em>), запущенный на&amp;nbsp;той же&amp;nbsp;машине или&amp;nbsp;на&amp;nbsp;другой. В&amp;nbsp;приведённых настройках подразумевается, что&amp;nbsp;nginx принимает соединения на&amp;nbsp;&lt;tt>localhost:8080&lt;/tt> и&amp;nbsp;передаёт запросы CGI&amp;nbsp;на&amp;nbsp;&lt;tt>localhost:8081&lt;/tt>. Исправьте эти&amp;nbsp;значения при&amp;nbsp;необходимости.&lt;br />
&lt;!--notypo-->&lt;textarea class="code" rows="15" readonly="readonly">location /trac/ {
        alias                   /usr/share/trac/htdocs/;
}
location /trac-cgi/ {
        proxy_pass              http://localhost:8081;
        proxy_redirect          http://localhost:8081/trac-cgi/         /trac-cgi/;
        # note: use the host and the port nginx is listening on
        #       variables in regex probably do not work
        set                     $referer        $http_referer;
        if ($http_referer ~ '^http://localhost:8080(/.+)$') {
                set             $referer        http://localhost:8081$1;
        }
        proxy_set_header        Referer         $referer;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        Host            localhost:8081;
        proxy_set_header        REQUEST_METHOD  $request_method;
        proxy_set_header        REMOTE_USER     $remote_user;
        proxy_set_header        REMOTE_ADDR     $remote_addr;
        proxy_set_header        SERVER_NAME     localhost;
        proxy_set_header        SERVER_PORT     8081;
        proxy_set_header        HTTP_COOKIE     $http_cookie;
}&lt;/textarea>&lt;!--/notypo-->&lt;br />
На&amp;nbsp;момент написания этой страницы nginx ещё не&amp;nbsp;поддерживал дублирование всех настроек во&amp;nbsp;вложенные секции &lt;tt>location&lt;/tt>, поэтому их&amp;nbsp;стоит самостоятельно повторить, а&amp;nbsp;мы лишь добавим директивы авторизации, чтобы не&amp;nbsp;занимать много места.&lt;br />
&lt;!--notypo-->&lt;textarea class="code" rows="7" readonly="readonly">location ~ &amp;quot;^/trac-cgi/.*/login$&amp;quot; {
        auth_basic              &amp;quot;Trac projects&amp;quot;;
        auth_basic_user_file    /etc/trac/htpasswd;
        proxy_pass              http://localhost:8081;
        ...
}&lt;/textarea>&lt;!--/notypo-->&lt;a name="h1600-6">&lt;/a>&lt;h3>Cherokee&lt;/h3>
&lt;!--notypo-->&lt;textarea class="code" rows="15" readonly="readonly">Directory /trac {
        DocumentRoot /usr/share/trac/htdocs/
}
Directory /trac-cgi {
                Handler cgi {
                        Env     TRAC_ENV_PARENT_DIR     &amp;quot;/var/lib/trac&amp;quot;
                }
                DocumentRoot /usr/share/trac/cgi-bin/
}
Request &amp;quot;^/trac.cgi/.*/login$&amp;quot; {
                Auth Basic {
                       Name &amp;quot;Trac projects&amp;quot;
                       Method htpasswd {
                                PasswdFile /etc/trac/htpasswd
                       }
                }
}&lt;/textarea>&lt;!--/notypo-->&lt;a name="h1600-7">&lt;/a>&lt;h2>mod_python&lt;/h2>&lt;a name="h1600-8">&lt;/a>&lt;h3>Apache2&lt;/h3>
&lt;!--notypo-->&lt;textarea class="code" rows="15" readonly="readonly">Alias /trac/ /usr/share/trac/htdocs/
&amp;lt;IfModule mod_python.c&amp;gt;
    &amp;lt;Location &amp;quot;/projects&amp;quot;&amp;gt;
        SetHandler mod_python
        PythonHandler trac.web.modpython_frontend
        PythonOption TracEnvParentDir /var/lib/trac
    &amp;lt;/Location&amp;gt;
    &amp;lt;LocationMatch &amp;quot;/projects/[^/]+/login&amp;quot;&amp;gt;
        AuthType Basic
        AuthName &amp;quot;Trac projects&amp;quot;
        AuthUserFile /etc/trac/htpasswd
        Require valid-user
    &amp;lt;/LocationMatch&amp;gt;
&amp;lt;/IfModule&amp;gt;&lt;/textarea>&lt;!--/notypo-->&lt;a name="h1600-9">&lt;/a>&lt;h2>FastCGI&lt;/h2>&lt;a name="h1600-10">&lt;/a>&lt;h3>Nginx&lt;/h3>
Аналогично CGI, nginx всего лишь пробрасывает запросы на&amp;nbsp;отдельностоящий FastCGI-сервер.&lt;br />
&lt;!--notypo-->&lt;textarea class="code" rows="15" readonly="readonly">location /trac/ {
        alias           /usr/share/trac/htdocs/;
}
location /projects/ {
        fastcgi_pass    localhost:1027;
        set             $path_info      &amp;quot;&amp;quot;;
        set             $script_name    /projects;
        if ($fastcgi_script_name ~ &amp;quot;^/projects(/.+)$&amp;quot;) {
                set     $path_info      $1;
        }
        fastcgi_param   QUERY_STRING    $query_string;
        fastcgi_param   CONTENT_TYPE    $content_type;
        fastcgi_param   CONTENT_LENGTH  $content_length;
        fastcgi_param   REQUEST_METHOD  $request_method;
        fastcgi_param   REMOTE_ADDR     $remote_addr;
        fastcgi_param   SERVER_NAME     $server_name;
        fastcgi_param   SERVER_PORT     $server_port;
        fastcgi_param   HTTP_COOKIE     $http_cookie;
        fastcgi_param   SCRIPT_NAME     $script_name;
        fastcgi_param   PATH_INFO       $path_info;
}
location ~ &amp;quot;^/projects/.*/login$&amp;quot; {
        auth_basic                      &amp;quot;Trac projects&amp;quot;;
        auth_basic_user_file            /etc/trac/htpasswd;
        ...
        fastcgi_param   REMOTE_USER     $remote_user;
        ...
}&lt;/textarea>&lt;!--/notypo-->&lt;br />
Можно использовать одни и&amp;nbsp;те же&amp;nbsp;настройки &lt;tt>location&lt;/tt> для&amp;nbsp;протоколов HTTP и&amp;nbsp;HTTPS, записав их&amp;nbsp;в отдельный файл и&amp;nbsp;включив директивой &lt;tt>include&lt;/tt>. При&amp;nbsp;этом, если HTTPS обслуживается другим портом, нежели 443, потребуется дополнительный параметр, явно указывающий на&amp;nbsp;HTTPS (такова специфика trac).&lt;br />
&lt;!--notypo-->&lt;textarea class="code" rows="15" readonly="readonly">server {
        listen  8080;
        set     $https  &amp;quot;off&amp;quot;;
        include /etc/nginx/addon.d/A.trac.fcgi.conf;
        ...
    }
     server {
        listen       8082;
        ssl                  on;
        set     $https  &amp;quot;on&amp;quot;;
        include /etc/nginx/addon.d/A.trac.cgi.conf;
        include /etc/nginx/addon.d/A.trac.fcgi.conf;
        ...
    }
location /projects/ {
        ...
        fastcgi_param   HTTPS           $https;
        ...
}
location ~ &amp;quot;^/projects/.*/login$&amp;quot; {
        ...
        fastcgi_param   HTTPS           $https;
        ...
}&lt;/textarea>&lt;!--/notypo-->&lt;a name="h1600-11">&lt;/a>&lt;h3>FastCGI-сервер&lt;/h3>
Trac уже&amp;nbsp;включает в&amp;nbsp;себя поддержку FastCGI &amp;ndash; скрипт &lt;tt>trac.fcgi&lt;/tt>, но&amp;nbsp;его ещё нужно &lt;em>&amp;laquo;демонизировать&amp;raquo;&lt;/em>. Для&amp;nbsp;этих целей годится программа &lt;tt>spawn-fcgi&lt;/tt> из&amp;nbsp;&lt;a href="http://www.lighttpd.net/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/web.gif" alt="" border="0" />lighttpd 1.4.10&lt;/a>. Скомпилируем её и&amp;nbsp;назовём &lt;tt>trac-spawn-fcgi&lt;/tt>. Если &lt;tt>lighttpd&lt;/tt> уже&amp;nbsp;установлен в&amp;nbsp;системе, разумеется, этого делать не&amp;nbsp;нужно.&lt;br />
&lt;!--notypo-->&lt;textarea class="code" rows="15" readonly="readonly">$ cat &amp;lt;&amp;lt; _EOF &amp;gt; sys-socket.h
#include &amp;lt;sys/socket.h&amp;gt;
#include &amp;lt;sys/ioctl.h&amp;gt;
#include &amp;lt;netinet/in.h&amp;gt;
#include &amp;lt;netinet/tcp.h&amp;gt;
#include &amp;lt;sys/un.h&amp;gt;
#include &amp;lt;arpa/inet.h&amp;gt;
_EOF
$ cc -g \
        -DHAVE_PWD_H \
        -DHAVE_GETOPT_H \
        -DHAVE_SYS_WAIT_H \
        -DHAVE_SOCKLEN_T \
        -DHAVE_SYS_UN_H \
        -DPACKAGE_VERSION=\&amp;quot;1.4.10\&amp;quot; \
        -o trac-spawn-fcgi spawn-fcgi.c
$ sudo install -m755 trac-spawn-fcgi /usr/bin/trac-spawn-fcgi&lt;/textarea>&lt;!--/notypo-->&lt;br />
Для&amp;nbsp;автоматического запуска &lt;tt>trac.fcgi&lt;/tt> как&amp;nbsp;сервиса, можно использовать конфигурационный файл /etc/sysconfig/trac-spawn-fcgi&lt;br />
&lt;!--notypo-->&lt;textarea class="code" rows="15" readonly="readonly">## ABSOLUTE path to the spawn-fcgi binary
SPAWNFCGI=&amp;quot;/usr/bin/trac-spawn-fcgi&amp;quot;
## ABSOLUTE path to the FastCGI binary
FCGIPROGRAM=&amp;quot;/usr/share/trac/cgi-bin/trac.fcgi&amp;quot;
## bind to tcp-port
FCGIPORT=&amp;quot;1027&amp;quot;
## switch to the following user and group
USERID=nobody
#GROUPID=nobody
GROUPID=tracadmin
## trac projects root dir
TRAC_ENV_PARENT_DIR=&amp;quot;/var/lib/trac&amp;quot;
## where to write a pid
PIDFILE=/var/run/trac-spawn-fcgi/trac-spawn-fcgi.pid&lt;/textarea>&lt;!--/notypo-->&lt;br />
и&amp;nbsp;инит-скрипт /etc/init.d/trac-spawn-fcgi&lt;br />
&lt;!--notypo-->&lt;textarea class="code" rows="15" readonly="readonly">#!/bin/sh
#
# trac-spawn-fcgi       Spawn a trac.fcgi process.
#
# chkconfig: 345 90 10
# description:  Starts Trac FastCGI python script \
#               for use with web-servers.
# processname: /usr/bin/trac-spawn-fcgi
# config: /etc/sysconfig/trac-spawn-fcgi
# pidfile: /var/run/trac-spawn-fcgi.pid
# Do not load RH compatibility interface.
WITHOUT_RC_COMPAT=1
# Source function library.
. /etc/init.d/functions
PYTHON=/usr/bin/python
SPAWNFCGI=/usr/bin/trac-spawn-fcgi
PIDFILE=/var/run/trac-spawn-fcgi/trac-spawn-fcgi.pid
LOCKFILE=/var/lock/subsys/trac-spawn-fcgi
RETVAL=0
# Source config
SourceIfNotEmpty /etc/sysconfig/trac-spawn-fcgi
[ -x &amp;quot;$SPAWNFCGI&amp;quot; ] || exit
[ -x &amp;quot;$FCGIPROGRAM&amp;quot; ] || exit
start()
{
        ALLOWED_ENV=&amp;quot;TRAC_ENV TRAC_ENV_PARENT_DIR&amp;quot;
        for i in $ALLOWED_ENV; do
                test -n &amp;quot;${!i}&amp;quot; &amp;amp;&amp;amp; export $i=${!i}
        done
        FCGIBASENAME=`basename $FCGIPROGRAM`
        start_daemon --pidfile &amp;quot;$PIDFILE&amp;quot; --lockfile &amp;quot;$LOCKFILE&amp;quot; --expect-user &amp;quot;$USERID&amp;quot; --name &amp;quot;$FCGIBA
SENAME&amp;quot; -- &amp;quot;$SPAWNFCGI&amp;quot; -p &amp;quot;$FCGIPORT&amp;quot; -f &amp;quot;$FCGIPROGRAM&amp;quot; -P &amp;quot;$PIDFILE&amp;quot; -u &amp;quot;$USERID&amp;quot; -g &amp;quot;$GROUPID&amp;quot;
        RETVAL=$?
        return $RETVAL
}
stop()
{
        stop_daemon --pidfile &amp;quot;$PIDFILE&amp;quot; --lockfile &amp;quot;$LOCKFILE&amp;quot; --expect-user &amp;quot;$USERID&amp;quot; -- &amp;quot;$PYTHON&amp;quot;
        RETVAL=$?
        return $RETVAL
}
restart()
{
        stop
        start
}
reload()
{
        msg_reloading template
        stop_daemon --pidfile &amp;quot;$PIDFILE&amp;quot; --expect-user &amp;quot;$USERID&amp;quot; -HUP -- &amp;quot;$PYTHON&amp;quot;
        RETVAL=$?
        return $RETVAL
} 
# See how we were called.
case &amp;quot;$1&amp;quot; in
        start)
                start
                ;;
        stop)
                stop
                ;;
        reload)
                restart
                ;;
        restart)
                restart
                ;;
        condstop)
                if [ -e &amp;quot;$LOCKFILE&amp;quot; ]; then
                        stop
                fi
                ;;
        condrestart)
                if [ -e &amp;quot;$LOCKFILE&amp;quot; ]; then
                        restart
                fi
                ;;
        condreload)
                if [ -e &amp;quot;$LOCKFILE&amp;quot; ]; then
                        restart
                fi
                ;;
        status)
                status --pidfile &amp;quot;$PIDFILE&amp;quot; --expect-user &amp;quot;$USERID&amp;quot; -- &amp;quot;$PYTHON&amp;quot;
                RETVAL=$?
                ;;
        *)
                msg_usage &amp;quot;${0##*/} {start|stop|reload|restart|condstop|condrestart|condreload|status}&amp;quot;
                RETVAL=1
esac
exit $RETVAL&lt;/textarea>&lt;!--/notypo-->&lt;a name="h1600-12">&lt;/a>&lt;h2>Дополнения&lt;/h2>
&lt;small>TODO: описать тестирование проектов модулем python-module-bitten&lt;/small>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;a name="h1600-1">&lt;/a>&lt;h2>Trac (&lt;span class="missingpage">Fast&amp;nbsp;CGI&amp;nbsp;/&amp;nbsp;CGI&lt;/span>&lt;a href="http://freesource.info/wiki/FastCGI/CGI/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>) + &lt;span class="missingpage">Nginx&amp;nbsp;/&amp;nbsp;Cherokee&lt;/span>&lt;a href="http://freesource.info/wiki/Nginx/Cherokee/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>&lt;/h2>
Как&amp;nbsp;отмечено в&amp;nbsp;статье &lt;span class="missingpage">Php&amp;nbsp;Fast&amp;nbsp;CGI&lt;/span>&lt;a href="http://freesource.info/wiki/PhpFastCGI/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>, кроме Apache существуют и&amp;nbsp;другие веб-сервера.&lt;br />
Например, &lt;a href="http://sysoev.ru/nginx/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/web.gif" alt="" border="0" />Nginx&lt;/a> и&amp;nbsp;&lt;a href="http://www.0x50.org/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/web.gif" alt="" border="0" />Cherokee&lt;/a>. Nginx помимо прочих преимуществ успешно поддерживает &lt;span class="missingpage">Fast&amp;nbsp;CGI&lt;/span>&lt;a href="http://freesource.info/wiki/FastCGI/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>, а&amp;nbsp;Cherokee &amp;ndash; простой интерфейс CGI, которого нет&amp;nbsp;в&amp;nbsp;Nginx. На&amp;nbsp;их основе можно собрать связку frontend-backend, справляющуюся с&amp;nbsp;обоими методами.&lt;a name="h1600-2">&lt;/a>&lt;h3>Черновик&lt;/h3>
Это&amp;nbsp;черновик пошаговой настройки (указанные пакеты отправлены в&amp;nbsp;ALT Linux Master 2.4 backports).&lt;br />
&lt;ol type="1">&lt;li>  Установить trac-spawn-fcgi, trac, trac-fcgi, nginx.
&lt;div class="indent">1а. Опционально (если нужен CGI) установить cherokee.&lt;br />
1б. Опционально установить дополненительные модули к&amp;nbsp;trac,  например, python-module-bitten.&lt;br />
&lt;/div>&lt;/li>&lt;li> Указать группу для&amp;nbsp;запуска trac.fcgi в&amp;nbsp;файле /etc/sysconfig/trac-spawn-fcgi. Например, tracadmin.
&lt;/li>&lt;li> Этой группе дать права на&amp;nbsp;запись в&amp;nbsp;директорию /var/lib/trac и&amp;nbsp;в существующие в&amp;nbsp;ней проекты.
&lt;/li>&lt;li> Настроить nginx (и cherokee) по&amp;nbsp;своему усмотрению. Как&amp;nbsp;минимум, указать нужный порт и&amp;nbsp;имя сервера.
&lt;/li>&lt;li> Скопировать прилагаемые к&amp;nbsp;trac примеры A.trac.cgi.conf и/или A.trac.fcgi.conf в&amp;nbsp;/etc/nginx/addon.d и&amp;nbsp;в /etc/cherokee/addon.d. Подлючить эти&amp;nbsp;файлы, убрав комментарий перед include в&amp;nbsp;/etc/nginx/nginx.conf и&amp;nbsp;в /etc/cherokee/sites-enabled/default.
&lt;/li>&lt;li> Для&amp;nbsp;аутентификации в&amp;nbsp;trac создайте файл паролей /etc/trac/htpasswd. Внимание! Nginx поддерживает шифрование паролей только методом crypt!
&lt;/li>&lt;li> Запустите nginx, cherokee, trac-spawn-fcgi и&amp;nbsp;откройте в&amp;nbsp;браузере один из&amp;nbsp;проектов. По&amp;nbsp;умолчанию дерево проектов в&amp;nbsp;&lt;span class="missingpage">Fast&amp;nbsp;CGI&lt;/span>&lt;a href="http://freesource.info/wiki/FastCGI/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a> начинается с&amp;nbsp;/projects/, а&amp;nbsp;в случае CGI&amp;nbsp;&amp;ndash; с&amp;nbsp;/trac-cgi/trac.cgi.&lt;/li>&lt;/ol>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-03-15 15:59:39</title>
<link>http://freesource.info/wiki/Stat'i/TracNginx/show?time=2006-03-15+15%3A59%3A39</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Stat'i/TracNginx&amp;" class="">/Статьи&amp;nbsp;/&amp;nbsp;Trac&amp;nbsp;Nginx&lt;/a> за &lt;a href="http://freesource.info/wiki/Stat'i/TracNginx?time=2006-03-15+15%3A59%3A39">2006-03-15 15:59:39&lt;/a> и &lt;a href="http://freesource.info/wiki/Stat'i/TracNginx?time=2006-03-15+16%3A02%3A35">2006-03-15 16:02:35&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Это&amp;nbsp;черновик пошаговой настройки (указанные пакеты отправлены в&amp;nbsp;ALT Linux Master 2.4 backports).&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Это&amp;nbsp;черновик пошаговой настройки.&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>
