目次
この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
ごきげんよう、TrinityTです。
桜も咲き始め春の到来を感じますね!
今日は最近になって使い始めたとても便利なツール、Capistranoについて説明します。
Railsを使っている人はもちろん、使っていない人両方にオススメです。
Capistranoって何?
簡単に言うと「複数の環境に同じ処理を同時に実行させる」ツールです。
・昔はSwitchTowerと呼ばれてました。
・RoR環境でしか使えないと誤解されがちだが、他の環境でも十二分に便利。
・(サービスがPerlで書かれてる)はてなでも導入
・RoR環境だと基本的なコマンドが揃っているため特に便利。
何がうれしいの?
WebアプリでよくあるパターンとしてAPサーバが複数ある場合に各サーバに対して全く同じ処理(APを転送&APサーバ再起動…etc)を行う場合ってありますよね?
そういう場合にCapistranoを導入すれば以下のようなメリットが生まれます。
・複数サーバに対する処理をコマンド一回で出来るようになる
・ほとんどの処理をCapistranoを介して行うように出来るので、運用がわかりやすくなる
補足
Capistranoは1台にインストールされていれば良い
基本的に「Capistranoの起動サーバ1台」にインストールされていれば良いです。(全てのサーバにインストールする必要は無い。)
並列処理 するサーバのユーザ、パスワードは同じにする
並列処理する関係上、ユーザ名とパスワードは同じものを設定しておく必要があります。
今回の前提
以下の環境で、既にruby,rubygemsはインストール済みとします。
・CentOS5.1
・ruby1.8.6
.rubygems0.9.2
また複数サーバが無いとメリットが感じにくいので、以下の3台構成を想定します。
・サーバtest IP:192.168.0.21 ※Capistrano実行
・サーバap1 IP:192.168.0.22
・サーバap2 IP:192.168.0.23
インストール方法
gemで一発でインストール可能です。
gem install capistrano
インストール後は、ヘルプを出して確認しましょう。
cap -h
ついでにバージョンも確認します。最新版は2.2.0です。
gem list capistrano
>capistrano (2.2.0)
使用方法(Helloworld編)
まず、以下の内容のファイル「deploy.rb」を作成します。
# 基本定義
set :application, “hoge” #プロジェクト名
set :user, “hoge” #sshユーザー名
set :password, “hoge” #sshパスワード
# role定義
role :test, “192.168.0.21”
role :ap, “192.168.0.22”,”192.168.0.23″
# タスク
task :hw, :roles => [:test, :ap] do
run “echo HelloWorld! $HOSTNAME”
end
task :gb, :roles => [:test, :ap] do
run “echo GoodBye! $HOSTNAME”
end
基本定義としてsshのアクセス情報などを書きます。
roleは各タスクを実行するサーバのIPアドレスorホスト名を書きます。
タスクとしてHelloworld、GoodByeをそれぞれ表示するものを定義しました。
「run」はssh定義ユーザでコマンド実行をするためのタスクです。(後述)
さて、それでは各タスクを実行してみましょう。
コマンドは「cap -f <定義ファイル名> <タスク名>」で実行できます。
cap -f deploy.rb hw
>実行結果
* executing `hw’
* executing “echo HelloWorld! $HOSTNAME”
servers: [“192.168.0.21”, “192.168.0.22”,”192.168.0.23″]
[192.168.0.21] executing command
[192.168.0.22] executing command
[192.168.0.23] executing command
** [out :: 192.168.0.21] HelloWorld! test
** [out :: 192.168.0.22] HelloWorld! ap1
** [out :: 192.168.0.23] HelloWorld! ap2
command finished
cap -f deploy.rb gb
>実行結果
* executing `gb’
* executing “echo GoodBye! $HOSTNAME”
servers: [“192.168.0.21”, “192.168.0.22”,”192.168.0.23″]
[192.168.0.21] executing command
[192.168.0.22] executing command
[192.168.0.23] executing command
** [out :: 192.168.0.21] GoodBye! test
** [out :: 192.168.0.22] GoodBye! ap1
** [out :: 192.168.0.23] GoodBye! ap2
command finished
実行した結果、$HOSTNAMEが各ホスト名に変換されています。
これにより各サーバ上でコマンドが確認できました。
なお、使用可能なタスクは以下の通りです。
・run コマンド実行
・sudo root権限でコマンド実行 実行対象サーバでsudoの設定をする必要有
・pu ファイル作成
・delete ファイル削除
・render Erbテンプレートをレンダリング。
・transaction 複数の処理をまとめてトランザクションとする
・on_rollback transactionのロールバックを行う
長くなってしまったのでRailsで使用する場合の説明は次回に。