GitLab 5.0 を debian + Apache + rvm 環境にインストール

2013-04-08 (月)
カテゴリー :
Git
GitLab
Pocket

前口上

お金がない人の GitHub Enterprise とかdisられてるんだが愛されてるんだかわからない GitLab をインストールしようと思ったのですが、自分のサーバ内の環境が公式にあるインストールの環境とは微妙に違うので、はまった点などなどをメモがてら備忘録を残そうと思って記事にしてみました。誰かの役に立つとさらにうれしいですが、大変長い。ちなみにこの記事は 2013/04/03 現在のものです。

2013/04/23 追記

5.1 版も併記。
5.0 からアップデートする場合はこちらの記事へどうぞ

セットアップ環境

・さくらVPS(旧512プラン) 現在メモリは 1GB に上がってます
・debian squeeze(6.0.4)64bit
・ssh ポートはデフォから変更(ここでは 2222 とする)
・Ruby は rvm でユーザ単位のインストール
・ウェブサーバは Apache でリバースプロキシ設定
[5.0] 最新過ぎても怖いので 5-0-stable ブランチでセットアップする
[5.1] 5.1 にする場合は 5-1-statble ブランチを使用
・アクセスする URL は gitlab.example.com

基本的な流れは公式のインストール方法を参照。

依存パッケージ

apt-get ではなく aptitude を使ってるので差し替えてあります。また redis-server はバージョンが低いのであとで別途インストールするため抜いてあります。さらに Postfix を入れるようになっているのですが、ここら辺のメール(MTA)関連は Exim4 だったり Sendmail や qmail だったりで人によって違うと思うので各自で設定するといいと思います。ちなみに私は Exim4 で作った環境があったのですが、せっかくなので Postfix に乗り換えてみました。特に再設定しなきゃいけないこともなくメールも飛んだので楽でした。というわけで Postfix でもOKな人は下記のパッケージに加えて postfix も指定しましょう。

sudo aptitude install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl git-core openssh-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev

ちなみに Git は debian では歴史的な事情で昔はパッケージ名に git が使えなくて git-core でインストールしてましたが、いつからか git でも git-core でも問題なくなりました。この後の行程で結局 git-core をインストールしてるかを判断して入れようとしてるっぽいので、 git が入れてあってもここで念のため指定しておきます。

redis

KVS の redis はデフォルトだとバージョンが 1.2.6-1 で、GitLab でエラーを起こすため、別のところからインストールします。

sudo vim /etc/apt/sources.list.d/squeeze-backports.list

中身は下記。

deb http://backports.debian.org/debian-backports squeeze-backports main

一旦アップデートしてからインストール。

sudo aptitude update
sudo aptitude -t squeeze-backports install -y redis-server

これでバージョンは 2.4.15-1~bpo60+2 になりました。

Git ユーザ作成

GitLab は git ユーザを作ってそこに入れるようにします。

sudo adduser --disabled-login --gecos 'GitLab' git

今後 git ユーザに sudo 権限が必要で、さらに disabled-login で作ったため password はないので visudo で git ユーザを NOPASSWD にします(正直どうかと思うけど)

sudo visudo

# User privilege specification のブロックに下記を追加

git ALL=(ALL) NOPASSWD:ALL

ところで特に設定していないと nano エディタが起動するんですが、普段 vim 使いのため操作方法がわからず、最初は保存して終了すらよくわかりませんでしたが、 Ctrl+X を押して変更があれば y を押して Enter で保存して終了でOK。

Python

Python はデフォルトパッケージで 2.5 以上なのでそのまま入れればOKです。ただし3系はダメっぽいです。また python2 という名前で実行できないとダメらしいのでシンボリックリンクだけは作っておきます。

sudo aptitude install -y python
sudo ln -s /usr/bin/python /usr/bin/python2

rvm で Ruby のインストール

Ruby 自体のバージョンや環境を色々入れ替えたりできて便利な rvm を使って Ruby を入れるため、まずは git ユーザに変更。

sudo su - git

Ruby のバージョンは公式のインストール方法が 1.9.3-p327 なので 1.9.3 系の最新っぽいものにしておきます。

\curl -L https://get.rvm.io | bash -s stable --autolibs=3 --ruby=1.9.3-p392
source /home/git/.rvm/scripts/rvm
ruby --version
  ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-linux]

gitlab-shell

git ユーザで以下の作業。

cd /home/git
git clone https://github.com/gitlabhq/gitlab-shell.git
cd gitlab-shell
cp config.yml.example config.yml
vim config.yml

URL を自分の環境用に編集します。

- gitlab_url: "http://localhost/"
+ gitlab_url: "http://gitlab.example.com/"

