The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Связка Git и Trac на Fedora 18 с использованием mod_wsgi
В статье речь пойдет о том, как связать вместе распределённую систему
управления версиями файлов Git и средство управления проектами и
отслеживания ошибок в программном обеспечении Trac на Fedora 18 используя 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

Будет запрошено имя пользователя и пароль для авторизации.
 
08.02.2013 , Автор: Denis Salmanovich
Ключи: git, trac, fedora, mod_wsgi / Лицензия: CC-BY
Раздел:    Корень / Программисту и web-разработчику / Системы контроля версий и управления исходными текстами

Обсуждение [ RSS ]
  • 1.1, V (??), 00:09, 08/02/2013 [ответить]  
  • +/
    А зачем PHP устанавливается?
     
     
  • 2.2, V (??), 00:41, 08/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    для красоты
     

  • 1.3, Денис (??), 12:36, 11/02/2013 [ответить]  
  • +/
    запускаем tracd м не паримся. не?
     
  • 1.6, Uku Buku (?), 21:35, 12/03/2013 [ответить]  
  • +/
    Trac неплохо поднимается на связке tracd + nginx
    Вся авторизация перекладывается на nginx+ssl.
    Очень эффективно и не надо даже ставить тяжёлый апач.
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру