Git
Chapters ▾ 2nd Edition

4.5 Git op de server - Git Daemon

Git Daemon

Nu gaan we een daemon opzetten die repositories verspreid via het “Git” protocol. Dit is een gewoonlijke keuze voor snelle, ongeauthenticerde toegang tot je Git data. Onthoud dat omdat dit geen geauthenticeerde service is, alles wat je verspreid publiek is in het netwerk.

Als je deze server buiten je firewall draait, zou het alleen gebruikt moeten worden voor projecten die publiekelijk zichtbaar zijn naar de wereld. Als de server die je draait binnen je firewall staat, zou je het kunnen gebruiken voor projecten met een groot aantal mensen of computers (continue integratie of build servers) die alleen-lees toegang hebben, waarvoor je niet een SSH sleutel wilt toevoegen voor elk van deze.

In elk geval, het Git protocol is relatief simpel om op te zetten. Eenvoudigweg moet je dit commando in de achtergrond (daemonize) moeten draaien:

git daemon --reuseaddr --base-path=/opt/git/ /opt/git/

--reuseaddr staat de server toe om te herstarten zonder te wachten tot oude connecties een time-out krijgen, de --base-path optie staat mensen toe om projecten te clonen zonder het volledige pad te specificeren, en het pad aan het einde vertelt de Git daemon waar hij moet kijken voor de te exporteren repositories. Als je een firewall draait, zul je er poort 9418 open moeten zetten op de machine waar je dit op gaat doen.

Je kunt dit proces op een aantal manieren daemoniseren, afhankelijk van het besturingssystem waarop je draait. Op een Ubuntu machine, zul je een Upstart script gebruiken. Dus in het volgende bestand

/etc/event.d/local-git-daemon

stop je dit script:

start on startup
stop on shutdown
exec /usr/bin/git daemon \
    --user=git --group=git \
    --reuseaddr \
    --base-path=/opt/git/ \
    /opt/git/
respawn

Omwille van veiligheidsredenen, wordt sterk aangeraden om deze daemon uit te voeren als gebruiker met alleen-lezen toegang op de repositories - je kunt dit makkelijk doen door een nieuwe gebruiker git-ro aan te maken en de daemon als deze uit te voeren. Om het eenvoudig te houden voeren we het als dezelfde git gebruiker uit, als waarmee git-shell draait.

Als je de machine herstart, zal de Git daemon automatisch opstarten en herstarten als de server onderuit gaat. Om het te laten draaien zonder te herstarten, kun je dit uitvoeren:

initctl start local-git-daemon

Op andere systemen zul je misschien xinetd willen gebruiken, een script in je sysvinit systeem, of iets anders - zolang je dat commando maar ge-daemoniseerd krijgt en deze op een of andere manier in de gaten gehouden wordt.

Vervolgens zul je je Gitosis server moeten vertellen welke repositories je onauthenticeerde Gitserver gebaseerde toegang toestaat. Je kunt dit doen voor elke repository door een bestand genaamd git-deamon-export-ok te maken.

$ cd /path/to/project.git
$ touch git-daemon-export-ok

Het feit dat dit bestand er is geeft aan dat Git dat project zonder authenticatie kan verspreiden.