Capistrano(カピストラーノ)でPHPプロジェクトをデプロイ
Capistrano(カピストラーノ)は複数のリモートサーバにSSH接続して一括操作できる便利なツールです。
色々な用途に使えますが、今回はCapistranoでPHPプロジェクトをデプロイしてみました。
概要図
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___1http://d.hatena.ne.jp/japanrock_pg/20080729/