理工系研究者のための Mac OS X, Windows, Linux メモ
 
ホーム >> プログラミング >> Git Tips >> Cent OS 7でGitサーバを立ち上げる
このエントリーをはてなブックマークに追加

CentOSでGitサーバを立ち上げる

作成日:2017.7.9
環境:Cent OS 7
  1. Apache HTTP Serverの確認
  2. Gitをインストールする
  3. Smart HTTPの設定
  4. GitWebを準備する

Apache HTTP Serverの確認

Cent OS 7にインストールされたHTTPサーバのドキュメントルート:

/var/www/html/

設定ファイル:

/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
httpd.confの実行ユーザーがapacheであることを確認する。
$ grep User /etc/httpd/conf/httpd.conf
User apache
また、httpd.confの内容を確認し
<Directory>
  ...
  AllowOverride All
  ...
</Directory>
または、適切に設定されていることを確認する。

サーバの起動、停止、再起動:

$ sudo systemctl start httpd
$ sudo systemctl stop httpd
$ sudo systemctl restart httpd

Gitをインストールする

パッケージマネージャを使ってGitをインストールする。

$ sudo yum install git
Gitリポジトリの配置場所は
/var/www/git-repo/
とすることにしたので、ここにテスト用のリポジトリを作成する。
$ sudo mkdir /var/www/git-repo
$ sudo chown apache /var/www/git-repo
$ cd /var/www/git-repo
$ sudo -u apache mkdir test.git
$ cd test.git
$ sudo -u apache git init --bare
$ sudo -u apache echo "This is a pen." > hoge.txt
$ sudo -u apache git add hoge.txt
$ sudo -u apache git commit -m "First commit."
リポジトリの所有権はhttpdの実行ユーザーと同じapacheにしておく。

Smart HTTPの設定

Smart HTTPと呼ばれる機能を使ってgitサーバを準備する。gitをインストールすると、

/usr/libexec/git-core/
にgit関連のコマンドが収納される。git-http-backendコマンドを用いる。

Apache HTTPDの設定ファイル

/etc/httpd/conf.d/git.conf
を作成し、次のように記述する。(参考
SetEnv GIT_PROJECT_ROOT /var/www/git-repo
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/

RewriteEngine On
RewriteCond %{QUERY_STRING} service=git-receive-pack [OR]
RewriteCond %{REQUEST_URI} /git-receive-pack$
RewriteRule ^/git/ - [E=AUTHREQUIRED]

<Files "git-http-backend">
AuthType Basic
AuthName "Git Access"
AuthUserFile /etc/httpd/mypasswd/.htpasswd
Require valid-user
Order deny,allow
</Files>
また、htpasswdコマンドを用いて.htpasswdをあらかじめ作成しておく。

リモートホストからcloneできるかどうか確認する。

$ git clone http://example.jp/git/test.git
Cloning into 'test'...
Username for 'http://example.jp': foo
Password for 'http://foo@example.jp': 
remote: Counting objects: 74, done.
remote: Compressing objects: 100% (62/62), done.
remote: Total 74 (delta 14), reused 0 (delta 0)
Unpacking objects: 100% (74/74), done.

macOS (Mac OS X)のターミナルでgit cloneを実行すると、リモートホストのユーザー名とパスワードがキーチェーンアクセスに保存される。このため2度目以降のアクセス時にはパスワードが訊かれなくなる。この保存されたパスワードはキーチェーンアクセスから削除できる。

GitWebを準備する

パッケージマネージャを使ってGitWebをインストールする。

$ sudo yum install gitweb
下記のディレクトリにgitweb.cgiがインストールされる。
/var/www/git/gitweb.cgi
gitwebにGitリポジトリの場所を指定する必要があるので、 gitweb.cgi をエディタで開き$projectrootにリポジトリの場所を指定する。
our $projectroot = "/var/www/git-repo";
gitwebパッケージをインストールすると、
/etc/httpd/conf.d/git.conf.rpmnew
というファイルが作成され、この中にgit.confに書き込むべき内容が書かれている。 この内容をすでに作成している
/etc/httpd/conf.d/git.conf
に追記する。
Alias /gitweb /var/www/git

<Directory /var/www/git>
  Options +ExecCGI 
  Allow from all
  AddHandler cgi-script .cgi
  DirectoryIndex gitweb.cgi
</Directory>

<LocationMatch "^/gitweb">
AuthType Basic
AuthName "Git Access"
AuthUserFile /etc/httpd/mypasswd/.htpasswd
Require valid-user
</LocationMatch>
ウェブブラウザからアクセスしてみる。
http://example.jp/gitweb/