Git
Chapters ▾ 2nd Edition

4.6 Git sa Server - Smart HTTP

Smart HTTP

Tayo ngayon ay may awtentik na pag-access sa pamamamgitan ng SSH at di awtentik na pag-access sa pamamagitan ng git://, ngunit mayroon ding isang protokol na kung saan maaaring gawin ng sabay-sabay. Ang pag-set up ng Smart HTTP ay pawang pagpapagana lang ng isang CGI script na may kasamang Git na tinatawag na git-http-backend sa server. Babasahin ng CGI ang landas at mga header na ipinadala ng isang git fetch o git push sa anumang HTTP URL at tukuyin kung maaaring makipag-usap ang kliyente sa HTTP (na totoo para sa anumang kliyente mula noong beryson 1.6.6). Kung makikita ng CGI na matalino ang kliyente, ito ay matalinong makikipag-usap dito; kung hindi man ito ay babalik sa pag-uugali ng pipi (so ito ay backward compatible para sa pagbasa sa mga luma na kliyente).

Daanan natin ang isang pangunahing pag-set up. Ise-set up natin to gamit ang Apache bilang isang CGI server. Kung wala kang Apache na naka-set up, magagawa mo ito sa isang kahon sa Linux na may ganito:

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

Pinapayagan din nito ang mod_cgi, mod_alias, at mod_env na mga modyul, lahat ito ay kinakailangan upang mapagana ng maayos.

Kailangan mo rin i-set ang grupo ng mangagamit ng Unix ng mga direktoryo ng /srv/git sa www-data upang mayroong mabasa- at pagsulat- na access sa mga repositoryo ang iyong web server, dahil ang instansya ng Apache na tumatakbo sa mga iskrip ng CGI ay (bilang default) tumatakbo bilang user na iyon.

$ chgrp -R www-data /srv/git

Sunod kailangan natin magdagdag ng mga bagay sa pagsasaayos ng Apache upang mapatakbo ang git-http-backend bilang handler ng anuman na darating papasok sa /git na landas ng iyong web server.

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

Kung hindi mo isasali ang GIT_HTTP_EXPORT_ALL na variable ng environment, pagkatapos ay ihahain lamang ng Git sa mga hindi awtentik na mga kliyente ang mga repositoryo na may git-daemon-export-ok na file sa loob nila, pareho sa ginawa ng Git daemon.

Sa wakas nais mong sabihan ang Apache na pahintulutan ang mga request patungo sa git-http-backend at maghanap ng paraan na gawing awtentik ang mga pagsulat, posible sa isang block ng Auth kagaya nito:

<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>

Kinakailangan nito na gumawa ka ng .htpasswd na file na naglalaman ng mga password ng lahat ng mga balidong user. Narito ang isang halimbawa ng pagdagdag ng isang “schacon” na user sa file:

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

Mayroong toneladang paraan na kung saan masagawang awtenik ng Apache ang mga user, kailangan mong pumili ng isa at ipatupad ito. Ito ang pinakasimpleng halimbawa na maaari nating gawin. Makikita mo rin ang tiyak na nais na i-set up ito gamit ang SSL upang lahat ng data nito ay encrypted.

Hindi natin nais na talakayin ng malalim ang mga tiyak na pagsasaayos ng Apache, dahil maaaring gumagamit ka ng ibang server o ibang pangangailangan ng pagpapatunay. Ang idea ay ang Git ay may kasamang isang CGI na ang tawag ay git-http-backend na kung tinawag ay isasagawa ang lahat ng pag-aayos upang maipadala at matanggap ang mga datos gamit ang HTTP. Wala itong pagpapatunay na isinasagawa, ngunit madali ito kontrolin sa layer ng web server na tumatawag nito. Magagawa mo ito gamit ang halos anumang may kakayahan na CGI web server, so gamitin mo ang pinaka alam mo.

Para sa karagdagang impormasyon sa pagsasaayos ng pagpapatunay sa Apache, tingnan ang mga doc ng Apache dito: http://httpd.apache.org/docs/current/howto/auth.html