で、インストール実行

./bin/install

DB セットアップ

ここでは MySQL を選択します。環境がない場合は先にインストールを。そしてログイン。

sudo aptitude install -y mysql-server mysql-client libmysqlclient-dev
mysql -uroot -p

mysql ログイン後、下記を実行してセットアップ。ここでは gitlab ユーザのパスワードを gitlab1234 としてますが、もちろん各自書き換えで。

CREATE USER 'gitlab'@'localhost' IDENTIFIED BY 'gitlab1234';
CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'localhost';
exit

GitLab 本体

git ユーザで以下の作業。
*** ここから 5.0 ***

cd /home/git
git clone https://github.com/gitlabhq/gitlabhq.git gitlab
cd /home/git/gitlab
git checkout 5-0-stable
cp config/gitlab.yml.example config/gitlab.yml
vim config/gitlab.yml

*** ここまで 5.0 ***
*** ここから 5.1 ***

cd /home/git
git clone https://github.com/gitlabhq/gitlabhq.git gitlab
cd /home/git/gitlab
git checkout 5-1-stable
cp config/gitlab.yml.example config/gitlab.yml
vim config/gitlab.yml

*** ここまで 5.1 ***

- host: localhost
+ host: gitlab.example.com
- email_from: gitlab@localhost
+ email_from: gitlab@example.com
- support_email: support@localhost
+ # support_email: support@localhost
- # ssh_port: 22
+ # ssh_port: 2222

ディレクトリの作成と権限の設定をしときます。現在のディレクトリは /home/git/gitlab です。

chown -R git log/
chown -R git tmp/
chmod -R u+rwX log/
chmod -R u+rwX tmp/

mkdir /home/git/gitlab-satellites

mkdir tmp/pids/
chmod -R u+rwX  tmp/pids/

*** ここから 5.0 ***

cp config/unicorn.rb.example config/unicorn.rb

Rails のサーバ unicorn のポートを 3000 で Listen に設定します。

vim config/unicorn.rb
- #listen "127.0.0.1:8080"  # listen to port 8080 on the loopback interface
+ listen "127.0.0.1:3000"  # listen to port 8080 on the loopback interface
- listen "#{app_dir}/tmp/sockets/gitlab.socket"
+ #listen "#{app_dir}/tmp/sockets/gitlab.socket"

*** ここまで 5.0 ***
*** ここから 5.1 ***

cp config/puma.rb.example config/puma.rb

Rails のサーバ puma を設定します。 socket 起動をコメントアウトしとけば、デフォルトポート 9292 で Listen してくれるようです。

vim config/puma.rb
- bind “unix://#{application_path}/tmp/sockets/gitlab.socket”
+ #bind “unix://#{application_path}/tmp/sockets/gitlab.socket”

*** ここまで 5.1 ***
DB の設定を編集します。

cp config/database.yml.mysql config/database.yml
vim config/database.yml
- username: root
+ username: gitlab
- password: "secure password"
+ password: "gitlab1234"

GEM のインストール

gem install bundler
gem install charlock_holmes --version '0.6.9'
bundle install --deployment --without development test postgres

ちなみに MySQL でセットアップしたのにここで最後に postgres を指定してるのは何かと思ったのですが、よく見ると without オプションなので postgres が書かれててOKというオチでした。

DB の初期データ投入とか

bundle exec rake gitlab:setup RAILS_ENV=production

すでにある場合は作りなおす的なことを言われるので yes で。
投入が終わると以下の初期管理ユーザが設定されます。これは共通なのでこの後初めてログインしたときに別の管理ユーザを作ってから削除しましょう。危険ですので絶対放置してはいけません。

Administrator account created:
	login.........admin@local.host
	password......5iveL!fe

起動スクリプト

サーバの起動時に自動起動になるように、起動用のスクリプトも入れて設定します。

*** ここから 5.0 ***

sudo curl --output /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/5-0-stable/init.d/gitlab
sudo chmod +x /etc/init.d/gitlab
sudo update-rc.d gitlab defaults 21

sudo service gitlab start

*** ここまで 5.0 ***
*** ここから 5.1 ***

sudo curl --output /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/5-1-stable/init.d/gitlab
sudo chmod +x /etc/init.d/gitlab
sudo update-rc.d gitlab defaults 21

sudo service gitlab start

*** ここまで 5.1 ***

アプリケーションのチェック

以下のコマンドで環境情報が見られます。

cd /home/git/gitlab
bundle exec rake gitlab:env:info RAILS_ENV=production

以下のコマンドでチェックができます。

bundle exec rake gitlab:check RAILS_ENV=production

このチェックで引っかかったところが3つほど。
(1)git config でユーザ名とメールアドレスが設定されてないと怒られたので以下。

