someone's notebook

誰かさんの書いたジャポニカ学習帳

ゼロからのGitLabインストール手順(CentOS6.2)

2012/12/30 追記 この記事は既に古いです。GitLabの最新バージョンではインストール手順が一部異なります。

GitとRuby環境周りの勉強で、GitHubクローンのGitLabを入れてみました。

  • 環境
$ cat /etc/redhat-release
CentOS release 6.2 (Final)
$ uname -a
Linux oklahomaok.example.com 2.6.32-220.13.1.el6.x86_64 #1 SMP Tue Apr 17 23:56:34 BST 2012 x86_64 x86_64 x86_64 GNU/Linux
  • 準備

epelをリポジトリに追加します。
Rubyやgitolite、GitLabで使用する怒濤のパッケージ群を入れます。
精査していないので、ちょっと無駄なものが多いかもです。

$ rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm
$ vim /etc/yum.repos.d/epel.repo #enabled=0に変更
$ yum update
$ yum -y groupinstall 'Development Tools' 'Additional Development' --enablerepo=epel
$ yum -y install readline readline-devel ncurses-devel gdbm-devel glibc-devel tcl-devel openssl-devel curl-devel expat-devel db4-devel byacc gitolite sqlite-devel gcc-c++ libyaml libyaml-devel libffi libffi-devel libxml2 libxml2-devel libxslt libxslt-devel libicu libicu-devel system-config-firewall-tui python-devel --enablerepo=epel
  • gitoliteインストール&ユーザー準備

gitユーザーを追加します。

$ adduser --shell /bin/sh --home /home/git git
$ passwd -uf git
$ visudo

以下を追記します。
## Allow root to run any commands anywhere
root  ALL=(ALL)   ALL
git ALL=(ALL)   ALL

$ su git
$ git config --global user.name "Git Administrator"
$ git config --global user.email "git@localhost"
$ mkdir .ssh
$ cd .ssh
$ ssh-keygen -t rsa -N "" -f id_rsa

Gitのホストとなるgitoliteを入れます。

$ cd
$ ln -s ~/.ssh/id_rsa.pub gitadmin.pub
$ git clone git://github.com/gitlabhq/gitolite
$ gitolite/src/gl-system-install
$ sh -c "PATH=/home/git/bin:$PATH; gl-setup /home/git/gitadmin.pub"

.gitolite.rcの編集画面が開くので以下のように変更します。

#$REPO_UMASK = 0077;
$REPO_UMASK = 0007;

gitolite-adminにアクセスできるか確認します。

$ ssh localhost #接続テスト known_hostsに鍵を追加する
$ git clone git@localhost:gitolite-admin
$ rm -rf gitolite-admin/

gitlabhqユーザを用意します。

$ exit #root
$ useradd gitlabhq
$ usermod -G git gitlabhq
$ chmod g+rx /home/git
$ mkdir /home/gitlabhq/.ssh
$ cp /home/git/.ssh/id_rsa /home/gitlabhq/.ssh/gitadmin
$ chown gitlabhq:gitlabhq -R /home/gitlabhq/.ssh/
$ su gitlabhq
$ vim ~/.ssh/config

ポートや秘密鍵ファイル名は適宜変更してください。

Host localhost
  HostName localhost
  User git
  IdentityFile ~/.ssh/gitadmin
  Port 22
$ chmod 600 ~/.ssh/config

$ git config --global user.email "gitadmin@localhost"
$ git config --global user.name "gitadmin"
$ ssh localhost #接続テスト known_hostsに鍵を追加する
$ git clone git@localhost:gitolite-admin #gitolite-adminにアクセスできるか確認
$ rm -rf gitolite-admin/

Rubyはrbenvを/usr/local/にインストールしてユーザグループ共通(ここではrubyist)で使うようにしました。

$ exit
$ cd /usr/local
$ git clone https://github.com/sstephenson/rbenv.git
$ mkdir rbenv/shims rbenv/versions rbenv/plugins
$ groupadd rubyist
$ chgrp -R rubyist rbenv
$ chmod -R g+rwxXs rbenv
$ cd rbenv/plugins
$ git clone git://github.com/sstephenson/ruby-build.git
$ cd ruby-build/
$ ./install.sh

$ vi /etc/profile

ユーザグループ共通のRuby環境が不要であれば、.bashrcや.zshrcに追記でもいいと思います。

