Предоставление web-интерфейса к Mercurial-репозиторию с помощью Apache, mod_wsgi с ограничением доступа

Ставим всё что надо, в убунту это выглядит примерно так:

aptitude install libapache2-mod-wsgi mercurial

Требуемые файлы:

  • wsgi-скрипт меркуриала
  • конфиг для wsgi-скрипта, здесь задаются адреса репозитариев
  • конфиг апача, у меня /etc/apache2/sites-enabled/hgwebdir
  • один или несколько репозитариев mercurial

hgwebdir.wsgi — где-то в файловой системе

#!/usr/bin/python

import os
os.environ['HGENCODING'] = 'utf-8'

from mercurial.hgweb.hgwebdir_mod import hgwebdir
from mercurial.hgweb.request import wsgiapplication

path = os.path.dirname(os.path.abspath(__file__))
application = hgwebdir(path+'/hgwebdir.config')

hgwebdir.config — в той же папке, что и hgwebdir.wsgi

[web]
style = coal

[paths]
pybb = /home/denger/work/pybb
byteflow = /home/denger/work/byteflow

Апач у меня почти дефолтный, ставился из пакетов. Файл default в папке sites-enabled я переименовал (на самом деле там сделано через симлинки, но это не важно).

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/

    WSGIProcessGroup hgdir
    WSGIDaemonProcess hgdir user=denger group=www-data threads=2 maximum-requests=1000

    WSGIScriptAlias /hg /home/denger/work/hgwebdir.wsgi
<Location /hg>
        AuthType Basic
        AuthName "Restricted Files"
        AuthUserFile /home/denger/hgpasswd
        Require valid-user
</Location>
</VirtualHost>

Создаётся файл с паролями примерно так:

denger@bioreactor:~$ htpasswd -c hgpasswd denger
New password:
Re-type new password:
Adding password for user denger
denger@bioreactor:~$ htpasswd hgpasswd user
New password:
Re-type new password:
Adding password for user user

Пароль запрашивается как через браузер, так и при работе с репозитарием из командной строки.

denger@bioreactor:~/tmp$ hg clone http://localhost/hg/pybb/
destination directory: pybb
http authorization required
realm: Restricted Files
user: anonymous
password:
abort: authorization failed
denger@bioreactor:~/tmp$ hg clone http://localhost/hg/pybb/
destination directory: pybb
http authorization required
realm: Restricted Files
user: denger
password:
requesting all changes
adding changesets
adding manifests
adding file changes
added 141 changesets with 816 changes to 310 files
updating working directory
145 files updated, 0 files merged, 0 files removed, 0 files unresolved
denger@bioreactor:~/tmp$ cd pybb
denger@bioreactor:~/tmp/pybb$ hg inc
comparing with http://localhost/hg/pybb/
http authorization required
realm: Restricted Files
user: denger
password:
searching for changes
no changes found

Можно использовать без авторизации, просто удаляется весь блок из конфига апача (файл с паролями разумеется тоже не требуется). Можно ставить в корень сайта, тогда в директивах WSGIScriptAlias /hg ... и вместо «/hg» используется «/».

LinkedIn

3 комментария

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Огромное спасибо — очень пригодилось!

Цель — удобный доступ к репозитариям.Задача — веб-интерфейс к нескольким репозитариям, с возможностью коммита.Немного допишу, как только смогу зайти через openid, сейчас не пускает: (

Странная статья. Ни цели действий, ни задач, которые решаются. Даже на методичку (howto) не тянет...

Подписаться на комментарии