GitLab を CentOS 6.3 にインストール

GitLab とは

GitLab は、GitHub のクローンで、GitHub みたいにパブリックにしたくない場合、自分のサーバーにプライベートサービスとして使うことができるパッケージ。自分で git のリポジトリ立てる場合、管理が大変になってくるので、ブラウザで管理できるのは非常に楽である。

事前準備

ruby

ruby が必要になるので環境をrvmかrbenvかをインストールしておく。前に rbenv の記事は書いてあるので、参考に。
rbenv を CentOS 6.3 にインストール - 俺の成長日記

DB(MySQLPostgreSQL, SQLite3 いずれか)

GitLab のアカウント管理に RDB を利用するので、MySQL、PostreSQL、SQLite3 いずれかをインストールしておく。
MySQL のインストールは以前記事に書いてあるので、参考にする。
http://d.hatena.ne.jp/katsuren/20120919/1348067825

Redis

KVS の DB として Redis も利用しているので、これもインストールしておく。
これも以前書いてる。参考:CentOS 6.2 サーバー構築手順 - 俺の成長日記

Apache

今回はApacheを使う。GitLabはRailsで作られているので、Passenger のインストールが必要になる。Apacheコンパイルするときに、mod_proxy を有効にしておく。

Passengerのインストール

rubygems から passenger をインストールしておく。

# gem i passenger
ちなみに i は install の略らしい(ドヤァ)gem install 〜 でも同じ挙動になる。
# rbenv rehash
# passenger-install-apache2-module

成功したら、conf にこれを書いてね、っていうのがでてくるので、${APACHE_ROOT}/conf.d/passenger.conf あたりに指示されたものを書いとく。

The Apache 2 module was successfully installed.

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /usr/local/rbenv/versions/1.9.3-p286/lib/ruby/gems/1.9.1/gems/passenger-3.0.17/ext/apache2/mod_passenger.so
   PassengerRoot /usr/local/rbenv/versions/1.9.3-p286/lib/ruby/gems/1.9.1/gems/passenger-3.0.17
   PassengerRuby /usr/local/rbenv/versions/1.9.3-p286/bin/ruby

After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!
pip のインストール
# cd /usr/local/src
# curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py
# python get-pip.py

下記のようなエラーがでたら setuptools が入ってない。

An error occured while trying to run get-pip.py. Make sure you have setuptools or distribute installed.

ので、yum から setuptools を入れる。

# yum install -v python-setuptools
ユーザーの作成

git / gitlab で必要なユーザーを作成しておく。あらかじめ作られている httpd ユーザーは apache とする。今回は httpd 経由で色々操作するので、gitlab ユーザーは作成せず、apache ユーザーに必要な権限を与えていく。

# useradd git
httpd ユーザーを git グループに追加
# usermod -a -G git apache

apachessh キーを作成する

# mkdir -p /home/apache/.ssh
# chmod 700 /home/apache/.ssh
# chmod 700 /home/apache
# chown apache:apache -R /home/apache
# sudo -H -u apache ssh-keygen -q -N '' -t rsa -f /home/apache/.ssh/id_rsa

yum パッケージで httpd をインストールしている場合は、apache ホームディレクトリが /var/www なので、上記ではなくて下記のようになる。

# mkdir -p /var/www/.ssh
# chmod 700 -R /var/www/.ssh
# chown apache:apache -R /var/www
# sudo -H -u apache ssh-keygen -q -N '' -t rsa -f /var/www/.ssh/id_rsa

以降、apache のホームディレクトリ関連は /var/www に置き換えて考えること。


gitolite のインストール

git の管理は、gitolite というアプリケーションで行う。
GitHub - sitaramc/gitolite: Hosting git repositories -- Gitolite allows you to setup git hosting on a central server, with very fine-grained access control and many (many!) more powerful features.

# cd /home/git
# sudo -H -u git git clone https://github.com/sitaramc/gitolite.git
# sudo -u git -H mkdir bin
# sudo -u git sh -c 'echo -e "PATH=\$PATH:/home/git/bin\nexport PATH" >> /home/git/.profile'
# sudo -u git sh -c 'gitolite/install -ln /home/git/bin'

パス無しで操作できるように、apache ユーザーとのキー交換を行う。

# cp /home/apache/.ssh/id_rsa.pub /home/git/apache.pub
# chmod 0444 /home/git/apache.pub
# chown git:git /home/git/apache.pub
# sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; gitolite setup -pk /home/git/apache.pub"
# sudo -u git -H sed -i 's/0077/0007/g' /home/git/.gitolite.rc

それから、なんかこれを編集しないとプロジェクトの追加とかができなかった。

# sudo -u git vim /home/git/.gitolite.rc

// この部分を
GIT_CONFIG_KEYS             =>  '',
// こんな感じに変更
GIT_CONFIG_KEYS             =>  '.*',

パーミッションを変更する。

