Git
Chapters ▾ 2nd Edition

4.6 Git на сервері - Розумний HTTP

Розумний HTTP

Ми вже маємо авторизований доступ через SSH та неавторизований через git://, проте існує ще протокол, котрий може працювати в обох варіантах одночасно. Налаштування Розумного HTTP потрибує лише ввімкнути CGI скрипт, що входить в пакет Git під назвою git-http-backent, на вашому сервері. Цей CGI буде читати шлях та заголовки, що їх відправили git fetch чи git push до HTTP URL та визначати, чи клієнт в змозі спілкуватися через HTTP (що є правдою для будь-якого клієнту після версії 1.6.6). Якщо CGI визначив, що клієнт розумний, він буде з ним спілкуватися розумно, інакше доведеться використовувати тупу поведінку (отже він зворотно сумісний для читання зі старіших клієнтів).

Давайте покроково розглянемо дуже просту схему налаштування. Ми використаємо Apache в якості CGI серверу. Якщо у вас немає Apache, ви можете його встановити на Linux машині приблизно так:

$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env

Ця команда також вмикає модулі mod_cgi, mod_alias і mod_env. Вони всі необхідні для правильної роботи розумного HTTP.

Вам також треба встановити групу Unix теки /srv/git у значення www-data, щоб веб сервер мав доступ на читання й запис до сховища, оскільки процес APache, що виконує CGI скрипт, буде типово виконуватись від цього користувача:

$ chgrp -R www-data /srv/git

Далі нам треба додати дещо до конфігурації Apache, щоб git-http-backend обробник для будь-якого шляху на вашому веб сервері, що закінчується на /git.

SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/

Якщо ви пропустите змінну середовища GIT_HTTP_EXPORT_ALL, Git погодиться роздавати неавторизованим користувачам тільки сховища з файлом `git-daemon-export-ok, як робить і демон Git.

Нарешті, вам варто сказати Apache дозволяти запити до git-http-backend і якимось чином зробити записи авторизованими, можливо за допомогою блоку Auth ось так:

<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 з паролями дозволених користувачів. Ось приклад того, як можна додати користувача “schacon” до цього файлу:

$ htpasswd -c /srv/git/.htpasswd schacon

Існує безліч методів авторизації в Apache, вам доведеться вибрати та використати один з них. У цій секції ми навели найпростіший приклад, який тільки могли вигадати. Також ви безсумнівно захочете налаштувати шифрування даних через SSL.

Ми не бажаємо занадто багато розглядати конфігурацію Apache, адже цілком можливо, що ви будете використовувати інший сервер, чи у вас інші потреби авторизації. Суть в тому, що Git поставляє CGI скрипт git-http-backent, який може відправляти та приймати дані Git через HTTP. Він не реалізує авторизацію сам, проте авторизацію легко контролювати на рівні веб серверу, що його викликає. Це дозволяє майже кожен веб сервер, що підтримує CGI, отже використовуйте той, що ви найкраще знаєте.

Note

За докладнішою інформацією щодо конфігурації авторизації в Apache, дивіться документацію Apache за адресою: http://httpd.apache.org/docs/current/howto/auth.html