Введение
«Умный» HTTP позволяет Git-серверу поддерживать как аутентифицированный доступ (чтение/запись), так и неаутентифицированный доступ (чтение) через один протокол. Эта статья описывает базовую настройку «Умного» HTTP с использованием Apache и CGI-скрипта git-http-backend, поставляемого с Git. Этот скрипт обрабатывает запросы git fetch и git push, обеспечивая совместимость с клиентами Git версии 1.6.6 и выше.
Установка и настройка Apache
Для начала установите Apache и необходимые модули на Linux (например, Ubuntu):
$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env
Эти команды устанавливают Apache и активируют модули mod_cgi, mod_alias и mod_env, необходимые для работы CGI-скрипта.
Измените владельца каталога /srv/git на пользователя и группу www-data, чтобы Apache мог читать и писать в репозитории:
$ chgrp -R www-data /srv/git
Настройка git-http-backend
Добавьте конфигурацию в файл Apache (например, /etc/apache2/sites-available/git.conf) для обработки запросов через git-http-backend:
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
Опции:
GIT_PROJECT_ROOT: Указывает каталог с репозиториями.GIT_HTTP_EXPORT_ALL: Разрешает доступ ко всем репозиториям. Без этой переменной доступны только репозитории с файломgit-daemon-export-ok.ScriptAlias: Направляет запросы к/git/наgit-http-backend.
Настройка аутентификации
Для запросов на запись (например, git push) настройте аутентификацию в Apache. Добавьте следующий блок в конфигурацию:
<Files "git-http-backend">
AuthType Basic
AuthName "Git Access"
AuthUserFile /srv/git/.htpasswd
Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#)
Require valid-user
</Files>
Создайте файл паролей .htpasswd для аутентификации пользователей, например:
$ htpasswd -c /srv/git/.htpasswd dima
Эта команда создаёт файл .htpasswd с данными пользователя dima. Для добавления других пользователей используйте htpasswd без флага -c.
Дополнительные рекомендации
- Настройте SSL для шифрования трафика (например, с помощью
mod_sslв Apache). - Apache поддерживает различные методы аутентификации (например, LDAP). Выберите подходящий для вашей инфраструктуры.
- Для старых клиентов Git (до версии 1.6.6) «Умный» HTTP автоматически переключается на «Тупой» HTTP для операций чтения.
Для дополнительной информации о настройке аутентификации в Apache обратитесь к документации Apache.
Пример использования
После настройки пользователи могут клонировать репозиторий:
$ git clone https://gitserver/git/project.git
Для отправки изменений (с аутентификацией):
$ git push https://gitserver/git/project.git master
Заключение
«Умный» HTTP сочетает удобство публичного доступа и безопасность аутентифицированного доступа. Настройка включает установку Apache, активацию git-http-backend, настройку прав доступа и аутентификации. Этот подход идеален для проектов, требующих как публичного чтения, так и защищённой записи.
Отзывы