# chmod -R g+rwX /home/git/repositories/
# chown -R git:git /home/git/repositories/

どうやらリポジトリを直に apache が見ることがあるようで、git のホームディレクトリにグループユーザーの権限も付与しておく。

# chmod g+rx /home/git

ここまできたら、gitolite が動作しているか確認する。ここで、know_hosts に追加してもよいか聞かれるので、yes にしておく。

# cd /tmp
# sudo -u apache -H git clone git@localhost:gitolite-admin.git 
git clone に成功したら
# rm -rf gitolite-admin

豆知識。gitolite は変更をすべて git 上で行う。だから、変更を /home/git/.gitolite のディレクトリに対して行っても意味が無いことが多い。上記の gitolite-admin を clone して、その中身を変更、push することで設定が反映される。

GitLab のインストール

必要なパッケージのインストール

# gem i charlock_holmes --version '0.6.8'
# pip install pygments
# gem i bundler
# rbenv rehash

GitLab の公開用のディレクトリを作成して、gitlabhq をダウンロードする。ルートディレクトリは /home/project/gitlab とする。

# mkdir -m 775 -p /home/project/gitlab
# chown apache:apache -R /home/project
# cd /home/project/gitlab
# sudo -H -u apache git clone -b stable https://github.com/gitlabhq/gitlabhq.git .
設定ファイルをコピーする。
# sudo -u apache cp config/gitlab.yml{.example,}

設定ファイルの中身を編集する。(gitlab.yml)

web:
  host: hoge.example.com
  port: 443
  https: true

この部分を適当なドメインに設定する。今回は自分はSSLを使うので、portとhttpsを変更した。

git_host:
  admin_uri: git@localhost:gitolite-admin
  base_path: /home/git/repositories/
  hooks_path: /home/git/.gitolite/hooks/
  gitolite_admin_key: apache
  git_user: git
  upload_pack: true
  receive_pack: true
  host: hoge.example.com
  port: 22

あとはこのgit_hostの項目を変更する。
gitolite_admin_key が gitlab ではなく、今回は apache で設定したので、変更する。
それからhost,portに関してもコメントアウトを外して、適当なドメイン/ポートを設定する。ここに設定したドメインが GitLab に表示される、git@hogehoge:fuga.git のhogehogeの部分に反映される。

そしてデータベースの設定を行う。

データベース設定ファイルは使っている DB のものをコピーする。
MySQL
# sudo -u apache cp config/database.yml{.mysql,}
PostgreSQL
# sudo -u apache cp config/database.yml{.postgres,}
SQLite
# sudo -u apache cp config/database.yml{.sqlite,}
ここでconfig/database.ymlを開いて、適当な値を設定する。

使用するDBに応じたgemをインストールする。

MySQL
# bundle install --without development test sqlite postgres --deployment
PostgreSQL
# bundle install --without development test sqlite mysql --deployment
SQLite
# bundle install --without development test mysql postgres --deployment

DBをセットアップする。

# sudo -u apache -H -i bundle exec rake gitlab:app:setup RAILS_ENV=production

apache ユーザーが非アクティブの場合は、環境変数を毎回追加してあげる必要があった。他に良い方法があれば教えてください。以降、apache が非アクティブな場合で、rbenv を使う必要があれば、 'sh -c "PATH=/usr/local/rbenv:$PATH && 〜" を付けて実行してください。

# sudo -u apache -H sh -c "PATH=/usr/local/rbenv:$PATH && bundle exec rake gitlab:app:setup RAILS_ENV=production"

log, tmp ディレクトリを読み書き可能にしておく。

# chmod 777 -R log
# chmod 777 -R tmp
# chown apache:apache -R log
# chown apache:apache -R tmp

ついでに、vendor の所有者を apache にしておく。

# chown apache:apache -R vendor

hook の設定ファイルをコピーする。

# cp -p /home/project/gitlab/lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive
# chown git:git /home/git/.gitolite/hooks/common/post-receive

このままだと git push するときにエラーでるので、編集する。

# vim /home/git/.gitolite/hooks/common/post-receive 

env 〜
っていうコマンドを実行している箇所の、-i オプションを削除する。


ここまでで、環境設定がうまくできているかをチェックする。

# sudo -u apache -i bundle exec rake gitlab:app:status RAILS_ENV=production

ここでチェックが通らない場合は、そのエラー内容を見て適切に対処する。

ここまできたらhttpdを起動する。

# /etc/init.d/httpd start

resque も起動する。

# cd /home/project/gitlab
# sudo -u apache -i ./resque.sh

あとは普通に利用出来るようになってるはずなので、ブラウザから上記のvhostなんかにアクセスする。
初期設定がうまくできていれば
ID: admin@local.host
PW: 5iveL!fe
でアクセスできるはず。
ログインしたあとは、Adminのパスワードを変更して、ユーザー作成して、プロジェクト作ったり ssh キーを登録したりする。