目次
前職ではこんな感じにしていたなぁというネタ。
下書き状態で残っていてもったいなかったので公開。
ディレクトリ構成
以下のようなディレクトリ構成
$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
なんか重い!?
最初はsshかな?と思ったので
/etc/ssh/sshd_config
の
UseDNS no
とかやったんだけど効果なし。
で、色々とググッてみる。
Rubyが悪い??
Ruby自体が悪いのでは?という記事を発見。
http://arika.org/diary/2009/07/31/ruby-1-8-7-pxx-vs-capistrano-2-5-x
バージョンを調べてみると
ruby-1.8.7-p174
見事に、この記事で現象が出ると言っているバージョンだ…。
というわけで、アップグレード(ruby-1.8.7-p299)してみた。
治った!!
たまにはアップグレードもしないとダメだね。
導入してよかった!
障害発生時に、pgpoolのrestartがしたかったんですが、一瞬で終わりました。
今までだと、一台ずつログインしてrestart…。
数十台あるんで、分担してやっていたらしい。
でも、今回はちょこっとレシピを書いて、実行。
namespace :pgpool2 do
task :restart, :roles => :web do
sudo "/etc/rc.d/init.d/pgpool restart"
end
end
を既存レシピに追記して、
$ cap production pgpool2:restart
で終わり。
やっぱり、ちゃんとツールに頼らないとダメだね。
余裕が出てきたら、レシピをいくつか公開しようと思います。
Ruby製のデプロイツールです。
仕事で数十台もマシンがあると、全マシンでインストール作業などが発生すると大惨事になります…。
昨日までは、端末を10個くらい並べて実行してました。
でも、今日からはCapistrano使います!
とりあえず、pgpoolのコネクションチェック用のレシピとかを作りました。
まずは、監視系かなぁ。
その後、本来の意味(デプロイ)で使おうと思います。

最新コメント