2012年7月26日木曜日

GitLabをインストールしてGmailでメール送信まで はてなブックマーク

[2012/12/1 記] 4ヶ月ほど前の記事ですが、既にかなり進化していますので、
やはり本家のWikiを見て設定するのがいいと思います。

もはやバージョンコントロールといえばsubversionよりもGitらしい(参考)。
そしてGitといえばGitHub。
privateなプロジェクトで使用するために、GitHubの有料リポジトリを借りてもいいのだけど、まずはGitHubクローンのようなものを使って慣れていこうということで、一番人気の高そうなGitLabを使ってみた。

インストール

GitLabは開発がとても活発で変わる可能性が高いため、プロジェクトページの手順を見るのが一番だと思うけど、少し違う手順でインストールしたところもあるのでメモしておく。
サーバーはさくらVPSのCentOS 6.2。

CentOS6にGitLabをインストールする方法

を主に参考にした。

Gitインストール

さくらVPSには最初から入っていたと思う。なければyumでインストール。
sudo yum install git

ユーザーを作成

gitoliteとgitlabのユーザーを分けずにgitというユーザーだけ作って設定した。
権限を気にするところが減って少し楽だった。
useradd git
passwd git
パスワードを設定したら、gitでログイン。
su - git
git configも必要になるようなので、設定しておく。
git config --global user.email "gitadmin@example.com"
git config --global user.name "gitadmin"

Gitolite設定

以降だいたいgitユーザーで作業。
ソースを持ってきて、
git clone git://github.com/sitaramc/gitolite
SSHキーを作成。
ssh-keygen -t rsa -P "" -f ~/.ssh/gitadmin
ファイル名(-fで指定してる)は何でも。
gitolite/install
gitolite/src/gitolite setup -pk ~/.ssh/gitadmin.pub

~/.gitolite.rc
のUMASKを0077→0007へ変更。

~/.ssh/config
Host localhost
  HostName localhost
  IdentityFile ~/.ssh/gitadmin
のように作成し、保存。
chmod 600 ~/.ssh/config
で権限を変更しておく。

Rubyインストール

1.9が必要。今回はrvmでインストールした。
途中、readlineがないと言われたので、
rvm pkg install readline
でインストールした。

パッケージ

自分の環境ではこのあたりが必要だった。
足りない場合はあとでbundle installするとき注意されるからわかるはず。
sudo yum install libxml2-devel libxslt-devel libicu-devel sqlite-devel redis
redisをyumでインストールするにはEPELが必要。
yumじゃなくてもいいけど、yumの方が簡単。

redisを起動

一応、自動起動を設定しておく。
sudo /sbin/chkconfig --level 2345 redis on
サービス起動。
sudo /etc/init.d/redis start

GitLabをインストール

masterから入れたが、安定性を求めるならstableを入れたほうがいいだろう。
git clone git://github.com/gitlabhq/gitlabhq.git
移動して、bundle install。
cd gitlabhq
bundle install --path vendor/bundle
足りないパッケージがあるとここで注意されると思うので入れる。

DBはMySQLにした。
cp config/database.yml.mysql config/database.yml
して適切に編集。
cp config/gitlab.yml.example config/gitlab.yml
gitユーザーを作ったので、git_hostのところはそのままでよかった。
ユーザー名など違う場合は変更する。
web、emailのところを編集した。(emailは以下メール設定を参照)

bundle exec rake gitlab:app:setup RAILS_ENV=production
DBセットアップや初期データ作成が実行される。

bundle exec rake gitlab:app:status RAILS_ENV=production
で設定が正しいかどうか確認できる。
(ただし、UMASK for .gitolite.rc is 0007のところはチェックの方に問題があるようで、正しく設定されていてもエラーになった。)

passenger

passenger + apacheで動かした。apacheが入っていなければ、
sudo yum install httpd-devel
で入れておく。

rvmでrubyをインストールしたので、
rvmsudo gem install passenger
でpassnger gemをインストールして、cdでホームディレクトリに移動し、
rvmsudo passenger-install-apache2-module
でpassengerをインストール。(ホームディレクトリじゃないとgemを見つけてくれなかった。)

あとは手順どおりにすればOK。

メール送信の設定

新しいissueが登録されたり、wallに書き込まれたりしたときはメールが飛ぶはずなのだけど、
どうやって飛ばせばいいかわからず苦労した。

メール送信には、jobキューを処理するresqueが使われていた。resqueを起動していなくても
logにもどこにもエラーが出ないので気づかなかった。

GitLabのようなアプリにresqueを使うのはオーバーな気がするんだけど、なんで使ってるのだろう?

1.メール設定

メール送信にはGmailを使った。
config/gitlab.yml
を以下のように編集。
(config.action_mailer.smtp_settingsなどを設定する必要はないみたい)
email:
  from: notify@local.host  # なんでも。メールのFromに書かれるアドレス。
  address: smtp.gmail.com
  port: 587
  user_name: yourname@gmail.com   # @gmail.comは省略できるはず
  password: yourpassword
authenticationやdomainは指定しなくても動いた。

Gmailじゃなくて普通のメールでも同様に、通常Action Mailerで
config.action_mailer.smtp_settingsを設定するような項目を書けばOK。


2.resqueを起動

gitlabhqディレクトリで、
./resque.sh
を実行。

resqueを起動したままでgitlab.ymlの設定を変えても反映されないので注意。
変更したあとresqueを起動し直す。
stopの仕方がわからないので、プロセスをkillしてから、./resque.shでまた起動しなおしたりした。

もうひとつ注意点。resqueを動かしていないと、未実行のキューがたまったままになっている。
Adminでユーザーの新規作成をしたとき、本来飛ぶはずのメールが飛ばないと、new_user_emailという名前でキューにたまっているのだけど、そこでパスワードが見えてしまう。(通常はメールに初期パスワードがメールに書かれて飛ぶ。)



初期パスワードは変えるようにということなのかもしれないが、知らないとちょっとこわい動作だ。ちなみにDBには、パスワードはちゃんとハッシュ化されて保存されている。

その他

プロジェクトごとのWikiで、「New Page」のようなボタンがないから新しいページを作れないんじゃないかと思ってしまったが、そんなことはなかった。
編集画面に表示されるとおり、
 [Link Title](page-slug)
の形で書けば新しいページが作れた。
[新しいページ](新しいページ)みたいに日本語でもいける。

まだ使い始めたばかりだが、軽快だし機能も充実していて、かなり好印象。
このあたりを見てGitの使い方を覚えつつ、使ってみようと思う。

2 件のコメント:

  1. resqueの起動issueにやり方が書いてありましたよ!
    ↓ここ
    https://github.com/gitlabhq/gitlabhq/issues/1068#issuecomment-6923643

    ↓僕のブログの記事(Gitlabのメール設定)
    http://yujiroarai.com/?p=64

    返信削除
  2. araiさん、コメントありがとうございます。
    参考になりました。

    GitLabは進化が速くて面白いですね。
    こんなレベルの開発ができるようになりたいものです。

    返信削除