Belov Solutions

Настройка "Умного" HTTP для Git-сервера

Введение

«Умный» 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, настройку прав доступа и аутентификации. Этот подход идеален для проектов, требующих как публичного чтения, так и защищённой записи.

Отзывы

Оставить отзыв

Ваша эл. почта не будет опубликована