GitLab 5.1.0をRVM環境で構築する -- Vine 6.1
2013-05-14 : 作成
概要
以前からGitLab 2.1.0を使っていましたが、久しぶりに最新版にしようとしたらいつの間にか5.1.0まで進んでいました。HTTP(S)によるアクセスにも標準で対応しているので、これだけでSSHおよびHTTP(S)が使えるようになっているみたいです。
公式サイトのインストールドキュメントによると、過去とは手順も全く違うようだったので、まっさらな状態からインストールしてみたので記録しておきます。2.1.0と比べるとgitoliteのインストールが不要になったり、Apacheと使う場合にpassengerを使わずにリバースプロキシを使うようになったなどの変更が見受けられました。手順はだいぶスッキリしましたが、相変わらず敷居は高いと思います。Linuxによるサーバ管理の基礎知識ぐらいは必要かもしれません。
大まかな流れは以下のようになります。
- 前提条件の準備
- aptによる必要なプログラムのインストール
- Vine 6で不足しているredisパッケージのインストール(作成)
- Gitのバージョンアップ(1.7.12.4)
- GitLabと依存プログラムのインストール
- GitLab実行ユーザー(git)の作成
- RVM環境の構築(Ruby 1.9.3のインストール)
- GitLab Shellのインストール
- データベースの作成(PostgreSQL)
- GitLabのインストールとセットアップ
- 初期化スクリプトの設定
なお、使用環境はVine Linux 6.1で、RVM(Ruby Version Manager)環境を用いて構築します。設定が少し増えますがVirtualHostを使うことでGitLab 2.1との共存も可能です。
前提条件の準備
ビルドに必要なライブラリなどをインストールします。ほとんどはaptでインストール可能ですが、redis-serverおよびgitは別途インストールが必要です。
aptによる必要なプログラムのインストール
自動解決されるためインストールする順番は特にありませんが、これらをすべてインストールします。
# apt-get install build-essential zlib-devel libyaml-devel openssl-devel gdbm-devel \ readline-devel ncurses-devel libffi-devel sqlite3-devel libxml2-devel libxslt-devel # apt-get install libicu-devel # apt-get install postgresql-server postgresql-devel
libicu-develはRubyモジュールのcharlock_holmesのインストールに必要です。
RedisおよびGitのインストール
セッション管理などに使用されるRedisサーバはVineの標準リポジトリに収録されていないので手動でインストールします。また、Vine6のGitは1.7.4ですが、GitLabに使うには古いので最新版である1.8.2.3にアップグレードします(1.7系の最新版である1.7.12.4でも動作しましたが、日常的なコマンドとして使用する際にgit clone https://〜で通信できなかったので、1.8のほうが良さそうです)。
以下のページからダウンロードしてインストールします。
- Vine6 RPMパッケージ/git 1.7.12.4-1vl6 -- 1.8.2.3は近々アップ予定
- Vine6 RPMパッケージ/redis 2.4.6-1vl6
# apt-get install perl-Git-1.7.12.4-1vl6.x86_64.rpm git-1.7.12.4-1vl6.x86_64.rpm # apt-get install redis-2.4.6-1vl6.x86_64.rpm
Pythonの別名シンボリックリンクをはる
/usr/bin/pythonに対してpython2という名前のシンボリックリンクを作成します。これはファイル内容を表示する際に使用されるため、リンクしないとInternal server errorが出ます。
# cd /usr/bin # ln -s python python2
GitLabのインストール
実行ユーザーの作成
GitLabを実行するユーザーgitを作成します。ホームディレクトリは/home/gitにします。公式ドキュメントではnologin設定で作るように書いてありますが、初期設定を行いやすくするためログイン可能とします。
# groupadd -g 600 git <-- GID:600で作成 # useradd -m -g 600 -u 600 git <-- UID:600で作成 # passwd git <-- シェルで作業するのでパスワードを設定しておく # su - git <-- ユーザーgitで作業 % git config --global user.name "GitLab" % git config --global user.email "git@localhost"
user.nameとuser.emailを設定しておかないとGitLabでの動作の時にエラーが発生します。
以降、インストールはユーザーgitで行います。
RVM環境の構築
GitLabはRuby 1.9.2以降が必要なので、異なるバージョンのRubyを使用するためのRVM環境を構築します。この環境で使用することでRubyのモジュール等をシステムにインストールすることなく、ホームディレクトリだけで完結させることができます。この作業はユーザーgitで行います。
cURLでファイルを取得する際に証明書のエラーが出るので、insecureを.curlrcに書き込んでから作業を行います。作業が終わったらinsecureを解除してください。なお、Ruby 1.9のインストールはビルドが行われるため10分ほど時間がかかります。
$ cd /home/git $ echo insecure >> ~/.curlrc $ \curl -L https://get.rvm.io | bash -s stable $ rvm install 1.9 <-- 1.9系の最新が入る(2013年5月14日の時点では1.9.3p392) $ rvm use 1.9 <-- インストールした1.9系を選択 $ gem install bundler $ gem install charlock_holmes --version '0.6.9.4'
GitLab Shellのインストール
GitLab ShellはGitLab用のSSHアクセスおよびリポジトリ管理用プログラムだそうです。
$ cd /home/git $ git clone https://github.com/gitlabhq/gitlab-shell.git $ cd gitlab-shell $ git checkout v1.3.0 $ cp config.yml.example config.yml
設定ファイルconfig.ymlをエディタで開いてgitlab_urlの値を修正します。
# Url to gitlab instance. Used for api calls. Should be ends with slash.
gitlab_url: "http://gitlab.example.co.jp/" <-- 適切なURLにします
修正後インストールします。
$ ./bin/install
この時、リポジトリ用の/home/git/repositoriesディレクトリが作成されます。
データベースの作成
GitLabで使用するデータベースを作成します。ここではPostgreSQLを使いましたが、MySQLも使えます(公式ドキュメント参照)。
# service postgresql start $ psql -U postgres psql> CREATE USER git WITH PASSWORD '$password'; psql> CREATE DATABASE gitlabhq_production OWNER git; psql> \q
ここの$passwordは使用するパスワードを指定してください。GitLab設定の際に必要になるので忘れないようにしてください。以下のコマンドで開けるかどうかを確認してください。抜けるときは\qです。
$ psql -d gitlabhq_production
GitLabのインストール
GitLabを取得し、必要な手順を行います。これもすべてユーザーgitで行います。
$ cd /home/git $ git clone https://github.com/gitlabhq/gitlabhq.git gitlab $ cd gitlab $ git checkout 5-1-stable <-- 5.1.0をチェックアウトします $ cp config/gitlab.yml.example config/gitlab.yml
config/gitlab.ymlの編集
$ mkdir /home/git/gitlab-satellites $ mkdir tmp/pids $ mkdir tmp/sockets $ mkdir public/uploads $ cp config/puma.rb.example config/puma.rb $ cp config/database.yml.postgresql config/database.yml $ bundle install --deployment --without development test mysql
- config/puma.rbの修正
- Apacheで使うために、pumaのバインド先をlocalhostのTCPポートにします。
61: bind 'tcp://127.0.0.1:9292' <-- localのみ 62: #bind "unix://#{application_path}/tmp/sockets/gitlab.socket" <-- コメントアウト
- config/database.ymlの修正
- ユーザー名とパスワードを適切に指定します。
GitLabのセットアップと初期化スクリプト
- GitLabのデータベースの初期化
- この段階でRedisを起動します。
# service redis start $ cd /home/git/gitlab $ bundle exec rake gitlab:setup RAILS_ENV=production
- ユーザーgitの設定
- 初期化スクリプトでのsudoおよびSSHでのpushに対応するために.bashrcにRVMの設定を書き込みます。インストール時に自動でPATHの設定は追加されますがsource設定が書き込まれないので末尾に追加します。
PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting <-- 自動で追加されている [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" <-- 追加
- 初期化スクリプトの設定
- 初期化スクリプトをインストールします。この作業はrootで行います。
# curl --output /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlabhq/master/lib/support/init.d/gitlab # chmod +x /etc/init.d/gitlab
chkconfigで登録できるように/etc/init.d/gitlabの内容を修正します。3: # GITLAB 4: # Maintainer: @randx 5: # App Version: 5.1 6: # chkconfig: 2345 21 80 <-- 追加 7: # description: GitLab git repository management <-- 追加
chkconfigに登録します。# chkconfig --add gitlab
Apacheの設定
Apacheの詳細な設定については述べません。最低限の設定は以下になります。
- /etc/apache2/conf.d/gitlab.conf
ProxyPass / http://127.0.0.1:9292/ ProxyPassReverse / http://127.0.0.1:9292/ ProxyPreserveHost On
このように設定すればhttp://gitlab.example.co.jp/という感じでGitLabにアクセスできるはずです。
なお、HTTPSを使う場合は、VirtualHostの中に以下の行を追加します。RequestHeader set X-Forwarded-Proto "https"
このパラメータがないとページ遷移の際にHTTPに飛ばされてしまうことがあります。
chkconfigの設定
必要に応じて設定します。
# chkconfig postgresql on # chkconfig redis on # chkconfig gitlab on # chkconfig apache2 on
お疲れ様でした。これで(たぶん)使えるはずです!
問題はRVM周りで起こりやすいので、エラーが発生した場合はRVMの内容を調べてみてください。
トラブルシューティング
とりあえず気づいたことをメモしておきます。
SSHでpushできない
- 問題
- SSH経由でpushするときに以下のエラーが出ました。
[dobuo@localhost exam]$ git push git@192.168.0.201:dobuo/exam.git Enter passphrase for key '/home/dobuo/.ssh/id_rsa': /home/git/gitlab-shell/bin/gitlab-shell:8: undefined method `require_relative' for main:Object (NoMethodError) fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
- 原因
- これはRubyのバージョンが1.9.2以上になっていないことが原因で、RVMを使って構築した時に起こるようです。私の環境では標準のRuby(aptでインストールされるRuby)は1.8のためエラーが出るようです。なお、標準のRubyをインストールしていない場合はうまくいくため、パスの順序を変えれば解決できるようです。
- 解法
- ユーザーgitの設定のように修正します。別の方法としてPATHの設定を以下のようにしても解決しました。
PATH=$HOME/.rvm/bin:$PATH <-- 標準パスよりも$HOME/.rvm/binを先にする
状況に合わせて対応してください。
ファイル内容が表示されない
- 問題
- ファイル内容を表示させた時何も表示されない。production.logを見ると以下のメッセージが出力されている。
Started GET "/dobuo/chocolat-wiki/blob/master/code/myrpc.js?_=1368612329078" for 192.168.155.109 at 2013-05-15 19:05:32 +0900 Processing by BlobController#show as JS <-- この行がポイント Parameters: {"_"=>"1368612329078", "project_id"=>"dobuo/myrpc", "id"=>"master/code/myrpc.js"} Rendered blob/_actions.html.haml (36.1ms) Rendered blob/_text.html.haml (292.4ms) Rendered blob/_blob.html.haml (339.9ms) Rendered blob/show.js.haml (343.3ms) Completed 500 Internal Server Error in 488ms ActionView::Template::Error (EPIPE): 9: .file_content.code 10: - unless blob.empty? 11: %div{class: user_color_scheme_class} 12: = raw blob.colorize(formatter: :gitlab) 13: - else 14: %p.nothing_here_message Empty file app/views/blob/_text.html.haml:12:in `_app_views_blob__text_html_haml___691087839_78158170' app/views/blob/_blob.html.haml:23:in `_app_views_blob__blob_html_haml___344748651_79771910' app/views/blob/show.js.haml:3:in `_app_views_blob_show_js_haml__1016274567_81034620'
- 原因
- コードのシンタックスハイライトをPythonで処理しているようで、そのため/usr/bin/python2が存在しないとレンダリングされないようです。赤字の部分のように#show as 書式が判断のポイントかも。そのためshow as HTMLなどの場合もあるようです。
- 解法
- /usr/bin/pythonに/usr/bin/python2という名前でリンクを張ります。上記参照。
コメントなどありましたらどうぞ。