Git
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