ぱそくま ろご
Linux > Git > ApacheでGit

ApacheでGit

ApacheでGit

Apacheを使ってhttpもしくはhttps経由でGitを使うには「git-http-backend」というプログラムを使用します。 このプログラムをApacheで動かすにはFastCGI機能が必要になります。

  1. FastCGI等が使用できるApacheをインストール。
  2. 必要なApacheモジュールの有効化。
  3. Apacheの設定ファイルにGitの設定をする。
  4. Gitのリポジトリを作成する。

FastCGI等が使用できるApacheをインストール

Apacheはパッケージマネージャーを使ってインストールできます。redhat系はDebian系はapache2-utilsのインストールが別途必要になります。

Gitのインストール - Debian系

[paso ~]sudo apt-get install  apache2 apache2-utils #apache2-utilsはFastCGIやBasic認証に必要。

Gitのインストール - redhat系

[paso ~]sudo yum install httpd

必要なApacheモジュールの有効化

Gitとの連携には複数のApache用モジュールが必要で、それを起動時に読み込む設定が必要です。Debian系はコマンドで出来ますが、redhat系は設定ファイルで行います。

Gitに必要なApacheモジュールの有効化 - Debian系

[paso ~]sudo a2enmod cgi alias env
Your MPM seems to be threaded. Selecting cgid instead of cgi.
Enabling module cgid.
Module alias already enabled
Module env already enabled
To activate the new configuration, you need to run:
  service apache2 restart

Gitに必要なApacheモジュールの有効化 - redhat系

redhat系はインストール時に/etc/httpd/conf.modules.d/に該当する設定ファイルがあるので、何も設定せず使えるようになっています。 以下のようにgrepで調べて結果が出ればOK。

例:gitに必要なモジュールの設定ファイルがあるか調査

[paso ~]grep '\cgi_\|alias_\|env_\ /etc/httpd/conf.modules.d/*
./00-base.conf:LoadModule alias_module modules/mod_alias_so
./00-base.conf:LoadModule env_module modules/env_alias_so
.
./01-cgi.conf: LoadModule cgi_module modules/mod_cgi_so
.


Apacheの設定ファイルにGitの設定をする

Gitを動かすためにFastCGIの設定を行います。ここでは「git.conf」という新しいファイルを作成します。 なお、Apacheのhttpd.confにはconf-enabled(またはconf.d)以下の*.confファイルを読み込むように書いてあるのでファイルを作成するだけで起動時に読み込まれます。 以下の例はBasic認証またはDigest認証での構築方法です。どちらか好きな方で設定してください。

gitの設定(Basic認証編)

[paso ~]sudo vi /etc/apache2/conf-enabled/git.conf <-こっちはDebian系
または
[paso ~]sudo vi /etc/httpd/conf.d/git.conf <-こっちはredhat系

#ここからgit.confの中身
SetEnv GIT_PROJECT_ROOT /var/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
#ScriptAlias /git/ /usr/libexe/git-core/git-http-backend/  <-redhat系はこちらを有効に

#CGI(git-http-backend)にアクセスする際はBasic認証を使用して、認証。
<Files "git-http-backend">
    AuthType Basic
    AuthName "Git Repos"
    AuthUserFile /var/git/.htpasswd
    Require valid-user
</Files>
#保存して終了する。

basic認証ファイルの作成

[paso ~]htpasswd -c /var/git/.htpasswd paso
New password:<パスワード;>
Re-type new password:<パスワード;>
Adding password for user paso

gitの設定(Digest認証編)

[paso ~]sudo vi /etc/apache2/conf-enabled/git.conf <-こっちはDebian系
または
[paso ~]sudo vi /etc/httpd/conf.d/git.conf <-こっちはredhat系

#ここからgit.confの中身
SetEnv GIT_PROJECT_ROOT /var/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
#ScriptAlias /git/ /usr/libexe/git-core/git-http-backend/  <-redhat系はこちらを有効に

#dev1のリーム(認証ファイルで使うグループ)GitDev1とする
<LocationMatch "^/git/dev1.git">
    AuthType Digest
    AuthName "GitDev1"
    AuthUserFile /var/git/.htdigest
    Require valid-user
</LocationMatch>

#dev2のリームはGitDev2とする
<LocationMatch "^/git/dev2.git">
    AuthType Digest
    AuthName "GitDev2"
    AuthUserFile /var/git/.htdigest
    Require valid-user
</LocationMatch>
#保存して終了する。

digest認証ファイルの作成

[paso ~]htdigest -c .htdigest GitDev1 paso -c オプションは初回のみ
New password:<パスワード;>
Re-type new password:<パスワード;>
Adding password for user paso
[paso ~]htdigest .htdigest GitDev2 paso
New password:<パスワード;>
Re-type new password:<パスワード;>
Adding password for user paso

Gitのリポジトリを作成する

次はapacheの設定の前に、Gitのリポジトリを作成します。 リポジトリは目的のディレクトリで「init」で作成すればOKです。今回は「/var/git」をGitのルートディレクトリとします。 その中に各プロジェクト用のディレクトリを作成します。下の例は2つのプロジェクトを作成します。

/var/gitにdev1.gitとdev2.gitのリポジトリを作成

[paso ~]sudo mkdir /var/git
#1つめはdev1.git。
[paso ~]sudo git init --bare --shared=group /var/git/dev1.git
#2つめはdev2.git。
[paso ~]sudo git init --bare --shared=group /var/git/dev2.git
[paso ~]ls /var/git
dev1.git/  dev2.git/
#http経由でpush可能に。
[paso ~]sudo git config --file /var/git/dev1.git/config http.receivepack true
[paso ~]sudo git config --file /var/git/dev2.git/config http.receivepack true

/var/gitディレクトリはwebサーバー経由で読み書きするため、httpdの起動ユーザーに権限を与える必要があります。 なお、Debian系とredhat系はそれぞれユーザー名が違うので注意してください。

例:Gitのリポジトリディレクトリにhttpd起動ユーザーの権限付与

[paso ~]sudo chgrp -R www-data /var/git <-こっちはDebian系
または
[paso ~]sudo chgrp -R apache /var/git <-こっちはredhat系

Apache Httpdの再起動

[paso ~]sudo systemctl restart apache2.service <-こっちはDebian系
または
[paso ~]sudo systemctl restart httpd.service <-こっちはredhat系

これで、GitをApache Httpd経由でアクセスすることが可能です。 例えばdev1のリポジトリにアクセスしたい場合は「git clone http://localhost/git/dev1.git」となります。