Hatena::ブログ(Diary)

yamada6789の日記

2011-01-08

Capistrano(カピストラーノ)でPHPプロジェクトをデプロイ

10:33 | Capistrano(カピストラーノ)でPHPプロジェクトをデプロイを含むブックマーク

Capistrano(カピストラーノ)は複数のリモートサーバSSH接続して一括操作できる便利なツールです。

色々な用途に使えますが、今回はCapistranoPHPプロジェクトをデプロイしてみました。

概要図

f:id:yamada6789:20110108084720p:image

Capistranoインストールするサーバは一台だけです。

デプロイ先のアプリケーションサーバではログインアカウント(要sudo権限)を事前に作成しておきます。

インストール

上の図ではCapistranoソースコード管理サーバインストールしています。

Capistranoを動かすにはRubyが必要になりますので、まずはRubyインストールします。

Rubyのインストール方法は省略します。)

次に、以下のコマンドでCapistranoインストール

$ sudo gem install capistrano

使用方法

基本的にcapfileに一連の操作を記述し、あとはコマンド一発で実行です。

今回はdeploy.rbというファイルを用意しました。

deploy.rb

# 基本定義 
set :application,   "sample_app"    # アプリケーション名
set :user,          "deployer"      # sshでログインするユーザー(要sodo権限)
set :password,      "XXXXXX"        # パスワード

set :svn_repo,      "file:///usr/local/svn/repos/sample_app/trunk"  #svnリポジトリ
set :svn_pass,      "XXXXXX"                    # svnパスワード
set :checkout_dir,  "/home/deployer/checkout"   # checkout先ディレクトリ (*注意:ここで指定したディレクトリは一旦'rm -rf'で全消去されます)
set :tar_dir,       "/home/deployer"            # 圧縮ファイル置場
set :upload_dir,    "/home/deployer"            # 圧縮ファイルupload先ディレクトリ
set :deploy_dir,    "/var/www/sample_app"       # deploy先ディレクトリ (*注意:ここで指定したディレクトリは一旦'rm -rf'で全消去されます)

set :own_user,      "root"      # deploy後のown設定
set :own_group,     "root"      # deploy後のown設定


# サーバ定義 
role :cap, "localhost"      # ファイル管理サーバ
role :ap1, "192.168.10.2"  # アプリケーションサーバ(deploy先)


# check outタスク
task :checkout_, :roles => [:cap] do
    sudo "rm -rf #{checkout_dir}"
    sudo "mkdir #{checkout_dir}"
    sudo "svn co --username #{user} --password #{svn_pass} #{svn_repo} #{checkout_dir}"
    sudo "chown -R #{user} #{checkout_dir}"
    sudo "find #{checkout_dir} -name \".svn\" -type d | xargs rm -rf"
end

# 圧縮タスク
task :tar_, :roles => [:cap] do
    sudo "tar cvfz #{tar_dir}/dep.tar.gz -C #{checkout_dir} ."
    sudo "chown #{user} #{tar_dir}/dep.tar.gz"
end

# uploadタスク
task :upload_, :roles => [:ap1] do
    upload("#{tar_dir}/dep.tar.gz", "#{upload_dir}/dep.tar.gz", :via => :scp)
    sudo "rm -rf #{deploy_dir}"
    sudo "mkdir #{deploy_dir}"
    sudo "tar xvfz #{upload_dir}/dep.tar.gz -C #{deploy_dir}"
    sudo "chown -R #{own_user}:#{own_group} #{deploy_dir}"
    sudo "rm #{upload_dir}/dep.tar.gz"
end


task :deploy_, :roles => [:cap] do
    checkout_
    tar_
    upload_
end

以下のように実行します。

$ sudo cap -f deploy.rb deploy_

capfile(deploy.rb)解説

・基本定義

  ユーザーやパスワードSVN設定、ディレクトリパスなどを定義しています。

サーバ定義

  デプロイ元とデプロイ先のサーバを定義しています。

・check outタスク

 概要図の「check out」→「.svnディレクトリを削除」を実行します。

・圧縮タスク

 概要図の「圧縮」を実行します。

・uploadタスク

 概要図の「転送」→「前回のデプロイファイルを削除」→「展開」を実行します。

おわりに

上の例では使っていませんが、トランザクションロールバック機能などもあるようです。

Capistrano便利ですね!

参考サイト

http://doruby.kbmj.com/trinityt_on_rails/20080325/__Capistrano___1

http://d.hatena.ne.jp/japanrock_pg/20080729/

4wdzks4wdzks 2011/07/26 10:24 このレシピ、助かりました。
capサーバーでのSubversionの設定と、全サーバーでのSudouserの設定ができればうまく動きますね。
ありがとうございました。

リンク元