Git
Chapters ▾ 2nd Edition

4.6 Git on the Server - Smart HTTP

Smart HTTP

İndi SSH vasitəsilə autentifikasiya edilmiş giriş və git:// vasitəsilə təsdiqlənməmiş bir giriş əldə etdik, eyni zamanda hər ikisini eyni anda edə biləcək bir protokol da var. Smart HTTP qurmaq, sadəcə serverdə git-http-backend adlı Git ilə təmin olunan CGI skriptini təmin etməkdir. Bu CGI git fetch və ya git push tərəfindən göndərilən path və başlıqları bir HTTP URL-ə oxuyacaq və müştərinin HTTP ilə əlaqə qura biləcəyini müəyyən edəcək(bu 1.6.6 versiyasından bəri hər hansı bir müştəri üçün doğrudur). CGI müştərinin ağıllı olduğunu görsə, onunla ağıllı əlaqə quracaq; əks təqdirdə lal davranışa geri dönəcəkdir.(buna görə köhnə müştərilərlə oxunuş geriyə uyğundur).

Gəlin çox təməl və sadə quruluşdan danışaq. Bunu Apache ilə CGI server olaraq quracağıq. Apache quruluşunuz yoxdursa, bunu Linux qutusunda bu kimi bir şeylə edə bilərsiniz:

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

Bu da lazımi şəkildə işləməsi üçün lazım olan mod_cgi, mod_aliasmod_env modullarına imkan verir.

Ayrıca /srv/git qovluqlarının Unix istifadəçi qrupunu www-data olaraq təyin etməlisiniz, beləliklə veb serveriniz depoları oxuya və yaza bilərsiniz, çünki CGI skriptini işlədən Apache nümunəsi ( default olaraq) həmin istifadəçi kimi çalışır:

$ chgrp -R www-data /srv/git

Bundan sonra veb serverinizin /git yoluna girən bir şey üçün işçi olaraq git-http-backend işlətmək üçün Apache konfiqurasiyasına bəzi şeylər əlavə etməliyik.

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

Əgər siz GIT_HTTP_EXPORT_ALL mühit dəyişkənliyini kənara qoyursunuzsa, Git yalnız Git demonunda olduğu kimi təsdiqlənməmiş müştərilərə git-daemon-export-ok faylı olan depoları təmin edəcəkdir.

Nəhayət, Apache-yə git-http-backend sorğularına icazə verməsini və yazıların müəyyən bir şəkildə doğrulanmasını, bəlkə də bu kimi bir Auth bloku ilə etməsini istəməlisiniz:

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

Bütün etibarlı istifadəçilərin şifrələrini ehtiva edən bir “.htpasswd` faylını yaratmağı tələb edəcəkdir. ``schacon” istifadəçisini fayla əlavə etmək nümunəsi belədir:

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

Apache identifikasiyası istifadəçilərinə sahib olmaq üçün bir çox yol var, onlardan hər hansı birini seçib uygulamalısınız. Bu, gələ biləcəyimiz ən sadə nümunədir. Bütün məlumatların şifrələnməsi üçün bunu SSL üzərində qurmaq istəyəcəksiniz.

Apache konfiqurasiya xüsusiyyətlərinin rabbit hole-undan çox uzaqlaşmaq istəmirik, çünki fərqli bir serverdən istifadə edə və ya fərqli identifikasiyaya ehtiyacınız ola bilər. Fikir budur ki, Git git-http-backend adlı bir CGI ilə birlikdə HTTP üzərindən məlumat göndərmək və qəbul etmək üçün bütün danışıqları aparacaqdır. Heç bir identifikasiyanı özü həyata keçirmir, ancaq onu çağıran veb serverin qatında asanlıqla idarə oluna bilər. Bunu hər hansı bir CGI bacarıqlı bir veb serveri ilə edə bilərsiniz, ona görə ən yaxşı bildiyiniz biri ilə dəvam edin.

Note

Apache-də identifikasiyanı konfiqurasiya etmək haqqında daha çox məlumat üçün Apache sənədlərini buradan yoxlaya bilərsiniz: https://httpd.apache.org/docs/current/howto/auth.html