Chapters ā–¾ 2nd Edition

4.5 Git pƄ servern - Git Daemonen

Git Daemonen

Nu skall vi konfigurera en daemon som tillhandahĆ„ller repon ƶver ā€œGitā€ protokollet. Det Ƥr vanligt fƶr snabb icke-autentiserad Ć„tkomst till din Gitdata. Kom ihĆ„g att, eftersom detta inte Ƥr en autentiserad tjƤnst, kommer allt du skickar ƶver protokollet att vara publikt inom dess nƤtverk.

Om du kƶr detta pƄ en server utanfƶr din brandvƤgg, skall det bara anvƤndas fƶr projekt som Ƥr publikt synliga fƶr hela vƤrlden. Om servern du kƶr pƄ ligger innanfƶr din brandvƤgg kan du anvƤnda den fƶr projekt som ett stort antal mƤnniskor eller datorer (integrations- eller byggservrar) bara har lƤsrƤttigheter till och du inte vill lƤgga till en separat SSH-nyckel fƶr varje.

Oavsett vilket Ƥr Gitprotokollet relativt lƤtt att konfigurera. Du behƶver i praktiken bara kƶra detta kommando som en daemonprocess:

$ git daemon --reuseaddr --base-path=/srv/git/ /srv/git/

Flaggan --reuseaddr tillƄter att servern startar om utan att vƤnta pƄ att gamla anslutningar dƶr ut, medan flaggan --base-path tillƄter folk att klona projekt utan att specificera hela sƶkvƤgen. SƶkvƤgen i slutet talar om fƶr Gitdaemonen var den skall leta efter repon fƶr att exportera. Om du kƶr en brandvƤgg, kommer du behƶva ƶppna upp port 9418 pƄ den maskin du konfigurerar detta pƄ.

Du kan daemonisera processen pƄ olika sƤtt, beroende pƄ ditt operativsystem.

Eftersom systemd Ƥr det vanligatste init-systemet pƄ moderna Linuxdistributioner kan du anvƤnda den fƶr ƤndamƄlet. LƤgg helt enkelt en fil i /etc/systemd/system/git-daemon.service med fƶljande innehƄll:

[Unit]
Description=Start Git Daemon

[Service]
ExecStart=/usr/bin/git daemon --reuseaddr --base-path=/srv/git/ /srv/git/

Restart=always
RestartSec=500ms

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=git-daemon

User=git
Group=git

[Install]
WantedBy=multi-user.target

Du kanske har noterat att Gitdaemonen startas med git som bƄde grupp och anvƤndare. Modifiera dem fƶr att passa dina behov och sƤkerstƤll att anvƤndaren och gruppen existerar pƄ systemet. Kontrollera ocksƄ att GitbinƤren Ƥr tillgƤnglig pƄ /usr/bin/git och Ƥndra sƶkvƤgen om nƶdvƤndigt.

Slutligen behƶver du kƶra systemctl enable git-daemon fƶr att automatiskt starta tjƤnsten vid uppstart, och starta och stoppa tjƤnsten med systemctl start git-daemon respektive systemctl stop git-daemon.

Upp till och med LTS 14.04, anvƤnde Ubuntu enhetskonfiguration av uppstartstjƤnster. DƤrfƶr, pƄ Ubuntu 14.04 och tidigare kan du anvƤnda ett uppstartsskript. SƄ dƤrfƶr, i fƶljande fil

/etc/init/local-git-daemon.conf

lƤgger du fƶljande skript:

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

Av sƤkerhetsskƤl Ƥr det starkt rekommenderat att denna daemon kƶrs som en anvƤndare med enbart lƤsrƤttigheter till dina repon — du kan lƤtt gƶra detta genom att skapa en ny anvƤndare git-ro och kƶra daemonen som den. Fƶr enkelhets skull kommer vi kƶra den som samma git-anvƤndare som git-shell kƶr som.

NƤr du startar om din maskin kommer din Gitdaemon starta automatiskt och Ƅterstartas om den stoppas. Fƶr att starta den utan att behƶva starta om kan du kƶra:

$ initctl start local-git-daemon

PĆ„ andra system kanske du vill anvƤnda xinetd, ett skript i ditt sysvinit-system eller nĆ„got annat — sĆ„ lƤnge som kommandot Ƥr daemoniserat och ƶvervakas pĆ„ nĆ„got sƤtt.

Nu behƶver du tala om fƶr Git vilka repon som tillƄts icke-autentiserad Gitserverbaserad Ƅtkomst till. Du kan gƶra detta fƶr varje repo genom att skapa en fil som heter git-daemon-export-ok.

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

NƤrvaron av den filen talar om fƶr Git att det Ƥr OK att tillhandahƄlla det projektet utan autentisering.

scroll-to-top