Search
Write a publication
Pull to refresh

Создание своего удаленного Git репозитория на основе проколов http и webdav с нуля

Доброго времени суток, Хабр!

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

В настоящее время широкое распространение получила система Git. Многие программисты выбирают ее за гибкость и относительную легкость начала работы. В интернете есть множество ресурсов, предоставляющих услуги хостинга Git репозиториев, как открытые, так и закрытые. Любой новичок может воспользоваться, не заморачиваясь с серверной частью, сразу приступая к изучению «клиентских» команд. Но все это ресурсы «дяди», для крупного проекта неприемлемо хранить свой код у кого-то. Возникает вопрос о поднятии своего удаленного репозитория. В этой статье я опишу процесс настройки сервера.

В данной статье я расскажу процесс установки и настройки apache для работы git по протоколу webdav. Вся настройка будет производиться на сервере под управлением ОС Debian 7, но конфиги должны подойти и для других систем, даже windows.

Отговорки:
— подразумевается, что у вас уже обновлен список пакетов и сами пакеты

Итак, задача:
— запуск закрытого сервера Git с аутентификацией каждого пользователя с возможностью совместной работы над одним проектом
— использование протокола http + webdav

Для начала нам нужно установить web сервер apache2 и ядро git-core:

# apt-get install apache2 git-core


Включаем модуль dav-fs в web сервере, автоматически будет подключен модуль dav

# a2enmod web-fs


Репозиторий будем размещать на отдельном виртуальном хосте vhost.host.ru. Во всех конфигах вам нужно будет прописать свой адрес.

Для этого создадим файл виртуального хоста /etc/apache2/sites-available/vhost

<VirtualHost *:80>
	ServerName vhost.host.ru	# ваш хост
	ServerAdmin admin@host.ru	# необязательная директива, email адрес админа
	DocumentRoot /var/vhost		# дириктория где расположен корень сайта

	SetEnv GIT_PROJECT_ROOT /var/vhost/	# дириктория где будут находиться репозитории, корень репозиториев
	SetEnv GIT_HTTP_EXPORT_ALL

	ScriptAlias / /usr/lib/git-core/git-http-backend/

	<Directory /var/vhost/>
		AllowOverride All
	</Directory>

	<Location />
		Options Indexes
		DAV on
		AuthType Basic
		AuthName "My Git"			# сообщение при регистрации
		AuthUserFile /etc/apache2/gitpass	# глобальный файл логинов и паролей для репозитория
	</Location>

	Include /etc/apache2/git.d/	# в этой папке будем хранить файл с конфигурацией доступов к репозиториям
</VirtualHost>


Создадим файл паролей и добавим туда пользователей user1 и user2:

# htpasswd -c /etc/apache2/gitpass user1 # параметр -с нужно указывать только если файла нет
# htpasswd /etc/apache2/gitpass user2 # параметр -с нужно указывать только если файла нет


Создадим два репозитория, например repo1 и repo2:

# mkdir /var/vhost/repo1
# cd /var/vhost/repo1
# git init --bare
# mkdir /var/vhost/repo2
# cd /var/vhost/repo2
# git init --bare


Для хранения доступов к репозиториям создадим файл /etc/apache2/git.d/repos:

<Location /repo1.git>
        Require user user1 user2
</Location>

<Location /repo2.git>
        Require user user2
</Location>


Таким образом мы указали, что к репозиторию repo1 будут иметь доступ два пользователя user1 и user2. А к репозиторию repo2 только один user2

Для того чтобы изменения вступили в силу, заставим web сервер перечитать файл настроек командой:

# /etc/init.d/apache2 reload


Послесловие


Пожалуй, самый первый вопрос, который может у вас возникнуть это «зачем прописывать доступы к репозиториям, почему не сделать по файлу .htaccess в каждом репозитории?»
Ответ. Потому, что при подключении webdav, дириктивы из этого файла начинают игнорироваться. Почему так происходит, не знаю. Если вы знаете, я буду рад узнать верный ответ.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.