Назад | Перейти на главную страницу

Настроить mercurial через HTTP

Не могли бы вы дать несколько советов по настройке Mercurial через HTTP / HTTPS? Я настраиваю сервер разработки (Debian), на котором я хочу создать ртутный репозиторий и отправить изменения на сервер. Мне нужно пройти аутентификацию, чтобы предотвратить ненужный доступ.

Заранее спасибо.

Я думаю, что Apache - отличный способ поделиться репозиториями hg. Сценарий hgweb.wsgi не только дает возможность запускать несколько репозиториев, но и позволяет разработчикам удобно ссылаться на исходный код проекта по пути или ревизии из окончательного источника.

Следующая процедура позволит легко опубликовать репозиторий и сделать его доступным через https-соединение для аутентифицированных пользователей.

Прежде всего, я предлагаю сделать клон вашего репо без локального файлового каталога.

hg clone -U <myproject> <myproject_to_serve>

Затем (используя конфигурацию WSGI, что приятно и просто), сделайте следующее:

Переместите репо в удобное место, откуда оно будет обслуживаться:

mv <myproject_to_serve> /var/www/hg/<myproject_to_serve>

Убедитесь, что репозиторий доступен для чтения / записи пользователю веб-сервера:

chown -R www-data:www-data /var/www/hg/<myproject_to_serve>

Теперь настройте права чтения / записи для пользователей проекта и предоставьте некоторую информацию для списка проекта на домашней странице вашего сервера:

vim /var/www/hg/myproject_to_serve>/.hg/hgrc
[web]
description = 'This is my new web-enabled project <myproject>'
contact = support@global.com
# consider limiting push usage to only a subset of users
allow_push = *

Теперь настройте WSGI

vim /var/www/hg/hgweb.config
[paths]
/myproj = /var/www/hg/my_project_to_serve

Теперь настройте apache

<VirtualHost *:443>

    ServerName hg.mydomain.net
    ServerAdmin webmaster@mydomain.net

    ErrorLog /var/www/mydomain/logs/hg_error_log
    CustomLog /var/www/mydomain/logs/hg_access_log common

    SSLEngine on
    SSLCertificateFile /etc/ssl/mydomain_net.crt
    SSLCertificateKeyFile /etc/ssl/mydomain_net.key

    DocumentRoot "/var/www/hg/"

    <Location "/hg">
        SetHandler None
    </Location>

    # path to provided hgweb.wsgi script
    WSGIScriptAlias / /var/www/hg/scripts/hgweb.wsgi 

    <Location / >
        AuthType Digest
        AuthName "MySoftware"
        AuthUserFile /home/software/software_web_permissions
        Require valid-user
    </Location>

</VirtualHost>

Вышеупомянутое требует наличия:

  1. Скрипт hgweb.wsgi (который поставляется со стандартной установкой Mercurial, скажем, в Debian) где-то в удобном месте
  2. Файл AuthUserFile в формате apache htdigest для создания пользователей, прошедших проверку подлинности.

Серфинг на hg.mydomain.net покажет вам красиво отформатированный список доступных проектов. hg.mydomain.net/myproj покажет вам, после успешной аутентификации, текущий статус вашего проекта в соответствии с /var/www/hg/<myproject_to_serve> репо.

Достаточно хорошее резюме вариантов, а также их преимущества / недостатки доступны на меркуриал вики.

Моя рекомендация, если вам действительно не нужен какой-либо веб-интерфейс, - использовать ssh вместо этого в качестве транспортного протокола. Это даже не требует реальной настройки, все, что вам нужно, это ssh и Mercurial установлен.

Один пример: чтобы клонировать удаленное репо с именем hgtest, который находится по адресу ~username/hgtest в текущий каталог, используйте команду

hg clone ssh://username@example.com/hgtest