Git
Chapters ▾ 2nd Edition

4.5 Git sa Server - Git Daemon

Git Daemon

Susunod ay magse-set up tayo ng isang naglilingkod na repositoryo ng daemon gamit ang protokol ng “Git”. Ito ay isang karaniwang pagpili para sa mabilis, unauthenticated na access sa iyong datos sa Git. Tandaan na dahil ito ay isang unauthenticated na serbisyo, anumang bagay na ihahatid mo sa protokol na ito ay pampubliko sa network nito.

Kapag pinapatakbo mo ito sa isang server sa labas ng iyong firewall, ito ay dapat ginagamit lamang sa mga proyekto na makikita ng publiko sa mundo. Kapag ang server na pinapatakbo mo ay sa loob ng iyong firewall, maaari mo itong gamitin sa mga proyekto na mayroong malaking bilang ng tao o mga kompyuter (tuloy-tuloy na pagsasama o mga build server) ay mayroong read-only na access, kapag ayaw mong magdagdag ng SSH key para sa bawat isa.

Sa anumang kaso, ang protokol ng Git ay medyo madaling gamitin. Kailangan mo patakbuhin ang utos na ito sa isang daemonized na paraan:

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

Ang --reuseaddr na opsyon ay nagpapahintulot sa server na mag-restart nang hindi naghihintay na mag-timeout ang mga lumang mga koneksyon na mag time out, habang ang --base-path na opsyon ay nagpapahintulot sa mga tao na mag-clone ng mga proyekto na hindi tinutukoy ang buong landas, at ang landas sa dulo ay sinasabihan ang Git daemon kung saan tumingin para sa mga repositoryo na i-export. Kapag ikaw ay nagpapatakbo ng isang firewall, kakailanganin mo ring butasan ito sa port 9418 sa kahon kung asan ka nagse-set up.

Maaari mong i-daemonize ang prosesong ito sa iilang paraan, depende sa operating system na pinapatakbo mo.

Dahil ang systemd ang pinakakaraniwan na init na sistema sa mga modernong distribusyon ng Linux, maaari mong gamitin ito para sa layunin na iyon. Maglagay lamang ng isang file sa /etc/systemd/system/git-daemon.service na may ganitong nilalaman:

[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

Maaaring napansin mo na ang Git daemon ay nagsimula dito kasama ang git bilang parehong grupo at user. Baguhin ito upang magkasya sa iyong pangangailangan at siguraduhin ang ibinigay na user ay umiiral sa sistema. Gayundin, tiyakin na ang Git binary ay matatagpuan sa /usr/bin/git at baguhin ang landas kung kailangan man.

Sa wakas, ipatakbo ang systemctl enable git-daemon para awtomatikong simulan ang serbisyo sa pag-boot, at maaaring simulan o itigil ang serbisyo gamit ang, ayon sa pagkakabanggit systemctl start git-daemon at systemctl stop git-daemon.

Hanggang LTS 14.04, ginamit ng Ubuntu ang kompigurasyon ng upstart na unit ng serbisyo. Sa gayon, sa Ubuntu ⇐ 14.04 magagamit mo ang Upstart na iskrip. Kaya, sa mga sumusunod na file

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

Ilagay mo ang iskrip na ito:

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

Para sa dahilan ng seguridad, malakas na hinihikayat na ipatakbo ang daemon na ito bilang isang user na mayroong read-only na mga pahintulot sa mga repositoryo — madali mo itong magagawa sa pamamagitan ng paglikha ng isang bagong user git-ro at pagpapatakbo ng daemon bilang sila. Para sa kapanan ng pagiging simple, ipapatakbo lang natin ito pareho sa git na user na pinapatakbo ng git-shell.

Kapag na-restart mo na iyong makina, ang iyong Git daemon ay awtomatikong magsisimula at mag-respawn kapag bumaba ito. Upang mapatakbo ito na hindi kailangan mag-reboot, maaari mong ipatakbo ito:

$ initctl start local-git-daemon

Sa mga ibang sistema, maaaring nais mong gamitin ang xinetd, isang iskrip sa iyong sysvinit na sistema, o ibang bagay — hangga’t makahanap ka ng paraan na makakuha ng utos na daemonized at pinapanood.

Sunod, dapat mong sabihan ang Git kung anong repository ang papayagan na magkaroon ng unauthenticated na pagpasok ayon sa server. Maaari mo itong gawin sa bawat repositoryo sa pamamagitan ng paglikha ng isang file na may pangalang git-daemon-export-ok.

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

Ang presensya ng file na iyon ay nagsasabi sa Git na OK na paglingkuran ang proyektong ito na walang pagpapatunay.