Capistrano 2.2.0のチュートリアル

Capistranoのデプロイ作業について基本的なところをメモ。
Rails2.0.2、Capistrano2.2.0を使っています。
Capistranoは最近のバージョンアップでRails本の説明とコマンドなどが異なっています。

必要な物

  • 開発サーバ
  • 配備先のサーバ
  • svnサーバ

開発サーバは普段開発作業してるクライアントでOKです。配備先のサーバは公開する用の物をでっち上げましょう。Railsが動いて、Apacheが入ってれば大丈夫です。
svnサーバも適当にでっち上げてください。Capistranoはデプロイ時にsvnサーバからデータを取得します。svnサーバ構築はこちらのエントリが参考になるかもしれません。体系的に学びたいならでびあんぐる本がオススメです。

インストール

% sudo gem install --include-dependencies termios 
% sudo gem install --include-dependencies capistrano 
% sudo gem install --include-dependencies mongrel
% sudo gem install --include-dependencies mongrel_cluster

開発機、配備先ともに導入してください。今回はサーバにMongrelを利用します。

配備するテストアプリを作成

Railsで適当なものを作成します。

% rails test
% cd test
% ruby script/generate scaffold user name:string
% rake db:migrate 

上記でCRUDできるテストアプリが完成します。

% ruby script/server

http://127.0.0.1:3000/users でアクセスできます。確認したら終了します。

Mongrelの設定

% mongrel_rails cluster::configure -e production -p 5000 -N 2 -c /home/railsapp/test/current

5000は開始ポート番号、2は起動するサーバの個数です。配備サーバの/home/railsapp/test/currentに設置します。最後の/currentは必須項目なので忘れないように。
配備先サーバにrailsappというユーザを作ればよさそうです。

Capistranoの設定

まず設定ファイルを作成します。

% capify .

config/deploy.rbを以下の具合に修正します。

require 'mongrel_cluster/recipes'

set :application, "test" # アプリ名
set :repository,  "http://svnserver/#{application}/trunk"
set :deploy_to,   "/home/railsapp/#{application}"
set :mongrel_conf, "#{current_path}/config/mongrel_cluster.yml"
set :user, "railsapp" # 配備先ディレクトリのユーザ

#set :scm_username, "svnuser" # svnのユーザ名があれば設定
#set :scm_password, "svnpass" # パスワードがあれば設定

role :app, "配備先サーバのアドレス"
role :web, "配備先サーバのアドレス"
role :db,  "配備先サーバのアドレス", :primary => true

svnサーバにインポート

テストアプリをインポートします。

% svn import -m 'capistrano test' . http://svnserver/test/trunk

デプロイ

ここまでで設定作業は終了です。実際にデプロイを行います。

% cap deploy:setup
% cap deploy:cold

setupで配備先にディレクトリが作成されます。coldは初回配備時のみに使用するコマンドです。
これで http://配備先サーバのアドレス:5000/ にアクセスするとアプリが動作しているはずです。
次回デプロイしたいときはsvnサーバに修正をコミットしたあと、cap deploy を実行すればOKです。

もし「sudoできないぞ!」エラーが出たなら/etc/sudoersを修正してください。

#Defaults    requiretty #端末がないとエラーになる

Apacheの設定

バランサーを設定して使いましょう。

<Proxy balancer://test>
BalancerMember http://127.0.0.1:5000
BalancerMember http://127.0.0.1:5001
</Proxy>

よく使うコマンド

% cap deploy #デプロイ
% cap deploy:cleanup #過去に配備したバージョンを削除
% cap deploy:start #アプリケーションサーバの開始
% cap deploy:stop #アプリケーションサーバの停止