export RBENV_ROOT="/usr/local/rbenv"
export PATH="/usr/local/rbenv/bin:$PATH"
eval "$(rbenv init -)"


再度ログインしてrbenvでRubyをインストールします。

$ which rbenv
$ rbenv install #リスト表示
$ rbenv install 1.9.3-p194
$ rbenv rehash
$ rbenv global 1.9.3-p194

$ gem update --system
$ gem update
$ gem install bundler --no-rdoc --no-ri
$ rbenv rehash
  • Redis

どこで使うのかわかってないのですが、KeyValueStoreですね。

$ yum install -y python-devel python-pip redis libicu-devel --enablerepo=epel
$ pip-python install pygments

$ chkconfig redis on
$ service redis start

DBはMySQLを使います。

yum install mysql-server
vim /etc/my.cnf
service mysqld start

my.cnfで文字コードを修正します。(抜粋)

[mysqld]
character-set-server=utf8
skip-character-set-client-handshake

[mysql]
default-character-set=utf8
  • GitLab

やっと本題のGitLabをインストールします。

$ su gitlabhq
$ git clone git://github.com/gitlabhq/gitlabhq.git
$ cd ./gitlabhq

$ bundle install --deployment --without development test

サンプルファイルからdatabase.ymlのMySQLアカウントとgitlab.ymlのホスト名などを変更しました。

$ cp config/database.yml.example config/database.yml
$ cp config/gitlab.yml.example config/gitlab.yml
$ cp vendor/bundle/ruby/1.9.1/gems/unicorn-4.3.1/examples/unicorn.conf.rb config/

$ vim config/database.yml
$ vim config/gitlab.yml
$ vim config/unicorn.conf.rb

unicorn_conf.rbはRedmineの設定を行ったときとほぼ変わらずでした。

worker_processes 4
#working_directory "/home/gitlabhq/gitlabhq"
listen "/tmp/.sock", :backlog => 64
listen 8080, :tcp_nopush => true
timeout 30
pid File.expand_path("tmp/pids/unicorn.pid", ENV['RAILS_ROOT'])
stderr_path File.expand_path("log/unicorn.stderr.log", ENV['RAILS_ROOT'])
stdout_path File.expand_path("log/unicorn.stdout.log", ENV['RAILS_ROOT'])

preload_app true
GC.respond_to?(:copy_on_write_friendly=) and
  GC.copy_on_write_friendly = true

before_fork do |server, worker|
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

RakeコマンドでDBをセットアップして起動します。

$ bundle exec rake db:setup RAILS_ENV=production
$ bundle exec rake db:seed_fu RAILS_ENV=production

$ bundle exec unicorn_rails -E production -c config/unicorn.conf.rb

8080ポートにアクセスするとログインページが表示されます。
ひとまずGNU Screenでフォアグラウンドで起動して、デタッチしました。
オプション-Dでデーモンで起動してもいいと思います。

バーチャルホストでつないでみましたが、Apacheの方が詳しい方はApacheでもいいと思います。私はどちらも詳しくないのでNginxを試してみました。
Redmineなど他のRailsアプリと同じサーバで動作させる際には、redmine.example.comとgitlab.example.comなどサーバ名を変更して切り替えることが可能です。

$ yum install nginx --enablerepo=epel
$ vim /etc/nginx/conf.d/virtual.conf
$ service nginx start

/etc/nginx/conf.d/virtual.confは新規に作成します。

server {
    listen       80;
    server_name  gitlab.example.com;

    location / {
      if (-f $request_filename) { break; }
      proxy_set_header X-Real-IP  $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect off;
      proxy_pass http://127.0.0.1:8080;
    }
}


いやあ、割と大変ですね。
注意点としては日本語のコミットメッセージでPushするとGitLabで閲覧不可になる事象が多々発生します。
英語でコミットメッセージ書いた方が無難かもです。(私の環境だけ?)


プライベートリポジトリが欲しいだけならBitbucketにした方がはるかにコストがかからないような気がします。
Fedora/Ubuntuだと導入が楽みたいですが、誰か教えてくださいな。

  • 参考

Installing GitLab on CentOS 6.2 (Part 1)
Installing GitLab on CentOS 6.2 (Part 2)
CentOS 6.2 に GitLab をインストールする - akishin999の日記
全ユーザーで共通のrbenv+ruby-buildを使用する環境を構築する - 一分一秒真剣勝負!
CentOS/MySQL/初期設定 - ひつじ帳

Fork me on GitHub