チャプター ▾ 第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