その他
    ホーム 技術発信 DoRuby 簡単&便利 Capistranoのススメ (導入編)

    簡単&便利 Capistranoのススメ (導入編)

    この記事はアピリッツの技術ブログ「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で使用する場合の説明は次回に。