capistranoはRuby On Rails用に作られたデプロイツールで、
設定をすればPHPのプロジェクトにも利用できる。
デプロイを自動化できるため、最初の設定さえしておけば後が楽。
ツールのインストールはデプロイをする端末だけにすれば良く、
各サーバーには特に何もする必要はなし。
複数サーバーに対して一気にデプロイすることもできるので
同じソースを複数のサービスに使っている場合などには便利。
準備
Rubyで作られているツールなので
gemでインストール。
$ gem install -y capistrano
プロジェクトごとに適用
$ cd {project_path} $ capify .
これで
{project_path}/Capistrano
{Project_path}/config/deploy.rb
が作成される。deploy.rbが設定ファイルなので
これを自分の環境に応じて変更する。
設定ファイル
CakePHP用の設定ファイルを公開してくださっている方がいたので
それを参照させてもらいつつ自分用に修正。
CakePHPをCapistranoを使って楽々デプロイしよう!
追加分の設定
set :ssh_options, :port => "99999" # SSHのポート指定
結構つまづいた部分。
gitリポジトリを置いているサーバーとデプロイ先が同じだったので
set :repository, “file:///var/git/xxxxx.git”
などと設定したがどうしてもエラーでできず。
結局、Capistranoを動かしている自分のMacに一旦展開してから
サーバーにアップするという設定に。
SSHの鍵設定などをサーバー間でしなくてすむ反面、回線が遅いと困ることもありそう。
# set :deploy_via, :export
set :deploy_via, :copy #
delpoy:symlinkでは動かなかったので新しくなって変わったのかも。
deploy:create_symlinkに修正。
後は、CakePHP用にサーバー用の設定ファイルをsharedに置いてそこからシンボリックリンク。
また、tmp以下を.gitignoreで無視してるので必要なディレクトリを作成。
desc "標準のシンボリック張り直し実行後に行う処理を記述する"
# after "deploy:symlink", :roles => [:app] do
after "deploy:create_symlink", :roles => [:app] do
run "ln -fns #{shared_path}/system/database.php #{latest_release}/app/Config/database.php"
run "ln -fns #{shared_path}/system/email.php #{latest_release}/app/Config/email.php"
run "mkdir #{latest_release}/app/tmp/cache"
run "mkdir #{latest_release}/app/tmp/cache/models"
run "mkdir #{latest_release}/app/tmp/cache/persistent"
run "mkdir #{latest_release}/app/tmp/cache/views"
run "mkdir #{latest_release}/app/tmp/sessions"
run "mkdir #{latest_release}/app/tmp/tests"
run "chmod -R 777 #{latest_release}/app/tmp"
capistranoのコマンド
$ cap -T
と入力することで使用できるコマンドが表示される。
標準のものに加え、設定ファイルで自分が設定したものも出る。
cap deploy # Deploys your project. cap deploy:check # Test deployment dependencies. cap deploy:cleanup # Clean up old releases. cap deploy:cold # Deploys and starts a `cold' application. cap deploy:create_symlink # Updates the symlink to the most recently deployed version. cap deploy:finalize_update # CakePHP用にfinalize_updateを上書きする cap deploy:migrate # Run the migrate rake task. cap deploy:migrations # Deploy and run pending migrations. cap deploy:pending # Displays the commits since your last deploy. cap deploy:pending:diff # Displays the `diff' since your last deploy. cap deploy:rollback # Rolls back to a previous version and restarts. cap deploy:rollback:code # Rolls back to the previously deployed version. cap deploy:setup # Prepares one or more servers for deployment. cap deploy:start # 標準のシンボリック張り直し実行後に行う処理を記述する cap deploy:symlink # Deprecated API. cap deploy:update # Copies your project and updates the symlink. cap deploy:update_code # Copies your project to the remote servers. cap deploy:upload # Copy files to the currently deployed version. cap development # Set the target stage to `development'. cap invoke # Invoke a single command on the remote servers. cap multistage:prepare # Stub out the staging config files. cap production # Set the target stage to `production'. cap shell # Begin an interactive Capistrano session. cap staging # Set the target stage to `staging'. Some tasks were not listed, either because they have no description, or because they are only used internally by other tasks. To see all tasks, type `cap -vT'. Extended help may be available for these tasks. Type `cap -e taskname' to view it.
デプロイ先(サーバー)の準備
端末からサーバーにSSHで入れるようにしておく。
設定ファイルで指定する、プロジェクトのソースを置くための
ディレクトリは事前に作っておく。
SSHで入るユーザーがディレクトリの操作権限を持っているようにする。
その上で、下記のコマンドで必要なディレクトリを作成
cap deploy:setup
毎回のデプロイ作業
cap deploy
と入力するだけ。場合によってはjenkinsから実行させても良い。
(追記)git submoduleの管理
Plugin/Debugkit などをgit submoduleで管理していたが
git cloneしても取得されないのでエラーになっていた。
config/deploy.rb に下記を追加して解決。
set :git_enable_submodules, 1
コメントを残す