Ключевые слова:mercurial, cvs, http, nginx, (найти похожие документы)
From: DebianWorld.Ru <debian.world.ru@gmail.com.>
Newsgroups: email
Date: Mon, 11 Nov 2009 17:02:14 +0000 (UTC)
Subject: Установка и настройка доступа к mercurial по http через nginx в Debian/Ubuntu
Оригинал: http://debianworld.ru/articles/ustanovka-i-nastrojka-dostupa-k-mercurial-po-http-cherez-nginx-v-debian-ubuntu/
Введение
Mercurial - это кросплатформенная распределённая система управления
версиями (DCVS). Основная часть кода написана на языке Python, а
наиболее чувствительные к производительности части выполнены в качестве
Python-расширений на C. В настоящее время Mercurial используют такие
проекты, как: Python, Netbeans, Mozilla и Mozdev, OpenOffice.org и
многие другие.
Одной из самых распространенных задач, возникающих после установки
Mercurial является настройка доступа к репозиториям по http-протоколу.
Эта задача с точки зрения "Организации доступа на чтение к Mercurial через Apache/mod_wsgi").
Далее будет описан вариант доступа на чтение/запись с помощью
http-сервера nginx.
Общая схема развертывания следующая:
* http-сервер nginx будет принимать все соединения с Mercurial
* для запросов на изменение nginx будет запрашивать логин/пароль
* запросы на чтение и успешные запросы на запись будут проксироваться
на встроенный в Mercurial http-сервер
Установка Nginx, Mercurial
В первую очередь необходимо установить http-сервер nginx и mercurial:
$ sudo aptitude install nginx mercurial
Настройка Mercurial
После того, как система контроля установлена, необходимо обеспечить
безопасный доступ к репозиториям.
Пользователь и директория для репозиториев Mercurial
В первую очередь, необходимо создать нового пользователя, в домашнем
каталоге которого будут находиться все репозитории mercurial:
$ sudo adduser --home /home/hg --disabled-password hg
Далее, необходимо создать директории для репозиториев и лог-файлов:
$ sudo -u hg mkdir /home/hg/repos
$ sudo -u hg mkdir /home/hg/logs
И в конце, выставить права доступа на директории:
$ sudo chmod u=rwx,g=rwx,o= -R /home/hg
Не лишним так же будет добавить информацию о пользователе mercurial:
$ sudo su - hg
$ echo "[ui]" > ~/.hgrc
$ echo "username = DebianWorld.Ru <debian.world.ru@gmail.com.>" >> ~/.hgrc
Новый репозиторий Mercurial
После того, все подготовительный процедуры выполнены, можно создавать
репозиторий и делать первую правку в нем
# Все действия будут выполняться от пользователя hg
$ sudo su - hg
# Создается новый репозиторий
$ hg init ~/repos/Debian.World.Ru
# Вносится изменение - создается новый файл
$ cd ~/repos/Debian.World.Ru/
$ echo "Mercurial on DebianWorld.Ru" > read.me
# Проверка видимости изменений
$ hg status
? read.me
# Добавление файла в репозиторий
$ hg add
adding read.me
# Внесение изменений в проект
$ hg ci -m "init revision"
Настройка доступа к репозиториям mercurial
После того, как репозиторий создан и сделаны первые правки, можно
приступать к настройке доступа по http. В первую очередь создается файл
настроек для публикации проектов:
# продолжается выполнение команд от пользователя hg
$ vim ~/repos/hgweb.config
В него вносится информация о том, где располагаются имеющиеся
репозитотрии (в нашем случае он один, но теоретически их может быть много):
[collections]
/home/hg/repos = /home/hg/repos
Левая часть - это префикс пути, который надо убрать из URL адреса.
Правая часть - полный путь к каталогу, где содержатся репозитории.
Например, если была бы строка / = /home/hg/repos, то URL репозитория был
бы http://hg.debianworld.ru/home/hg/repos/DebianWorld.Ru. А так,
указывая, что надо исключать /home/hg/repos, новый URL репозитория будет
http://hg.debianworld.ru/DebianWorld.Ru.
Далее, в проекте пишем права доступа. Открываем файл:
# продолжается выполнение команд от пользователя hg
$ vim ~/repos/Debian.World.Ru/.hg/hgrc
Пишем:
[web]
style = gitweb
push_ssl = false
allow_push = *
Таким образом:
* отключается SSL (чего вполне достаточно для большинства не
коммерческих проектов)
* позволяется выполнять изменения всем пользователям, так как функцию
аутентификации берет на себя nginx (см. далее)
Настройка Nginx
Следующим шагом, необходимо настроить nginx на прием соединений к
репозиториям, проверку логина/пароля при внесении изменений и
проксирование содинение на встроенный сервер Mercurial.
Создание виртуального хоста Nginx
Чтобы создать виртуальный хост, необходимо создать файл:
$ sudo vim /etc/nginx/sites-available/hg.debianworld.ru
И вписать в него:
upstream backend {
# адрес mercurial http-севера
server 127.0.0.1:8080;
}
server {
listen 80;
server_name hg.debianworld.ru;
access_log /home/hg/logs/nginx_access.log;
error_log /home/hg/logs/nginx_error.log crit;
location / {
# ограничение доступа на запись
limit_except GET {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.hg.htpasswd;
proxy_pass http://backend;
}
proxy_pass http://backend;
}
}
Далее, необходимо включить хост:
$ sudo ln -s /etc/nginx/sites-available/hg.debianworld.ru \
/etc/nginx/sites-enabled/hg.debianworld.ru
Чтобы новый хост заработал, необходимо перестартовать nginx:
$ sudo /etc/init.d/nginx restart
Настройка учетных записей (htpasswd)
Следующим шагом необходимо заполнить файл учетных записей, которым
позволено вносить изменения в репозиторий. Делается это с помощью
утилиты htpasswd. Если apache никогда не устанавливался на машине, то
необходимо установить пакет apache2-utils, чтобы была возможность
работать с этой утилитой:
$ sudo aptitude install apache2-utils
После того, как пакет поставлен, можно создавать пользователей:
# Создается файл учетных записей и вносится пользователь hgviewer
$ sudo htpasswd -c /etc/nginx/.hg.htpasswd hgviewer
# Вносится пользователь hgother
$ sudo htpasswd /etc/nginx/.hg.htpasswd hgother
Запуск встроенного сервера Mercurial
После того, как настроен mercurial,nginx и создан файл паролей, можно
запускать встроенный в mercurial http-сервер на 8080 порту:
$ sudo -u hg hg serve --webdir-conf /home/hg/repos/hgweb.config \
--address 127.0.0.1 --port 8080 --encoding utf8
Сервер запускается от пользователя hg, чтобы был доступ к репозиторию и
правки вносились от его имени. указывается файл конфигурации доступных
проектов. Для корректного отображения русских символов указывается
кодировка utf8. Кроме того, если добавить опцию "--daemon", то сервер
Mercurial будет работать как демон.
Проверка доступа к репозиторию по http
Все ниже следующие операции будут выполняться на удаленной машине, то
есть не на той, где расположен Mercurial.
Получение исходного кода:
$ hg clone http://hg.debianworld.ru/Debian.World.Ru/
destination directory: Debian.World.Ru
requesting all changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
updating working directory
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Создание локальных изменений:
$ cd Debian.World.Ru
$ echo "123" >> read.me
$ hg status
M read.me
$ hg commit -m "second commit"
Внесение изменений в проект:
$ hg push
pushing to http://hg.debianworld.ru/Debian.World.Ru/
searching for changes
http authorization required
realm: Restricted
user: hgother
password:
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
Скажите, как создать 1 пользователя администратора , который принимает правки , и пользователя разработчика , который может смотреть и загружать новые версии но без одобрения администратора , файл не будет изменен ??