必見の記事

ローカルで GitHub を構築! Git リポジトリ管理ツール「GitLab」を Mac OS X にインストールしてみた

2013.02.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

GitLab とは

GitLab は Git リポジトリを簡単に管理できるツール Gitolite をブラウザから管理できるようにする Ruby アプリケーションです。 GitHub のオープンソースクローンと呼ばれることから分かるように、UI が GitHub とめっちゃ似ています。

gitlab_top01

GitHub みたいなサービスを使いたい!だけど Public はアレだなということもあると思います。そんなときに便利です。 社内 GitHub として使うケースが主なユースケースだと思います。 しかもすべてローカルだけで作ることができるので、ローカルマシンにインストールすれば、構築後はネットワークなしで GitHub 的な環境を使うことができます! そんな GitLab を Mac OSX Mountain Lion に導入してみたので、その手順をまとめました。

事前準備

git ユーザーを作成する

まずはじめに GitLab の管理者となる "git" という名前のユーザーを作成します。 ログイン中のユーザーでいいやん!と思っていろいろと試行錯誤しましたが GitLab のつくりが git ユーザーであることを前提としてつくられているので大人しく git ユーザーを作ったほうが良さそうです。

gitlab_create_user01

git ユーザーとしてログインし、SSH公開鍵をパスワードなしで作成しておきます。

su - git
ssh-keygen -t rsa -N ''

ここまでで git ユーザー作成は完了です。

リモートログインを有効にする

Gitolite リポジトリのアクセスは SSH 接続になるので、Mac のリモートログインを有効にする必要があります。環境設定の共有を使うと簡単に有効にできます。

gitlab_ssh01

各種ツールをインストールする

必要なツールなどをインストールします。GitLab が Ruby でできているので Ruby を動作させる環境づくりが必要です。必要なツール・ソフトは結構ありますが、開発に必要なツールもいくつかあるので導入済みのものが多いと思います(特に Ruby 開発者)。既に導入済みのツールのところは飛ばしてしまって OK です。

Xcode Command Line Tools のインストール

Homebrew と git を使うために Xcode Command Line Tools をインストールします。Xcode の環境設定からインストールするか Downloads for Apple Developers からインストーラをダウンロードしてインストールしましょう(この場合は開発者登録が必要)。

スクリーンショット_2013_01_22_17_53-2

Homebrew のインストール

Homebrew は OSX 用の UNIX ツールのインストールを管理するツールです。Xcode Command Line Tools がインストールされている環境であれば以下のコマンドを叩くだけで導入可能です。

