* GitLabにHTTPでアクセスする [#r163fc1c]
#anno1(2012-01-17 : 作成)
[[git-2 GitLabをインストールする>どぶお/開発しよう!/git-2 GitLabをインストールする]]でGitLabサーバが使えるようになりました。gitoliteも使えるのでSSH経由でのアクセスも可能のはずです。そこで、HTTPでのアクセス手段を追加してみます。実際はセキュリティの関係でHTTPSを使う場合が多いと思いますが、設定はほぼ同じです。~
&color(red){GitLabの標準機能でやり方が分からなかったので作りましたが、そういう機能もあるのかも・・・};
** 何が問題か [#k032f2a4]
SSHが問題なく使える場合はいいのですが、ファイアウォールが厳しいところはHTTPまたはHTTPSしか通らない場合があります(私の職場はそうです)。そこでHTTPまたはHTTPSも使いたいところです。
*** 認証について [#y967e59a]
SSHではgitoliteの公開鍵認証でリポジトリにアクセスできましたがHTTPだとその手段がありません。gitoliteはSmart HTTPに対応しているため、HTTP認証を使えばリポジトリにアクセスすることが可能です。実際、Smart HTTPでの設定方法が以下のサイトに示されています。
- https://github.com/sitaramc/gitolite/blob/pu/doc/http-backend.mkd
これでHTTPでリポジトリにアクセスできますが、HTTP認証を使うため、Webサーバの認証ファイルなどを編集しなければなりません。これではGitLabのアカウントで認証できません。しかもGitLabとgitoliteでは内部で使っているアカウント名が異なります(.gitolite/conf/gitolite.confを見れば分かります)。~
それらの紐付けをするためにGibLabのデータベースを利用する必要もあります。
** gitlab-http [#c45c658f]
そこで、それらの問題を解決するためにgitlab-httpという仕組みを考えました。実現方法は以下の通りです。
+ ApacheのHTTP認証をフックしてGitLabで認証を行う
+ 認証が通ったら、GitLabアカウントからgitoliteアカウントを紐付けしてgitoliteに渡す
こんな感じです。
*** glgl-http-auth [#n5a7da3c]
それを実装したスクリプトがglgl-http-auth(ぐるぐる-http-authと読んで下さい⌣。''G''it''L''ab-''G''ito''L''iteです)です。
- GitHubに置いてみました - http://github.com/nobrin/gitlab-http
- アーカイブ(内容は同じはず) - &ref(gitlab-http.tar.gz);
仕組みは簡単で、
+ WSGIAuthUserScriptで認証をフックして、glgl-http-authのcheck_password()をコール
-- GitLabにアクセスして認証(Railsをよく知らないのでHTTPアクセスを使います。もっと効率的な方法もあると思います)
+ 認証が通ったら、GitLabのデータベースからgitoliteのアカウント名を取得して環境変数REMOTE_USERに格納する
-- gitoliteのHTTP認証では環境変数REMOTE_USERが参照されます
この方法によりアクセスを実現しています。
*** セットアップ [#u082729f]
必要なファイルはglgl-http-authのみなのでセットアップは簡単だと思います。~
動作確認は、GitLab + gitolite + apache + mod_wsgiです。suEXECを使っているので、ドキュメントルートの下に配置する必要があるようです。例えば/var/www/gitlab-http/glgl-http-authというように配置して実行属性をつけて下さい。apacheの設定はexample.confを参考にしてみて下さい。
動作確認は、GitLab + gitolite + apache + mod_wsgiです。suEXECを使っているので、ドキュメントルートの下に配置する必要があるようです。例えば/var/www/gitlab-http/glgl-http-authというように配置して実行属性をつけて下さい。apacheの設定はexample.confを参考にしてみて下さい。~
まだ不親切な内容ですが、コメント欄で指摘があれば情報を足していきたいと思います。
*** 使い方 [#p9dd1c42]
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という感じ)。
** コメント [#g71b37b9]
#comment