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

в 22:05, , рубрики: Песочница

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

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

В настоящее время широкое распространение получила система 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, дириктивы из этого файла начинают игнорироваться. Почему так происходит, не знаю. Если вы знаете, я буду рад узнать верный ответ.


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js