今回は、Gitlabの5.0を構築します。
これまで、gitoliteで管理・gitwebで閲覧していましたが、管理が面倒になったので何か別のフロントエンドを導入することを検討していました。
Gitlabはgitoliteの管理機構を利用するらしいという情報を掴み、スムーズに移行できるのではとGitlabに的を絞りました。
導入手順を調べていると、どうやらGitlab5.0からはgitoliteは使用せず、
gitlab-shellという独自のGit管理ツールを使うように変更されたということが発覚。
2分くらい悩んだ結果、gitoliteの導入歴が浅かったこともあり、gitoliteを捨てGitlabに完全移行することを決意しました。
構築環境
・Ubuntu 12.04 Server
・Gitlab 5.1
・nginx 1.2.7
・Redmineとの同居
・Rub1.9.3-p392 をgitユーザに個別インストールして構築
・Gitプロトコルを通さないProxyに閉ざされた環境
・URLはhttp://192.168.169.170:8001
とする
導入手順
基本は公式の手順に従って行う。
大変丁寧に書かれているので、迷うことは無く進めることが出来る。
gitlabhq - installation.md
準備
まずは必要なパッケージを用意。
手順の示すがまま入れていく。
vimmerではないので代わりにnanoを使用。
$ apt-get update
$ apt-get upgrade
$ apt-get install sudo
$ apt-get install nano
$ apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl git-core openssh-server redis-server postfix checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev
$ apt-get install python
$ python --version
$ # 上記コマンドで2.*が出ない場合は、python2.7指定でinstall
$ apt-get install python2.7
$ python2 --version
# 上記コマンドが見つからない場合は、リンクを貼る
$ sudo ln -s /usr/bin/python /usr/bin/python2
gitユーザ作成
Gitlabを管理するユーザを作成。
公式手順と前後するが、Rubyをgitユーザ個別にインストールするので順番を逆に。
$ sudo adduser --disabled-login --gecos 'GitLab' git
Rubyのインストール
今回は、RedmineのRubyとは分けて管理する。
以下で、gitユーザ専用のRubyをインストールする。
Redmine構築の際にお世話になったくじらにっき++さんの手順で構築。
# rbenvインストール
$ cd /home/git
$ git clone git://github.com/sstephenson/rbenv.git .rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> /home/git/.profile
$ echo 'eval "$(rbenv init -)"' >> /home/git/.profile
# ruby-buildインストール
$ mkdir src
$ cd src
$ git clone git://github.com/sstephenson/ruby-build.git
$ cd ruby-build
$ sudo ./install.sh
# Rubyとbundleインストール
$ rbenv install 1.9.3-p194
$ gem install bundle
$ rbenv rehash
$ gem i rbenv-rehash
Gitlab-Shellインストール
これが、Gitlab5.0になってgitoliteの代わりに利用されるGitlab専用のGit管理ツール。
ユーザ管理やアクセス管理を受け持つツールのよう。
# gitユーザとして操作
$ sudo su git
# クローン & 適切なバージョンの選択
$ cd /home/git
$ git clone https://github.com/gitlabhq/gitlab-shell.git
$ cd gitlab-shell
$ git checkout v1.1.0
$ git checkout -b v1.1.0
設定ファイルの編集。
ひな形があるのでそれをそのまま利用する。
$ cp config.yml.example config.yml
手順通りに進めていれば、gitlab_url
以外編集する必要は無いと思われる。
gitlab_url
にGitlabに使用する予定のurlを設定。
gitlab_url : "http://192.168.169.170:8001"
これで準備完了。インストールを行う。
$ ./bin/install
$ exit
DB構築
今回はMySQLを使用。
公式の手順は別ページにある。
$ sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev
$ mysql -u root -p
# ユーザ追加
mysql> CREATE USER 'gitlab'@'localhost' IDENTIFIED BY '*****';
# データベース作成
mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
# 全操作権限を'gitlab'@'localhost'に提供
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'localhost';
mysql> \q
# 試しにgitユーザで接続出来るかテスト
sudo -u git -H mysql -u gitlab -p -D gitlabhq_production
Gitlabのインストール
いよいよ、Gitlab本体をインストール。
先程作成したgitユーザのhome以下に構築する。
$ cd /home/git
最新ソースを取得
$ sudo -u git -H git clone https://github.com/gitlabhq/gitlabhq.git gitlab
$ cd /home/git/gitlab
# stable版を選択
$ sudo -u git -H git checkout 5-0-stable
次に、gitlabのサイト設定とDB設定を行なっていく。
(gitlab.ymlをunicorn.rbが読み込んで起動するものと思われる。)
$ sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml
$ sudo -u git cp config/database.yml.mysql config/database.yml
production: &base
gitlab:
host: 192.168.169.170
port: 80
...
# 以下をコメントアウト
user: git
production:
username: gitlab
password: "******"
次は、Gitlab実行時にアクセスするファイルのアクセス権限を変更。
# gitユーザによるlog以下とtmp以下の操作を許可
$ sudo chown -R git log/
$ sudo chown -R git tmp/
$ sudo chmod -R u+rwX log/
$ sudo chmod -R u+rwX tmp/
# unicornのpid保持フォルダを用意し、アクセス許可
$ sudo -u git -H mkdir tmp/pids/
$ sudo chmod -R u+rwX tmp/pids/
その他、諸設定。
# 謎のフォルダ作成。
$ sudo -u git -H mkdir /home/git/gitlab-satellites
Gemのインストール
ここからが鬼門だった。
Ruby初心者でありLinux初心者である自分にとっては鼻血が出る訳の分からなさだった。
$ sudo su - git
$ cd /home/git/gitlab
$ gem install charlock_holmes --version '0.6.9'
$ bundle install --deployment --without development test postgres
bundle install
を実行すると、git://github.com/gollum/gollum.git
の部分でエラーが出る。
エラーを見ると、どうやらgitプロトコルをプロキシが通さないのが原因。
git
でアクセスしている場所をhttps
に変更しなくてはいけない。
今回は、gollum
を取ってくる部分でgitプロトコルを使用しているので、/home/git/gitlab
以下のgemfileとgemfile.lockの該当箇所を以下のように修正する必要がある。
参考 : Issue #3416
gem "gollum", "~> 2.4.0", git: "https://github.com/gollum/gollum.git", ref: "5dcd3c8c8f"
remote: https://github.com/gollum/gollum.git
今一度、bundle install
$ bundle install --deployment --without development test postgres
$ exit
エラー無く完了。
これでようやく必要なものが揃ったので、Gitlabのセットアップを行う。
$ bundle exec rake gitlab:setup RAILS_ENV=production
Gitlabのサービス登録
Gitlab起動のサービス化を行うため、unicornの起動スクリプトを/etc/init.d
以下に置き、サービス登録を行う。
$ 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
$ sysv-rc-conf gitlab on
再起動してみる。が、起動すると思ったが起動しない。
ソースを見ると、gitlab
ファイルの中でbundlerしているのが原因。
パスを通すために以下を追加。
export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/home/git/.rbenv/bin:/home/git/.rbenv/shims
再起動し、エラー無く動いていればOK。
設定状況の確認
gitlabの構築環境をチェック。
自分の思い通りの設定になっているか確認する。
$ sudo su - git
$ bundle exec rake gitlab:env:info RAILS_ENV=production
次にgitlabの環境が正常に構築されているかどうかをチェックする。
$ bundle exec rake gitlab:env:info RAILS_ENV=production
$ exit
エラーが出たら、言われたとおりに直しましょう。
これで、Gitlabの設定は完了。
次は、nginxの設定。
nginxの設定
入っていなければインストール
$ sudo apt-get install nginx
サイト設定のひな形があるので取ってくる。
$ sudo curl --output /etc/nginx/sites-available/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/5-0-stable/nginx/gitlab
$ sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
自分の環境にあわせて以下のように設定修正。
...
listen 8001;
server_name _;
...
サイト設定が完了したら、nginxを再起動。
$ sudo service nginx restart
予定していたhttp://192.168.169.170:8001
に接続してGitlabが表示すれば完了。
運用時の問題点
そう簡単には終わらなかった。
インストールも完了。
ユーザを作成。
鍵を登録。
testリポジトリをcloneしたが、、、上手く取れなかった。
調べてみると、原因はsshで接続するときに実行されるcommandがrubyを欲しているからと判明。
/home/git/.ssh
以下のauthorized_keysを見ると、
command="/home/git/gitlab-shell/bin/gitlab-shell key-0",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==aa-bb-cc
/home/git/gitlab-shell/bin/gitlab-shell
の中でrubyコマンドを使用しているらしい。
その為、gitlab-shellの頭を以下に変更する。
#!/home/git/.rbenv/shims/ruby
これで、ssh認証が通り、git clone
が出来るようになる。
これにて一件落着。
余りに引っかかり過ぎ、色々と試行錯誤していたため、書き足りていない手順があるかもしれない。
暇ができたらもう一度初めから構築してみて、足りない手順やもっとスマートな解決方法があったら追加・修正していこうと思います。