В статье речь пойдет о том, как связать вместе распределённую систему управления версиями файлов [[http://ru.wikipedia.org/wiki/Git Git]] и средство управления проектами и отслеживания ошибок в программном обеспечении [[http://ru.wikipedia.org/wiki/Trac Trac]] на Fedora 18 используя [[http://ru.wikipedia.org/wiki/Mod_wsgi mod_wsgi]].
В более старых версиях Fedora эта связка работала на mod_python. Официально, этот проект умер. Вот и пришлось искать альтернативы.
Все следующие действия будут происходить под учетной записью root.
Hostname нашей станции: trac-server.loc
Установим все необходимые пакеты:
yum install httpd git trac trac-git-plugin mod_wsgi firewalld \
php php-pear php-mysql php-mbstring python
Если у нас не установлен DNS сервер, редактируем файл /etc/hosts. Добавим в него имя нашего хоста.
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 trac-server.loc
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
Настроим виртуальный хост апача (/etc/httpd/conf.d/vhosts.conf):
ServerName trac-server.loc
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerPath /html
ServerName trac-server.loc
ServerAlias trac-server.loc
ServerAlias www.trac-server.loc
</VirtualHost>
Включаем поддержку коротких тегов:
sed -i 's/^short_open_tag = Off/short_open_tag = On/g' /etc/php.ini
Если нужен доступ к ресурсам трэк сервера из-вне, открываем порт в файерволе:
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
Включаем и запускаем apache:
systemctl enable httpd
systemctl start httpd
Создаем директории для нашего трэк сервера и гит репозиторий:
install -d /srv/{trac,git}
Создадим WSGI скрипт (/srv/trac/trac.wsgi):
#!/usr/bin/env python
import os
def application(environ, start_request):
os.environ['TRAC_ENV_PARENT_DIR'] = '/srv/trac'
os.environ['PYTHON_EGG_CACHE'] = '/tmp/egg-cache'
from trac.web.main import dispatch_request
return dispatch_request(environ, start_request)
Создадим файл конфигурации (/etc/httpd/conf.d/trac.conf):
WSGIScriptAlias /trac /srv/trac/trac.wsgi
<Directory /srv/trac>
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Directory>
<LocationMatch "/trac/[^/]+/login">
AuthType Digest
AuthName "Trac"
AuthUserFile /srv/trac/.htpasswd
Require valid-user
</LocationMatch>
Создадим файл конфигурации (/etc/httpd/conf.d/git.conf):
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /srv/git/$1
AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /srv/git/$1
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
Alias /git /srv/git
<Directory /srv/git>
Options Indexes FollowSymLinks Multiviews
AllowOverride All
Require all granted
</Directory>
<LocationMatch "^/git">
DAV on
AuthType Digest
AuthName "Git"
AuthUserFile /srv/git/.htpasswd
Require valid-user
</LocationMatch>
Создадим файл, который будет содержать пользователей и пароли для доступа к trac серверу.
У меня таких файлов два, отдельно для доступа к trac и отдельно для доступа к git репозиториям.
htdigest -c /srv/trac/.htpasswd 'Trac' admin
htdigest -c /srv/git/.htpasswd 'Git' admin
Этими командами мы создали пользователя "admin". Для дальнейшего добавления пользователей или для смены паролей, используется та же команда, только без "-c".
На этом этапе системная конфигурация закончена.
Добавим новый проект под кодовым названием pr1:
trac-admin /srv/trac/pr1 initenv
install -d /srv/git/pr1/.git
git --bare init /srv/git/pr1/.git
Подкорректируем настройки нашего проекта в файле (/srv/trac/pr1/conf/trac.ini):
Включим поддержку git путем добавления в конец файла двух строчек:
[components]
tracext.git.* = enabled
И корректированием:
sed -i 's/^repository_type =.*$/repository_type = git/g' /srv/trac/pr1/conf/trac.ini
sed -i 's/^repository_dir =.*$/repository_dir = \/srv\/git\/pr1\/.git/g' /srv/trac/pr1/conf/trac.ini
Теперь дадим пользователю "admin" привелегии trac админа:
trac-admin /srv/trac/pr1 permission add admin TRAC_ADMIN
Если мы не хотим запретить доступ к нашему трэк серверу не авторизированным пользователям, то:
trac-admin /srv/trac/pr1 permission remove anonymous '*'
Ну и в конце подкорректируем права доступа к директориям, где будут храниться данные:
chown -R apache:apache /srv/{trac,git}
Перезагрузим apache:
systemctl httpd restart
Теперь можно зайти на trac сервер в наш проект по адресу:
http://trac-server.loc/trac/pr1
Для работы с git используйте адрес:
http://trac-server.loc/git/pr1
Например при команде:
git clone http://trac-server.loc/git/pr1
Будет запрошено имя пользователя и пароль для авторизации.
URL:
Обсуждается: http://www.opennet.me/tips/info/2740.shtml