time

Установка связки trac + git + nginx

Узелок на память про установку багтрекера trac + git-репозитория, раздача статики через nginx. Дело не хитрое, но со временем подзабывается последовательность действий. В качестве хранилище будет mysql, trac будет установлен в virtualenv под Ubuntu Server.

Настройка MySQL

Создание БД и пользователя

# mysql -u root -p

CREATE DATABASE trac DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL ON trac.* TO trac@localhost IDENTIFIED BY '_PASSWORD_';

Строка подключения (DSN) для MySQL

mysql://trac:_PASSWORD_@localhost/trac

Установка Trac

Установка pip и dev-файлов для MySQL

sudo apt-get install python-setuptools libmysqlclient-dev
sudo easy_install pip 

Установка trac и зависимостей (предполагается что virtualenv установлен и активировано рабочие окружение)

pip install babel docutils pygments pytz mysql-python 
pip install trac

Создадим директорию для будущих trac-окружений и тестовый проект. Утилита trac-admin спросит некоторые параметры, среди которых строка подключения к БД (DSN), пример для mysql приведен выше.

sudo mkdir /home/www/tracs/
sudo -uwww trac-admin /home/www/tracs/testproj initenv

Основной этап установки окончен. Детали настройки внешнего вида описаны в wiki, также доступны разные темы.

На этом этапе можно запустить встроенный в trac веб-сервер (без возможности залогинится в админку)

sudo -uwww tracd -p 8080 /home/www/tracs/testproj

Следующий этап - это настройка авторизации пользователей, подключение git-репозитория и раздача статики с помощью nginx.

Авторизация пользователей

Добавим admin'а для управления установленной версией trac'a

sudo trac-admin /home/www/tracs/testproj permission add proft TRAC_ADMIN 

Для настройки digest-аутентификации сгенерируем пароль для пользователя с помощью одного из способов описанных в UsingAuthentication, я использовал приведенный python-скрипт (у меня не установлен apache)

# cd /home/www/tracs/

python trac-digest.py -u proft -p password >> testproj/conf/users.htdigest

Запустим сервер tracd с возможностью авторизации пользователей из файла users.htdigest

tracd -p 8000 -s --auth="testproj,/home/www/tracs/testproj/conf/users.htdigest,trac" /home/www/tracs/testproj

Проверим, зайдя на http://127.0.0.1:8000/login/.

Для авторизации можно использовать аккаунты из Django.

GIT-репозиторий

У меня git-репозитория настроен с помощью gitolite.

Установка дополнения для trac

pip install http://github.com/hvr/trac-git-plugin/tarball/master

Отредактируем trac.ini, обновив секцию trac и добавив две новых: components и git.

[components]
tracext.git.* = enabled

[trac]
repository_dir = /home/git/repositories/testproj.git
repository_type = git

[git]
cached_repository = true
persistent_cache = true
shortrev_len = 6
wiki_shortrev_len = 7
git_bin = /usr/bin/git
git_fs_encoding = latin1
trac_user_rlookup = true
use_committer_id = false
use_committer_time = false

nginx как frontend

Запустим настроенное выше trac-окружение с помощью команды

tracd -d -p 3050 --protocol=http -s /home/www/tracs/testproj

Пример настроек для хоста под nginx'ом

upstream testproj_tracd {
    server  127.0.0.1:3050;
}

server {
    listen 127.0.0.1:80;
    server_name vb.local;

    access_log      /var/log/nginx/testproj.access.log;
    error_log       /var/log/nginx/testproj.error_log;

    location / { 
        #auth_basic "Secure Login";
        #auth_basic_user_file /home/www/tracs/testproj/conf/users.basic;

        proxy_pass http://testproj_tracd;
        include /etc/nginx/proxy_params;
    }   

    location ~ (/.*)?/chrome/site/ {
        rewrite (/.*)?/chrome/site/(.*) /$1/htdocs/$2 break;
        root    /home/www/tracs/testproj;
    }   

} 

Дополнительный материал

blog comments powered by Disqus