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という仕組みを考えました。実現方法は以下の通りです。
- ApacheのHTTP認証をフックしてGitLabで認証を行う
- 認証が通ったら、GitLabアカウントからgitoliteアカウントを紐付けしてgitoliteに渡す
こんな感じです。
glgl-http-auth
それを実装したスクリプトがglgl-http-auth(ぐるぐる-http-authと読んで下さい 。GitLab-GitoLiteです)です。
- GitHubに置いてみました - http://github.com/nobrin/gitlab-http
- アーカイブ(内容は同じはず) - gitlab-http.tar.gz
仕組みは簡単で、
- WSGIAuthUserScriptで認証をフックして、glgl-http-authのcheck_password()をコール
- GitLabにアクセスして認証(Railsをよく知らないのでHTTPアクセスを使います。もっと効率的な方法もあると思います)
- 認証が通ったら、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という感じ)。