ruby <(curl -fsSk https://raw.github.com/mxcl/homebrew/go)
[/shell]

<h4>icu4c のインストール</h4>
<p>
icu4c は文字コード変換ライブラリです。GitLab の動作に必要な<strong> charlock_holmes </strong>というライブラリに必要なライブラリになります。とにかく、以下のコマンドを叩いてインストールです。
</p>

brew install icu4c

MySQL のインストール

MySQL も何らかの形でインストールしておきます。phpMyAdmin も一緒に入ってくれて楽チンなので MAMP を使いました。このへんは好き嫌いがあると思うのでご自由に。また以下のコマンドを叩き mysql のクライアントライブラリをインストールしておきます。

brew install mysql

Redis のインストール

Redis は インメモリベースの KVS (Key-Value Store) で、データの出し入れが高速なデータストアです。インストール方法は非常に簡単。以下のコマンドを叩くだけです。

brew install redis

インストール後は以下のコマンドを叩き、自動起動するように設定してセットアップ完了です。

mkdir -p ~/Library/LaunchAgents
cp /usr/local/Cellar/redis/2.6.9/homebrew.mxcl.redis.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

2行目の Redis ディレクトリ内のバージョン名は Redis のバージョンアップによって変わってくるので、コピペせず自分でたどっていってください。

Ruby のインストール

最後は Ruby のインストールです。 Ruby のインストールは git ユーザーで行う必要があるので、まず git ユーザーとしてログインします。

su - git

Ruby は複数バージョンの Ruby を共存させる方法がオススメです。以下の記事を参照してください!

rbenvとruby-buildで複数バージョンのrubyをインストール

Gitolite をインストールする

事前準備完了後、まずは Gitolite をインストールしましょう。なお、これ以降の作業は git ユーザーで行なってください。

su - git

1. Gitolite をインストールする

まずは Gitolite を GitHub のリポジトリからローカルに clone します。そして Gitolite を $HOME/bin にインストールして setup を実行すれば Gitolite が使えるようになります。以下のコマンドを順番に叩けば OK です。Gitolite は GitLab のリポジトリから clone しているところが重要です。

cd /tmp
git clone git clone -b gl-v320 https://github.com/gitlabhq/gitolite.git /Users/git/gitolite
mkdir -p $HOME/bin
gitolite/install -to $HOME/bin
rm -rf gitolite
cd ~/
$HOME/bin/gitolite setup -pk ~./ssh/id_rsa.pub

setup が終わったら、各ディレクトリのパーミッションを GitLab から読めるように変更します。

sudo chmod 750 .gitolite
sudo chown -R git .gitolite
sudo chmod -R ug+rwXs,o-rwx repositories
sudo chown -R git:git repositories

2. gitolite-admin を編集する

Gitolite をインストール・セットアップすると gitolite-admin というリポジトリがデフォルトで作成されています。これは Gitolite のリポジトリにアクセスできるユーザーを管理するリポジトリです。このリポジトリを clone して設定ファイルを書き換えて push すると Gitolite の設定が変更されるしくみになっています。
ということで疎通確認ということで clone してみます。

git clone localhost:gitolite-admin
cd gitolite-admin

無事に clone できたら、git ユーザーが gitolite の管理権限を持てたことになります。

GitLab をインストールする

1. MySQL にデータベースを作成する

まず GitLab に必要なデータベースを作っておきましょう。 gitlabhq_production という名前のデータベースを作成します。 MySQL を MAMP でインストールしている場合は phoMyAdmin から作成できます。

gitlab_mysql01

2. Github から clone する

GitLab のソースを Github から clone します。 GitLab を置きたいディレクトリで以下を実行します。

git clone https://github.com/gitlabhq/gitlabhq.git gitlab
cd gitlab

3. ライブラリをインストールする

次に動作に必要なライブラリをインストールします。
必要なライブラリは GemFile に書かれているので bundle install すれば OK です。

bundle install --deployment --without development test postgres

ちょっと時間がかかりますが、まったり待ちましょう。

4. 設定ファイルを修正する

次に各種設定ファイルを修正します。まずは設定ファイルのサンプルを設定ファイルにします。

cp config/database.yml.mysql config/database.yml
cp config/gitlab.yml.example config/gitlab.yml

サンプルファイルが本番用になったところで、各ファイルを修正していきます。まずは database.yml です。MAMP を使っている場合、socket は上記の通りになります。username と password はもし設定していれば変えてください。

database.yml

#
# PRODUCTION
#
production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: gitlabhq_production
  pool: 5
  username: root
  password: root
  host: localhost
  socket: /Applications/MAMP/tmp/mysql.sock

次に gitlab.yml です。以下のように書き換えていきます。特に環境によって変わってくるのは repos_path と hooks_path です。自分の環境 (Gitolite をインストールした設定) にあわせて指定してください。

gitlab.yml

# Uncomment and customize if you can't use the default user to run GitLab (default: 'gitlab')
user: git

...

#
# 3. Advanced settings
# ==========================

# GitLab Satellites
satellites:
  # Relative paths are relative to Rails.root (default: tmp/repo_satellites/)
  path: tmp/gitlab-satellites/

## Backup settings
backup:
  path: tmp/backups/   # Relative paths are relative to Rails.root (default: tmp/backups/)
  # keep_time: 604800   # default: 0 (forever) (in seconds)

## Gitolite settings
gitolite:
  admin_uri: localhost:gitolite-admin

  # REPOS_PATH MUST NOT BE A SYMLINK!!!
  repos_path: /Users/git/repositories/
  hooks_path: /Users/git/.gitolite/hooks/
  admin_key: git
  upload_pack: true
  receive_pack: true
  ssh_user: git
  ssh_host: localhost
  # ssh_port: 22
  # config_file: gitolite.conf

5. GitLab をインストールする

最後に以下のコマンドを叩いてインストール!

bundle exec rake gitlab:setup RAILS_ENV=production

がががぁ〜っと DB のテーブルやらレコードやらが作成されていきます。最後に管理者のユーザー名とパスワードが表示されれば完了です!

Administrator account created:

login.........admin@local.host
password......5iveL!fe

ということでまずは動かしてみましょう。以下のコマンドを叩くとサーバーが立ち上がります。production環境で動作させましょう。

bundle exec rails s -e production

動作に成功すると URL が書いてあるのでコピペします。

=> Booting WEBrick
=> Rails 3.2.11 application starting in production on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2013-02-02 02:32:20] INFO  WEBrick 1.3.1
[2013-02-02 02:32:20] INFO  ruby 1.9.3 (2012-10-12) [x86_64-darwin12.1.0]
[2013-02-02 02:32:20] INFO  WEBrick::HTTPServer#start: pid=36941 port=3000

