GitLabにHTTPでアクセスする  

2012-01-17 : 作成

git-2 GitLabをインストールする?でGitLabサーバが使えるようになりました。gitoliteも使えるのでSSH経由でのアクセスも可能のはずです。そこで、HTTPでのアクセス手段を追加してみます。実際はセキュリティの関係でHTTPSを使う場合が多いと思いますが、設定はほぼ同じです。
GitLabの標準機能でやり方が分からなかったので作りましたが、そういう機能もあるのかも・・・

何が問題か  

SSHが問題なく使える場合はいいのですが、ファイアウォールが厳しいところはHTTPまたはHTTPSしか通らない場合があります(私の職場はそうです)。そこでHTTPまたはHTTPSも使いたいところです。

認証について  

SSHではgitoliteの公開鍵認証でリポジトリにアクセスできましたがHTTPだとその手段がありません。gitoliteはSmart HTTPに対応しているため、HTTP認証を使えばリポジトリにアクセスすることが可能です。実際、Smart HTTPでの設定方法が以下のサイトに示されています。

これでHTTPでリポジトリにアクセスできますが、HTTP認証を使うため、Webサーバの認証ファイルなどを編集しなければなりません。これではGitLabのアカウントで認証できません。しかもGitLabとgitoliteでは内部で使っているアカウント名が異なります(.gitolite/conf/gitolite.confを見れば分かります)。
それらの紐付けをするためにGibLabのデータベースを利用する必要もあります。

gitlab-http  

そこで、それらの問題を解決するためにgitlab-httpという仕組みを考えました。実現方法は以下の通りです。

  1. ApacheのHTTP認証をフックしてGitLabで認証を行う
  2. 認証が通ったら、GitLabアカウントからgitoliteアカウントを紐付けしてgitoliteに渡す

こんな感じです。

glgl-http-auth  

それを実装したスクリプトがglgl-http-auth(ぐるぐる-http-authと読んで下さい [smile]GitLab-GitoLiteです)です。

仕組みは簡単で、

  1. WSGIAuthUserScriptで認証をフックして、glgl-http-authのcheck_password()をコール
    • GitLabにアクセスして認証(Railsをよく知らないのでHTTPアクセスを使います。もっと効率的な方法もあると思います)
  2. 認証が通ったら、GitLabのデータベースからgitoliteのアカウント名を取得して環境変数REMOTE_USERに格納する
    • gitoliteのHTTP認証では環境変数REMOTE_USERが参照されます

この方法によりアクセスを実現しています。

セットアップ  

必要なファイルはglgl-http-authのみなのでセットアップは簡単だと思います。
動作確認は、GitLab + gitolite + apache + mod_wsgiです。suEXECを使っているので、ドキュメントルートの下に配置する必要があるようです。例えば/var/www/gitlab-http/glgl-http-authというように配置して実行属性をつけて下さい。apacheの設定はexample.confを参考にしてみて下さい。
まだ不親切な内容ですが、コメント欄で指摘があれば情報を足していきたいと思います。

使い方  

example.confを元にセットアップをした場合、

git clone http://gitlab.foo.com/git/myproject.git

でユーザー名とパスワードを聞かれてアクセスできるはずです。GitLabのアカウントはメールアドレスなのでURLに埋め込むときは@を%40で記述します(http://dobuo%40mymail.foo.com@gitlab.foo.com/git/myproject.gitという感じ)。

コメント  

添付ファイル: filegitlab-http.tar.gz 2012件 [詳細]