GITサーバの構築とSSLサイトの設定、gitolite、gitwebでGitリポジトリを管理する方法についてのメモ
Gitサーバの構築について
GITリポジトリをオンライン上で管理するWebアプリケーションを導入し、自宅サーバーにgithub
のような環境を作成することが目的。
前提条件として、SSLが有効になっているApacheが稼動している必要がある。
Gitのインストール
git本体をパッケージインストールする
> sudo apt-get install git-core
gitoliteのインストール
gitolite
は、gitの共有リポジトリ
のユーザーやアクセス管理を行うためのツールである。管理リポジトリもgitリポジトリになっているので、gitでgitリポジトリを管理する。
gitoliteの管理リポジトリにssh公開鍵
を登録すると、その鍵に対応した共用リポジトリが作成される。github
やassembla
のようなリポジトリ・ウェブサービスも同じような発想でリポジトリ管理していると思われる。
gitoliteツールはgitolite
ユーザで動作する為、予めLinuxユーザを作成しておく。
> sudo adduser --system --shell /bin/sh --group gitolite
> sudo apt-get install gitolite
管理用のssh公開鍵が必要になる。すでに何度か作成した鍵でも良いし、新たに作成しても良い。以下は管理PC上で秘密鍵gitadmin
、公開鍵gitadmin.pub
を作成。
$ ssh-keygen
Enter file in which to save the key (//.ssh/id_rsa): gitadmin
Enter passphrase (empty for no passphrase): (Enter)
Enter same passphrase again: (Enter)
ついでにSSH設定ファイルにgit用の設定を追加する。gitoliteは通常”gitolite”というユーザで処理を受け付けるのでuserに指定する。公開鍵のコピーをサーバーに転送しておく。
~/.ssh/config
host git-server
user gitolite
hostname 192.168.0.1
port 22
identityfile ~/.ssh/gitadmin
サーバー上でgitoliteでログインした後、転送した公開鍵をautorized_keys
に追記する。
authorized_keysのパーミッションが600
以外だと、アクセスエラーになるので確認しておく。
> echo gitadmin.pub >> ~/.ssh/autorized_keys
> sudo chmod 600 ~/.ssh/autorized_keys
gitolite
ユーザでgl-setup
を実行する。引数に先ほど作成した管理者用の公開鍵を指定する。
gl-setupで指定したリポジトリのルートパスに管理用やテスト用のリポジトリが作成されるので、gitoliteユーザで書き込みできないディレクトリであれば、予めパーミッションを設定しておく必要がある。
$ gl-setup gitadmin.pub
gl-setupを実行すると、設定ファイル.gitolite.rc
をviでオープンした画面になる。閉じる前に$REPO_UMASK
と$REPO_BASE
を変更して置く。
$REPO_UMASK="0027";
$REPO_BASE="/var/repogitories";
セットアップが終了すると、gitolite-admin.git
とtesting.git
が作成される。gitolite-admin.gitが管理リポジトリ
、testing.gitはテスト確認用のリポジトリになる。
管理PCで、GITレポジトリへSSHでアクセスしてリポジトリを操作できるか確認する
$ mkdir test
$ cd test
$ git clone ssh://git-server/testing
$ echo test>sample.txt
$ git add .
$ git commit -m "test commit"
$ git push origin master
管理者によるGITユーザ用の公開鍵の登録
管理用レポジトリのクローンをgitサーバからチェックアウトする。
> git clone ssh://server/gitolite-admin
管理ディレクトリの中にはconf
フォルダとkeydir
フォルダがあり、設定ファイルや管理している公開鍵が格納されている。新しいユーザを登録する場合、keydirに新規ユーザの公開鍵をaddする。
> git add sampleuser.pub
> git commit -m "xxx"
> git push origin master
gitolite-admin
├conf
│└gitolite.conf
└keydir
├gitadmin.pub (gl-setup時に登録された管理者キー)
└sampleuser.pub (新規ユーザの公開鍵)
新しいリポジトリを追加したい場合、gitolite.conf
を編集してリポジトリを定義した後、リモートリポジトリにpush
すると、自動的に作成される。以下の例はsample-repo
という名称のリポジトリを新規追加する。
repo gitolite-admin
RW+ = admin
repo testing
RW+ = @all
repo sample-repo (追加)
RW = @all (追加)
gitolite.confのアクセス権やグループ設定例。ブランチやファイル単位で細かく指定できるが制限もある。
- アクセス権
R = user 読み取り専用
RW = user 読み書きOK
RW+ = user 読み書きに加えてgit resetなどの巻き戻しもできる
- グループ設定
@group = user1 user2
RW = @group user1,user2が読み書きOK
gitwebの構築
gitoliteはリポジトリやユーザを管理するツールであるのに対し、このgitwebは"github"風にリポジトリを管理するWebアプリケーションであり、HTTPサーバー上で動作する。
まずhttpサーバの実行ユーザ(Ubuntuだとwww-data)をgitoliteグループに追加する。
その後、gitwebのパッケージをインストールする。
> usermod -a -G gitolite www-data
> sudo apt-get install gitweb
インストールが完了すると、/etc/apache2/conf.d
にgitweb
というファイルが作成されて、バーチャルホスト設定が作成されている。このファイルを編集してドキュメントルートを変更して、元のディレクトリにあったスクリプトなどを移動する。
/etc/apache2/conf.d/gitweb
Alias /gitweb /var/www/gitweb
<directory var="" www="" gitweb="">
Options FollowSymLinks +ExecCGI
AddHandler cgi-script .cgi
SSLRequireSSL
AuthType Basic
AuthName "Git Repositories"
AuthUserFile /etc/apache2/gitpasswd
Require valid-user
</directory>
またgitweb.confを編集して参照先のリポジトリを指定しておく。
gitweb.conf
$projectroot = "/var/www/gitweb";
$projects_list = $projectroot;
@stylesheets = ("static/gitweb.css");
$javascript = "static/gitweb.js";
$logo = "static/git-logo.png";
$favicon = "static/git-favicon.png";
gitolite.confを編集してgitwebのアクセス権を追加しておく。
repo [ repository name ]
R = gitweb
github
風とは言ったが、デフォルトの見た目はほど遠い。見た目だけgithub風
に変更するjavascriptとcssが公開されているのでダウンロードする。
同名のcssとjsをオリジナルの位置にシンボリックリンクを作成して入れ替える。
$ unzip kogakure-gitweb-theme-4f3a048.zip
$ ln -s gitweb.css gitweb-theme/gitweb.css
$ ln -s gitweb.js gitweb-theme/gitweb.js
設定が完了したら、ブラウザから確認する。Basic認証パネルが起動すること。GitHub風の見た目になっていることを確認する。
https://localhost/gitweb/