Git
Chapters ▾ 2nd Edition

4.6 Гит на серверу - Паметан HTTP

Паметан HTTP

Сада имамо аутентификован приступ кроз SSH и неаутентификован приступ преко git://, али постоји и протокол који може радити обе ствари истовремено. Подешавање Паметног HTTP протокола се у принципу своди на укључивање CGI скрипте која долази уз програм Гит под именом git-http-backend на серверу.

Овај CGI ће прочитати путању и заглавља које пошаљу git fetch или git push на HTTP URL и одредити да ли клијент може да комуницира преко HTTP протокола (што је тачно за сваког клијента почевши од верзије 1.6.6). Ако CGI види да је клијент паметан, комуницираће с њим на паметан начин; иначе ће му приступити приглупо (тако да је компатибилан уназад за читање са старијим верзијама клијената).

Хајде да прођемо кроз веома једноставно постављање. Користићемо Apache као CGI сервер. Ако немате подешен Apache, овако га можете поставити на Линукс машини:

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

Ово такође укључује модуле mod_cgi, mod_alias и mod_env који су неопходни за исправан рад.

Мораћете и да подесите Јуникс групу корисника директоријума /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-deamon-export-ok, баш као што је био случај код Гит демона.

За крај, потребно је да 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 сервера, пошто је прилично вероватно да користите и неки други сервер, или имате другачије потребе за аутентификацијом. Идеја је да уз програм Гит долази CGI скрипта који се назива git-http-backend и која обавља све неопходне преговоре о слању и примању података преко HTTP протокола када се покрене. Она сама не имплементира било какву аутентификацију, али се то једноставно може контролисати на нивоу веб сервера који је позива. Ово можете имплементирати употребом скори сваког веб сервера који има подршку за CGI, тако да је најбоље да изаберете онај који већ добро познајете.

Белешка

За више информација о конфигурацији аутентификације у Apache серверу, погледајте Apache документацију на следећој адреси: http://httpd.apache.org/docs/current/howto/auth.html