Git
目次 ▾ 第2版

4.6 サーバー上のGit - スマートHTTP

スマートHTTP

SSHによる認証済みアクセスと、`git://`による認証なしアクセスを既に説明しましたが、これら両方を同時に実現できるプロトコルもあります。スマートHTTPの設定は、基本的にGitに付属の`git-http-backend`というCGIスクリプトをサーバーで有効にするだけです。このCGIは、HTTP URLへの`git fetch`または`git push`によって送信されたパスとヘッダーを読み取り、クライアントがHTTP経由で通信できるかどうかを判断します(バージョン1.6.6以降のクライアントであればすべて可能です)。CGIがクライアントがスマートであると判断した場合、スマートに通信します。そうでない場合は、ダンプな動作に戻ります(古いクライアントとの互換性を維持するため)。

非常に基本的な設定手順を見てみましょう。ApacheをCGIサーバーとして設定します。Apacheが設定されていない場合は、Linuxボックスで次のようなコマンドを実行して設定できます。

$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env

これにより、`mod_cgi`、`mod_alias`、`mod_env`モジュールも有効になります。これらはすべて正常に動作するために必要です。

`/srv/git`ディレクトリのUnixユーザーグループを`www-data`に設定する必要があります。これにより、Webサーバーがリポジトリの読み取りと書き込みアクセスを行うことができるようになります。これは、CGIスクリプトを実行するApacheインスタンスが(デフォルトで)そのユーザーとして実行されるためです。

$ chgrp -R www-data /srv/git

次に、Apacheの設定にいくつかの項目を追加して、`git-http-backend`をWebサーバーの`/git`パスに受信するすべてのリクエストのハンドラーとして実行する必要があります。

SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/

`GIT_HTTP_EXPORT_ALL`環境変数を省略すると、Gitは認証されていないクライアントに対して、`git-daemon-export-ok`ファイルが存在するリポジトリのみを提供します。これはGitデーモンと同じ動作です。

最後に、Apacheに`git-http-backend`へのリクエストを許可し、書き込みを何らかの方法で認証するように(おそらく次のAuthブロックのようなものを使用して)指示する必要があります。

<Files "git-http-backend">
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /srv/git/.htpasswd
    Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#)
    Require valid-user
</Files>

そのためには、有効なユーザーのパスワードを含む`.htpasswd`ファイルを作成する必要があります。「schacon」ユーザーをファイルに追加する例を以下に示します。

$ htpasswd -c /srv/git/.htpasswd schacon

Apacheによるユーザー認証には多くの方法がありますが、その中から1つを選択して実装する必要があります。これは考えられる最も単純な例です。また、このデータすべてを暗号化するために、SSL経由で設定することを強くお勧めします。

Apacheの設定の詳細にあまり深く入り込みたくはありません。なぜなら、皆さんが別のサーバーを使用していたり、異なる認証のニーズをお持ちの可能性があるからです。Gitには`git-http-backend`というCGIが付属しており、呼び出されるとHTTP経由でデータの送受信のためのすべてのネゴシエーションを行います。これはそれ自体では認証を実装しませんが、それを呼び出すウェブサーバーの層で容易に制御できます。これはほぼ全てのCGI対応ウェブサーバーで実行できますので、あなたが最もよく知っているものを使用してください。

注記

Apacheでの認証設定に関する詳細については、こちらのApacheドキュメントをご覧ください: https://httpd.apache.org/docs/current/howto/auth.html.

scroll-to-top