ブラウザでアクセスしてみると…どどーん!

gitlab01

使ってみる

起動できたので実際に使ってみたいと思います。まずは管理ユーザーでログイン。

gitlab02

Dashboard 画面が表示されるので「New Project」でプロジェクトを新規作成してみます。

gitlab05

gitlab04

おやおや。
おやおや。
何かエラーが出ちゃいました。。何かが悪かったようです。エラーログを見てみるとこんな感じでした。↓

February 06, 2013 00:36 -> ERROR -> Gitolite error ->   remote: FATAL: git config 'core.sharedRepository' not allowed
remote: check GIT_CONFIG_KEYS in the rc file
To git@localhost:gitolite-admin
   81541f3..8fb0dc8  master -> master

git ユーザーに権限が正しくわたっていない感じのようです。解決法を探しまくってたら以下の記事を発見。

https://github.com/gitlabhq/gitlabhq/issues/1769

.gitolite.rc ファイルの GIT_CONFIG_KEYS を変えればいけるぜ :) って書いてあるのでそうしてみます :) 。24行目あたりです。

%RC = (
    # if you're using mirroring, you need a hostname.  This is *one* simple
    # word, not a full domain name.  See documentation if in doubt
    # HOSTNAME                  =>  'darkstar',
    UMASK                       =>  0077,

    # look in the "GIT-CONFIG" section in the README for what to do
    GIT_CONFIG_KEYS             =>  '.*',

    # comment out if you don't need all the extra detail in the logfile
    LOG_EXTRA                   =>  1,

再度リポジトリを作成したところ…成功!

gitlab06

あとはログイン中の SSH キーを設定します。

gitlab07

そんな感じで git リポジトリを使うことができるようになりました!あとは作成したリポジトリに対して普通に git コマンドを叩くだけです。例えば、以下のような感じです。

git clone git@localhost:root/sample_app.git
git cd sampleapp
git touch index.html
git add .
git commit -m 'first commit.'
git remote add git@localhost:root/sample_app.git
git push origin master

push した結果を見てみたいと思います。

gitlab08

良い感じに表示されますね!いろいろ使ってみると GitHub より機能は少ないと感じると思いますが、普通に運用するレベルだったら申し分ない機能があると思います。

Pow

上記で立てた GitLab サーバーは WEBrick で一時的に起動しているのでコマンドを叩かないと起動しません。 もっと簡単にサーバーを起動するには Pow が便利です。

gitlab_pow01

Pow を使うとブラウザで http://プロジェクト名.dev と入力するだけでサーバーが立ち上がりアクセスできます。ということで早速インストールします。

curl get.pow.cx | sh

これでインストール終わりです!w
あとはアプリを登録します。

cd ~/.pow
ln -s ~/gitlab

これで http://gitlab.dev でアクセスできるようになりました!と思いきや一部設定が必要です。Pow は development 環境で起動しようとするので今回の場合 production 環境で起動するようにしなければいけません。ということで Gitlab のサーバー起動設定を production に変えます。Gitlab プロジェクトフォルダの直下に .powenv というファイルを置き、中身を以下にします。

export RAILS_ENV=production

これで起動できるはずです!

gitlab_pow02

まとめ

GitLab は通常サーバーにインストールして社内とかで使おうぜ、というものだと思うのでローカルに入れるのは普通しないことだとは思いますが、まずどんなことができるのか知りたかったので入れてみました。実際に導入する段階でいろいろハマったところはありましたが…個人的には最近流行りの Ruby 開発環境の構築手順を知る意味でもすごく勉強になりました。
Mac OS X Server へのインストールもほぼ同様の手順でできると思うので、もし導入する際に参考にしていただければと思います!

参考