git config --global user.name  "GitLab"
git config --global user.email "gitlab@example.com"

*** ここから 5.0 ***
(2)GitLab Shell version? … FAIL. Please update gitlab-shell to v1.1.0
現在 gitlab-shell のバージョンは 1.2.0 なのに出る。無視しても問題なし。もし修正したければ以下を適用(別にやらなくてもいいので紹介だけ)
http://superuser.com/questions/571668/debian-6-4-gitlab-1-2-0-update-gitlab-1-2-0-to-1-1-0-message
*** ここまで 5.0 ***
*** ここから 5.1 ***
(2)gitlab-shell が v1.3.0 に上がっているため、問題なし
*** ここまで 5.1 ***
(3)Checking Sidekiq … Running? … no
Sidekiq が起動していないということなので、以下のコマンドで起動させておく。

bundle exec rake sidekiq:start RAILS_ENV=production

Apache の設定

公式の説明では Nginx を使っていますが、既存のサービスがすでに Apache 上で動いているので GitLab 用に設定した URL へのアクセスは Apache のリバースプロキシを使って Listen 中の3000ポート(5.1 では 9292 ポート)に向けます。というわけでリバースプロキシのためのモジュールを設定し、バーチャルホストも設定します。
ここでは root または sudo での作業です。

cd /etc/apache2
a2enmod proxy proxy_http
cd sites-available
vim gitlab.example.com

*** ここから 5.0 ***

<VirtualHost *:80>
        ServerName gitlab.example.com

        ProxyPass / http://127.0.0.1:3000/
        ProxyPassReverse / http://127.0.0.1:3000/
        ProxyPreserveHost On
</VirtualHost>

*** ここまで 5.0 ***
*** ここから 5.1 ***

<VirtualHost *:80>
        ServerName gitlab.example.com

        ProxyPass / http://127.0.0.1:9292/
        ProxyPassReverse / http://127.0.0.1:9292/
        ProxyPreserveHost On
</VirtualHost>

*** ここまで 5.1 ***
バーチャルホスト用の記述は最低限の設定なので、ログなどを取る場合は各自でどうぞ。そしてバーチャルホストを適用し apache2 を再起動しておきます。

a2ensite gitlab.example.com
/etc/init.d/apache2 restart

ところでサーバ起動直後だとしばしば 503 になります。しばらくするといけます。なにこれわからん。

ssh 越しの Ruby 利用

rvm で各ユーザごとに入れる Ruby だと、シェルログイン時に .bash_profile とかその辺りのファイルを読んで rvm で入れた Ruby に毎回パスを通しているわけなんですが、これが外から git push なんかをしようとした時に障害になります。通常だと git push なんかでgitプロトコル接続(つまりはssh)だとシェルログインをするわけではないので、環境情報が読み込まれず Ruby が使えません。その為に sshd の設定に一筆書き加えます。

sudo su - git
sudo vim /etc/ssh/sshd_config

 

PermitUserEnvironment yes

これを追加してから下記のことをやっておく。

sudo /etc/init.d/ssh restart

env | grep -E "^(GEM_HOME|PATH|RUBY_VERSION|MY_RUBY_HOME|GEM_PATH)=" > /var/tmp/tempenv
sudo -u git -H cp /var/tmp/tempenv /home/git/.ssh/environment

ところで、この方法だと sshd の設定を変更しなければいけませんが、別の方法もあります。それは rvm で Ruby をインストールするときにユーザ単位で入れるのではなく、マルチユーザで入れる方法を取ることです。これによって上記設定をせずとも Ruby が使えるようになるようです。

仕上げ

初期管理ユーザでログインし、新たに管理ユーザを作ってからブロックか削除しちゃいましょう。また適当にプロジェクトを新規で作ってみて、エラーが出ないかだけ確認しておきましょう。
何かエラーなり問題が起こった場合は、公式のトラブルシューティングを見ましょう。だいたいここに載ってます。
https://github.com/gitlabhq/gitlab-public-wiki/wiki/Trouble-Shooting-Guide

おわりに

大変お疲れ様でした。そもそも Git にも Python にも Ruby にも詳しくないのに無理やりなんとかしようとしているので、間違っているところや冗長なところもあると思いますが、自分ではこれで動いています。ただメール通知や ssh 関連についてはあまりに適当で、めったなことを書けないので各自で調べてください。さてどう考えても順番がおかしいですが、これからちゃんと Git について学んできます!

Pocket

2 Comments

Leave a comment

※ 本サイトのコメントは承認制です。
※ コメント送信後すぐには表示されない可能性がありますのでご注意ください。

twitter : @krengt

[PR]

人気の記事