Chapters ▾ 2nd Edition

4.5 Git on the Server - Git Daemon

Git Daemon

Vervolgens sal ons 'n daemon opstel wat bewaarplekke (repositories) bedien met behulp van die “Git” protokol. Dit is 'n algemene keuse vir vinnige, ongeverifieerde toegang (unauthenticated access) tot jou Git-data. Onthou dat aangesien dit nie 'n geverifieerde diens (authenticated service) is nie, is enigiets wat jy oor hierdie protokol bedien, publiek binne die netwerk daarvan.

As jy hierdie op 'n bediener (server) buite jou brandmuur (firewall) laat loop, behoort dit slegs gebruik te word vir projekte wat publiek sigbaar is vir die wêreld. As die bediener waarop jy dit laat loop binne jou brandmuur is, kan jy dit gebruik vir projekte waartoe 'n groot aantal mense of rekenaars (deurlopende integrasie- of bou-bedieners / continuous integration or build servers) leesalleen-toegang (read-only access) het, wanneer jy nie 'n SSH-sleutel (SSH key) vir elkeen wil byvoeg nie.

In elk geval is die Git-protokol redelik maklik om op te stel. Basies moet jy hierdie opdrag op 'n ge-daemoniseerde manier (daemonized manner) uitvoer:

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

Die --reuseaddr opsie laat die bediener toe om te herbegin sonder om te wag vir ou verbindings om uit te tel (time out), terwyl die --base-path opsie mense toelaat om projekte te kloon (clone) sonder om die hele pad (path) te spesifiseer, en die pad aan die einde vertel die Git-daemon waar om te soek vir bewaarplekke (repositories) om uit te voer (export). As jy 'n brandmuur (firewall) gebruik, sal jy ook 'n gaatjie daarin moet slaan by poort 9418 op die masjien waarop jy dit opstel.

Jy kan hierdie proses op 'n aantal maniere daemoniseer, afhangende van die bedryfstelsel (operating system) wat jy gebruik.

Aangesien systemd die algemeenste inisialiserings-stelsel (init system) onder moderne Linux-verspreidings (distributions) is, kan jy dit vir daardie doel gebruik. Plaas eenvoudig 'n lêer in /etc/systemd/system/git-daemon.service met hierdie inhoud:

[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

Jy het dalk opgemerk dat Git-daemon hier met git as beide groep (group) en gebruiker (user) begin word. Verander dit om by jou behoeftes te pas en maak seker dat die verskafde gebruiker op die stelsel bestaan. Maak ook seker dat die Git-binêre lêer (binary) wel by /usr/bin/git geleë is en verander die pad indien nodig.

Ten slotte sal jy systemctl enable git-daemon uitvoer om die diens outomaties by selflaai (boot) te begin, en jy kan die diens begin en stop met onderskeidelik systemctl start git-daemon en systemctl stop git-daemon.

Op ander stelsels wil jy dalk xinetd, 'n skrip in jou sysvinit stelsel, of iets anders gebruik — solank jy net daardie opdrag ge-daemoniseer kry en dat dit op een of ander manier dopgehou (watched) word.

Vervolgens moet jy vir Git vertel watter bewaarplekke (repositories) ongeverifieerde Git-bedienergebaseerde toegang (unauthenticated Git server-based access) mag toelaat. Jy kan dit in elke bewaarplek doen deur 'n lêer genaamd git-daemon-export-ok te skep.

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

Die teenwoordigheid van daardie lêer vertel vir Git dat dit reg is om hierdie projek sonder verifikasie (authentication) te bedien.