GitoliteとGitWebを連携させる方法(Gitリポジトリの閲覧とBASIC認証の自動化)
Gitリポジトリのアクセス制御を行う「Gitolite」とWebフロントエンドの「GitWeb」を導入してみました。
個々の導入に関してはともかく、GitoliteとGitWebの連携に関する情報があまりなくハマったため、GitoliteとGitWebを連携させる方法を紹介します。
GitoliteのリポジトリをGitWebで表示する方法
Gitoliteで管理するリポジトリをGitWebから閲覧するためには、Gitoliteで管理しているリポジトリディレクトリ・ファイルのパーミッションを変更し、Webサーバー(Apache)がGitoliteのリポジトリにアクセスできるようします。
(Gitoliteの管理用リポジトリ(gitolite-admin.git)の設定ファイル(gitolite.conf)で、GitWebのアクセス権限を設定(R = gitweb
を追加)する方法もあるようですが、今回の方法では特に必要ありません。)
まず、Webサーバー(Apache)の実行ユーザー(apache)をGitoliteの実行グループ(gitolite)に追加します。
su -
usermod -a -G gitolite apache
次に、Gitoliteグループ(gitolite)のユーザーがリポジトリにアクセスできるようにするため、リポジトリがあるディレクトリとリポジトリのディレクトリ・ファイルのパーミションを変更します。
chmod g+rx /home/gitolite
chmod -R g+r /home/gitolite/repositories
find /home/gitolite/repositories -type d -exec chmod g+x {} +
新規作成するリポジトリも同様のパーミッションにするため、Gitoliteの設定(.gitolite.rc)でumask値を変更します。
vi /home/gitolite/.gitolite.rc
- .gitolite.rc
# $REPO_UMASK = 0077; # ↓ 変更 $REPO_UMASK = 0027;
Gitoliteで管理するリポジトリの場所をGitWebの設定(gitweb.conf)で指定します。
vi /etc/gitweb.conf
- gitweb.conf
# $projectroot = "/srv/git/repositories"; # ↓ 変更 $projectroot = "/home/gitolite/repositories";
以上でGitWebからGitoliteで管理するリポジトリを閲覧できるようになります。
GitWebのBASIC認証をGitoliteと連携させる方法
ユーザーがGitoliteのリポジトリへアクセスするための公開鍵認証を利用して、GitWebのBASIC認証をユーザー自身で管理できるようにします。
まず、BASIC認証を行うための「.htaccess」ファイルをGitWebの公開ディレクトリ(/var/www/git)に作成します。
su -
cd /var/www/git/
vi .htaccess
- .htaccess
AuthType Basic AuthName "Please enter your ID and password" AuthUserFile /var/www/git/.htpasswd AuthGroupFile /dev/null require valid-user
次に、BASIC認証用に「.htpasswd」ファイルを作成します。Gitoliteの実行グループ(gitolite)でアクセスできるようにするため、所有グループとパーミションを変更します。
touch .htpasswd
chown :gitolite .htpasswd
chmod g+rw .htpasswd
「.htpasswd」ファイルの場所をGitoliteの設定(.gitolite.rc)で指定します。
vi /home/gitolite/.gitolite.rc
- .gitolite.rc
# $HTPASSWD_FILE = ""; # ↓ 変更 $HTPASSWD_FILE = "/var/www/git/.htpasswd";
後は、Gitoliteを利用する各々のユーザーが各自SSHでGitoliteにアクセスし、パスワードの設定を行います。
ssh [email protected] htpasswd
Gitoliteのインストール時に作成した管理ユーザーなどGitoliteの実行ユーザー(gitolite)としてシェルログインもできるユーザーの場合や、「~/.ssh/config」でGitoliteへのSSH接続で使用する秘密鍵を指定していない場合は、Gitolite専用の秘密鍵を指定してSSHに接続します。
ssh [email protected] -i ~/.ssh/admin htpasswd
Gitolite専用の秘密鍵を指定しない場合、通常の秘密鍵(id_rsaなど)が使われるため、SSH接続が行える場合でも単にLinuxの「htpasswd」コマンドが実行されるのみになり、連携機能を利用したパスワードの設定は行えません。
以上で、最初に作成した「.htpasswd」ファイルに自動的にパスワードが設定され、Gitoliteのアクセス制御とGitWebのBASIC認証を連携させることができます。なお、パスワードを変更する場合も同様の方法で行うことでき、Gitoliteの各ユーザーが自分自身でGitWebのパスワードを管理できるようになります。
コメント (1)
トラックバック (0)
この記事へのトラックバックはまだありません。
大変参考になりました!ありがとうございます
「404 No projects found」から開放されました。