Git
Chapters ▾ 2nd Edition

4.5 Git на сървъра - Git Daemon

Git Daemon

Следващата стъпка е да настроим демон, който обслужва хранилища чрез “Git” протокола. Това е често срещан избор за бърз достъп до вашите Git данни, без автентикация. Помнете, че в този случай данните ви са публично достъпни в рамките на съответната мрежа.

Ако използвате протокола на сървър извън защитната стена, това следва да става само за публично достъпни проекти. Ако сте зад защитна стена обаче, бихте могли да го ползвате за проекти, до които достъп за четене трябва да имат голям брой сътрудници и за които не желаете да настройвате SSH ключове поотделно.

Независимо от случая, Git протоколът е сравнително лесен за настройка. В общи линии, трябва да изпълните долната команда в daemonized режим:

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

Опцията --reuseaddr позволява сървърът да се рестартира без да изчаква таймаут на старите конекции, а --base-path позволява на хората да клонират проекти без да трябва да указват пълния път. Пътят в края на командата указва на Git демона къде да следи за хранилища за експорт. Ако използвате защитна стена, ще трябва също така да разрешите достъпа до порт 9418 на сървъра.

Пускането на демона може да се прави по различни начини в зависимост от използваната операционна система.

Понеже systemd вече е най-разпространената init система в модерните Linux дистрибуции, бихте могли да я ползвате за целта. Просто създайте файл /etc/systemd/system/git-daemon.service със следното съдържание:

[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

Може да видите, че Git демонът се пуска с потребител и група git. Ако се налага, променете ги според вашите нужди и се уверете, че потребителят който сте написали съществува в системата. Също така, проверете дали изпълнимият файл се намира в /usr/bin/git и го коригирайте, ако не е.

Накрая трябва да изпълните systemctl enable git-daemon за да пуснете услугата автоматично при рестарт на компютъра. Ръчното пускане и спиране на услугата се прави с командите systemctl start git-daemon и systemctl stop git-daemon, съответно.

До версия LTS 14.04 включително, Ubuntu използваше upstart за init конфигурацията. По тази причина, при Ubuntu 14.04 или по-ранна версия може да ползвате Upstart скрипт. Така, в следния файл

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

въведете съдържанието:

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

От гледна точка на сигурността, строго се препоръчва демонът да се пуска с потребител, който има права само за четене до хранилищата — можете лесно да направите това създавайки нов потребител git-ro и настройвайки контролния файл на услугата с неговото име. За по-просто, ние ще го пускаме с правата на същия git системен потребител, с правата на който работи git-shell.

Когато рестартирате машината, вашият Git демон ще стартира автоматично и ще се рестартира, ако по някаква причина спре. За да го пуснете без да се налага рестарт на компютъра, изпълнете:

$ initctl start local-git-daemon

На други системи, може да искате да ползвате xinetd, скрипт в sysvinit системата или пък нещо друго като похват — трябва просто да пуснете командата като демон и да наблюдавате статуса ѝ.

Остава да кажете на Git в кои хранилища трябва да се разреши свободния достъп през Git протокола. Можете да направите това във всяко хранилище създавайки файл с име git-daemon-export-ok.

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

Наличието му казва на Git, че е ОК да обслужва съответния проект без автентикация.