Git
章 ▾ 第2版

4.5 サーバー上のGit - Gitデーモン

Gitデーモン

次に、「Git」プロトコルを使用してリポジトリを提供するデーモンをセットアップします。これは、Gitデータへの高速な非認証アクセスによく選ばれる方法です。これは認証されたサービスではないため、このプロトコルで提供するものはすべてネットワーク内で公開されることに注意してください。

ファイアウォールの外にあるサーバーでこれを実行する場合は、世界に公開されているプロジェクトにのみ使用する必要があります。実行しているサーバーがファイアウォール内にある場合は、多数の人やコンピューター(継続的インテグレーションまたはビルドサーバー)が読み取り専用アクセスする必要があるプロジェクトに使用できます。その際、それぞれにSSHキーを追加する必要はありません。

いずれにせよ、Gitプロトコルは比較的簡単にセットアップできます。基本的には、デーモン化された方法でこのコマンドを実行する必要があります。

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

--reuseaddrオプションを使用すると、サーバーは古い接続がタイムアウトするのを待たずに再起動できます。一方、--base-pathオプションを使用すると、ユーザーはパス全体を指定せずにプロジェクトをクローンできます。最後に指定するパスは、Gitデーモンがエクスポートするリポジトリを検索する場所を示します。ファイアウォールを実行している場合は、セットアップしているボックスのポート9418に穴を開ける必要もあります。

このプロセスをデーモン化する方法は、実行しているオペレーティングシステムによって異なります。

systemdは、最近のLinuxディストリビューションで最も一般的なinitシステムであるため、この目的で使用できます。単純に、次の内容で/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-daemonsystemctl stop git-daemonを使用してサービスを開始および停止できます。

他のシステムでは、xinetdsysvinitシステム内のスクリプト、またはその他のものを使用することもできます。そのコマンドがデーモン化され、何らかの方法で監視されていれば問題ありません。

次に、認証なしのGitサーバーベースのアクセスを許可するリポジトリをGitに通知する必要があります。これは、各リポジトリでgit-daemon-export-okという名前のファイルを作成することで実行できます。

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

このファイルが存在することで、認証なしでこのプロジェクトを提供しても問題ないことをGitに伝えます。

scroll-to-top