Git
Chapters ▾ 2nd Edition

4.5 Git на сервері - Демон Git

Демон Git

Тепер встановимо демон, що надає доступ до сховищ за допомогою протоколу “Git”. Це поширений вибір для швидкого, неавторизовоного доступу до ваших даних Git. Пам’ятайте, що оскільки він не авторизований, все до чого ви надаєте доступ за допомогою цього протоколу стає загальнодоступним у його мережі.

Якщо сервер працює за межами вашого мережевого екрану, він має використовуватись виключно для проектів, що є загальнодоступними для світу. Якщо ж сервер працює в межах мережевого екрану, ви можете використовувати його для проектів, до яких велика кількість людей або комп’ютерів (наприклад сервери компіляції чи інтеграції) мають доступ тільки на читання, але ви не хочете додавати ключ SSH для кожного з них.

У будь-якому разі, протокол Git легко налаштувати. Вам просто треба виконати цю команду так, щоби вона працювала як демон:

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

Опція --reuseaddr дозволяє серверу себе перезапускати без очікування, доки старі з’єднання спливуть (time out), а опція --base-path дозволяє клонувати сховища за допомогою шляху відносно значення цієї опції замість повного шляху. Якщо у вас працює мережевий екран, ви також маєте дозволити передачу через порт 9418 машини з Git сервером.

Запустити цю команду як демон можна декількома шляхами, в залежності від вашої операційної системи.

Найпоширенішою у сучасних дистрибутивах Linux системою запуску є systemd, отже варто її використати для цього. Просто створіть файл /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. Змініть це згідно ваших потреб. Але вказаний користувач має існувати у вашій системі. Також зверніть увагу на шлях до програми Git — відредагуйте /usr/bin/git, якщо є потреба.

Нарешті, треба виконати systemctl enable git-daemon, щоб цей сервіс автоматично запускався під час запуску системи. Також ви можете запустити чи зупинити сервіс за допомогою systemctl start git-daemon та systemctl stop git-daemon відповідно.

Ubuntu до версії LTS 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, що він може роздавати цей проект без авторизації.