GitLab 5.0 を debian + Apache + rvm 環境にインストール
前口上
お金がない人の GitHub Enterprise とかdisられてるんだが愛されてるんだかわからない GitLab をインストールしようと思ったのですが、自分のサーバ内の環境が公式にあるインストールの環境とは微妙に違うので、はまった点などなどをメモがてら備忘録を残そうと思って記事にしてみました。誰かの役に立つとさらにうれしいですが、大変長い。ちなみにこの記事は 2013/04/03 現在のものです。
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 について学んできます!
[…] 新規インストールについては、前回の記事を御覧ください。(5.1版も追記しました) […]
[…] http://blog.eb-de.com/2013/04/08/gitlab5-debian-apache-rvm-install/ […]