Git
Chapters ▾ 2nd Edition

4.6 Git na strežniku - Pametni HTTP

Pametni HTTP

Sedaj imamo overjen dostop preko SSH in neoverjen dostop preko git://, vendar obstaja tudi protokol, ki lahko naredi oboje istočasno. Nastavitev pametnega HTTP je v osnovi samo omogočenje skripte CGI, ki je ponujena z Git-om imenovanim git-http-backend na strežniku. Ta CGI bo prebral pot in glave poslane, ki jih pošlje git fetch ali git push k HTTP UTL in določa, če klient lahko komunicira preko HTTP (kar je res za kateregakoli klienta od verzije 1.6.6). Če CGI vidi, da je klient pameten, bo z njim komuniciral pametno, drugače se bo vrnil k neumnemu obnašanju (tako, da je združljiv za nazaj za branje z starejšimi klienti).

Pojdimo skozi zelo osnovno nastavitev. To bomo nastavili z Apache-jem kot strežnikom CGI. Če nimate nastavitve Apache, lahko to naredite na Linux napravi nekako takole:

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

To tudi omogoči module mod_cig, mod_alias in mod_env, ki so potrebni, da to ustrezno deluje.

Naslednje moramo dodati nekaj stvari k Apache nastavitvi, da poganja git-http-backend kot handler za karkoli, kar pride v pot /git vašega spletnega strežnika.

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

Če izpustite GIT_HTTP_EXPORT_ALL spremenljivko okolja, potem bo Git serviral samo neoverjenim klientom repozitorije z git-daemon-export-ok datoteko v njih, tako kot to dela Git prikriti proces (daemon).

Potem boste morali povedati Apache-ju, da omogoča zahtevke k tej poti z nečim takim:

<Directory "/usr/lib/git-core*">
   Options ExecCGI Indexes
   Order allow,deny
   Allow from all
   Require all granted
</Directory>

Končno boste želeli narediti pisanja, da so nekako overjena, možno z Auth blokom takole:

<LocationMatch "^/git/.*/git-receive-pack$">
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /opt/git/.htpasswd
    Require valid-user
</LocationMatch>

To bo zahtevalo, da ustvarite .htaccess datoteko, ki vsebuje gesla za vse veljavne uporabnike. Tu je primer dodajanja uporabnika “schacon” datoteki:

$ htdigest -c /opt/git/.htpasswd "Git Access" schacon

Na voljo je tona načinov imetja Apache overjenih uporabnikov, izbrati in implementirati boste morali enega od njih. To je samo enostaven primer, ki smo ga lahko prikazali. Skoraj zagotovo boste želeli to nastaviti tudi preko SSL, da so vsi podatki šifrirani.

Ne želimo iti predaleč po zajčevi luknji Apache nastavitvenih specifik, ker lahko boste uporabljali drugačni strežnik ali imeli različne overitvene potrebe. Ideja je, da Git prihaja s CGI-jem imenovanim git-http-backend, ki ko je sklican bo naredil vsa pogajanja, da pošiljajo in prejemajo podatke preko HTTP. Ne implementira kakršnegakoli overjanja sam po sebi, vendar to je lahko enostavno kontrolirano na nivoju spletnega strežnika, ki je sklican. To lahko naredite s skoraj katerimkoli CGI-zmožnim spletnim strežnikom, torej pojdite s tistim, ki ga najbolj poznate.

Note

Za več informacij o nastavitvah overjanja v Apache-ju, preverite dokumentacijo Apache tu: http://httpd.apache.org/docs/current/howto/auth.html