Я когда-то написал статью Установка и настройка Trac на FreeBSD, теперь пришло время отказываться от Apache, в пользу Nginx+PHP/FastCGI и необходимо куда-то пересаживать Trac.

Есть несколько способов помимо mod_python, я выбрал использование tracd (веб-сервер самого трака). Но если в какой-то момент времени я пойму что этот способ мне не нравится, я обязательно напишу статью про связку через FastCGI.

Tracd

Поднимаем tracd так:

tracd --daemonize --pidfile=/var/run/trac/tracd.3050 --port=3050 --protocol=http --env-parent-dir=/var/trac \
    --basic-auth=project1,/var/svn/svn-auth-file,svn --basic-auth=project2,/var/svn/svn-auth-file,svn

Где,

  • --daemonize — запуск tracd в фоне как демона;
  • --pidfile — путь до pid-файла;
  • --port — tcp-порт, который будет слушать;
  • --protocol — протокол (Варианты: http, scgi, ajp. В нашем случае http);
  • --env-parent-dir — мульти-проектовый режим, надо указать родительский каталог проектов (Еще есть «--single-env», это сингл-режим и надо указывать полный путь до проекта);
  • --basic-auth — авторизация (Формат «projectdir,htpasswd_file,realm», если юзаете --env-parent-dir, то можете только каталог проекта указывать в «projectdir», а не полный путь).

Наберите «--help» и почитайте справку по всем опциям.

Nginx

Теперь добавим в Nginx новый бекенд:

upstream trac {
    server 127.0.0.1:3050;
}

И перепишем конфиг хоста:

server {
    listen 80;
    server_name trac.example.com;

    location / {
        #auth_basic            "Password, please!";
        #auth_basic_user_file  /var/svn/svn-auth-file;

        proxy_pass      http://trac;
        proxy_set_header Host $host;
    }
}

Ну вот и все, осталось ребутнуть nginx

/usr/local/etc/rc.d/nginx restart

Скрипт управления нашим траком

Ну в довесок сделаем скрипт по управлению tracd:

#!/bin/sh
TRACD="/usr/local/bin/tracd"
TRAC="/var/trac"
USER="www"
PIDFILE="/var/run/trac/tracd.3050"
PORT="3050"
PYTHON_EGG_CACHE="/tmp/egg_cache"

start()
{
    export PYTHON_EGG_CACHE
    su $USER -c "$TRACD --daemonize --pidfile=$PIDFILE --port=$PORT --protocol=http --env-parent-dir=$TRAC \
                --basic-auth=project1,/var/svn/svn-auth-file,svn --basic-auth=project2,/var/svn/svn-auth-file,svn"
}

stop()
{
    su $USER -c "kill `cat $PIDFILE`"
}

restart()
{
    stop
    sleep 1
    start
}

$1

Так как мы будем запускать от имени www, то нам надо для каталога /var/run/trac/ указать права на запись.
Сохраним скрипт в файле «/usr/local/etc/rc.d/tracd» и запустим:

/usr/local/etc/rc.d/tracd start

Если вы увидели ошибку «This account is currently not available.», то вам надо для пользователя от которого вы запускаете tracd установить шелл. Делается через

chsh имя_пользователя

Можете почитать еще


Комментарии (22) на запись «Перенос Trac на Nginx и tracd»

» Трекбеки скрыты, показать их?
  1. artoodetoo | 31.07.2010 в 09:34

    Есть ли возможность запускать «сайты» под разными учетками? Я бы предпочел чтобы trac крутился под отдельным аккаунтом

  2. adw0rd | 31.07.2010 в 15:06

    USER="www"

    это решает проблему )

  3. artoodetoo | 31.07.2010 в 18:54

    можно писать это в секции сервер?

  4. artoodetoo | 31.07.2010 в 18:56

    туплю, сорри

  5. artoodetoo | 31.07.2010 в 20:25

    У меня не прокатывает через su почему-то. Шелл у указуемого юзера есть.

  6. artoodetoo | 31.07.2010 в 20:36

    если убрать ключ daemonize то через su запускается, но это же не метод :( гемор какой-то

  7. adw0rd | 31.07.2010 в 23:08

    А что за ОС? Какая версия?

  8. artoodetoo | 02.08.2010 в 09:13

    Debian 5. Trac 0.11. подставляю в su имя хозяина траковского проекта, он же хозяин базы svn. шелл этому пользователю разрешён. и нифига!

    сейчас у меня нет доступа к ssh, дома еще на 10 раз перепроверю все права, а то грызут смутные сомнения…

  9. adw0rd | 02.08.2010 в 11:06

    Как вариант дай мне доступ по ssh, рутовый — я помогу разобраться

  10. artoodetoo | 02.08.2010 в 13:30

    ок, как доберусь до пароля — вышлю жабером. спасибо!

  11. adw0rd | 03.08.2010 в 01:02

    Готово, теперь работает с --daemonize. Я юзеру поставил шелл через chsh (шелл: /bin/bash) и заработало, еще там путь был неверный до пароле, но видимо ты просто забыл его сменить, так как в своей строке у тебя был нормальный. Ну еще для stop () прикрутил запуск от того же юзера что и start ().

  12. adw0rd | 03.08.2010 в 10:35

    Забыл скачать, что --daemonize не запускался, так как прав небыло у пользователя на PIDFILE

  13. artoodetoo | 03.08.2010 в 10:47

    Адво, я восхищаюсь тобой!

  14. adw0rd | 03.08.2010 в 11:30

    Да ладно, что такого, я всегда помогу другу! :)

  15. artoodetoo | 03.08.2010 в 19:36

    а как указать что-то вроде Listen 127.0.0.1:3050, чтобы только через nginx была возможность обратиться к траку?

  16. adw0rd | 03.08.2010 в 20:23

    Я же написал в статье :)

  17. artoodetoo | 04.08.2010 в 09:25

    моё чсв уже близко к нулю, но я не вижу в статье как запретить обращение напрямую к 3050 мимо нгинкса

    trac.mysite.com/test/ — работает через nginx на порту 80

    trac.mysite.com:3050/test/ — тоже работает, напрямую.

  18. adw0rd | 04.08.2010 в 09:28

    Я блокирую через ipfw, тебе видимо надо через iptables

  19. Flare | 23.02.2011 в 10:41

    Но если в какой-то момент времени я пойму что этот способ мне не нравится, я обязательно напишу статью про связку через FastCGI.

    На работу через tracd все-таки нету нареканий, он норм справляется?

  20. adw0rd | 23.02.2011 в 15:02

    Нету, все прекрасно работает :)

  21. oslik | 12.10.2011 в 14:43

    А какие плюсы у этой связки перед простым tracd, без отдельного веб-сервера? Работает стабильно, для корпоративного трекера должно хватить.

  22. adw0rd | 12.10.2011 в 22:56

    Никаких

Оставить комментарий



изготовление каталогов