Как правильно обслуживать репозитории Mercurial в браузере? - PullRequest
2 голосов
/ 08 сентября 2010

Я настраиваю свой внештатный сервер, который будет использовать Mercurial для управления всеми версиями. У каждого проекта будет своя папка с собственным хранилищем. Который я могу затем клонировать со своего домашнего компьютера, рабочего компьютера или любого другого компьютера, перейдя в эту конкретную папку.

Я хочу разместить эти репозитории в веб-браузере, чтобы я мог просматривать их в любое время. Я посмотрел вокруг и увидел это: https://www.mercurial -scm.org / wiki / HgServeNginx

Похоже, что он идет по правильному пути, так как я все равно буду использовать Nginx на этом сервере. Но мне любопытно узнать, как бы я правильно это настроил. Что мне нужно сделать, чтобы эффективно обслуживать несколько хранилищ на моем сервере через веб-браузер?

Любая помощь или опытное понимание этого было бы очень полезно, чтобы убедиться, что я делаю это правильно.

Большое спасибо.

1 Ответ

1 голос
/ 08 сентября 2010

Используя эту ссылку, вы можете настроить столько мест, сколько у вас будет репо. В каждом каталоге репозитория вам нужно запустить hg serve:

cd repos/repo1;        
nohup hg serve -p 8000 &
cd repos/repo2;
nohup hg serve -p 8001 &

Тогда вы можете просто перенаправить все запросы через nginx на запущенные hg-серверы. Это не очень хороший способ. Этот метод требует ручного редактирования конфигурации nginx, запуска hg serve и т. Д. Но этот метод позволяет вам создавать отдельные параметры аутентификации для каждого репо. Поэтому, если вы планируете делиться репо с клиентом, вы можете легко управлять этим.

Вместо этого вы можете использовать специальный скрипт, который поставляется вместе с mercurial - hgwebdir. Подробную информацию вы можете оштрафовать на этой странице: https://www.mercurial -scm.org / wiki / PublishingRepositories # Publishing_Multiple_Repositories

ОБНОВЛЕНИЕ: У меня есть mercurial версии 1.6 на сервере, и для веб-интерфейса runnung repo мы используем этот скрипт hgwebdir.py :

#!/usr/bin/env python
import sys 
import os
os.environ["HGENCODING"] = "UTF-8"
from mercurial.hgweb.hgwebdir_mod import hgwebdir
from mercurial.hgweb.request import wsgiapplication
from flup.server.fcgi import WSGIServer

def make_web_app():
   return hgwebdir('/home/hg/hgwebdir.conf')

WSGIServer(wsgiapplication(make_web_app),
       umask=0000,
       bindAddress='/home/hg/hg.sock').run()

hgwebdir.conf выглядит так:

[web]
allow_push = some_useronly
baseurl = 
push_ssl = false
[collections]
/home/hg/repos = /home/hg/repos

Для запуска: nohup hgwebdir.py &, вам необходим модуль python flup, поэтому: easy_install flup

Связанная часть nginx.conf:

server {
    listen 80;
    server_name hg.example.com;
    gzip off;
    include fastcgi_params;
    location / {
        client_max_body_size 30m;
        auth_basic  "Restricted Area";
        auth_basic_user_file /home/hg/hg.password;
        fastcgi_pass unix:/home/hg/hg.sock;
    }
}
...