目次
前職ではこんな感じにしていたなぁというネタ。
下書き状態で残っていてもったいなかったので公開。
ディレクトリ構成
以下のようなディレクトリ構成
$CAP_HOME
- Capfile => config配下のXXX.rbをloadする
- config
- deploy.rb
- deploy
- production.rb => 本番用環境情報
- test.rb => テスト用環境情報
- XXX.rb => 各種レシピ
deploy.rbは以下の通り。
require 'capistrano/ext/multistage' set :default_run_options, :max_hosts => 20 set :user, 'cap' ssh_options[:keys] = '/home/user/.ssh/id_rsa'
- 同時20サーバで実行
- 実行ユーザはcap
- sshの秘密鍵は /home/user/.ssh/id_rsa
環境設定
$CAP_HOME/config/deploy/XXX.rb に設置。
server 'srv1.example.com', :web server 'srv2.example.com', :web server 'srv3.example.com', :web, :ap server 'db1.example.com', :db server 'db2.example.com', :db
みたいな形で、1サーバずつロールを設定。
レシピ
namespaceを使ってある程度グルーピングする。
namespace :group do
task :task1, :roles => :web do
ここでごにょごにょする
end
task :task2, :roles => :db do
ここでごにょごにょする
end
end
といった形。
$ cap production group:task1
とか
$ cap test group:task1
のように呼び出す。
引数を受け取る
たまに、外部から引数を受け取りたい時がある。
例えば、Capistrano実行サーバにあるファイルを各サーバへscpしたい時は、
namespace :fileup do
task :upload_txt, :roles => :web do
upload filename, '/tmp', :via => :scp
end
end
というレシピを書いて、
$ cap test -S filename=/tmp/text.txt fileup:upload_txt
と呼び出す。
シェルスクリプトからCapistranoを呼ぶ
cronなどにシェルを登録して、内部でCapistranoを実行したい。
そんな時の例。
#!/bin/sh CAP_HOME="/home/user/cap" CAP="/usr/local/bin/ruby /usr/local/bin/cap" cd $CAP_HOME $CAP production group:task1

最新コメント