Capistranoの例

On 2011年9月17日, in Capistrano, Ruby, by タカ

目次


前職ではこんな感じにしていたなぁというネタ。

下書き状態で残っていてもったいなかったので公開。

ディレクトリ構成

以下のようなディレクトリ構成

$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
Tagged with:  

Capistranoの実行がやたら遅い…。

On 2010年7月7日, in Capistrano, Ruby, by タカ

なんか重い!?

最初は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)してみた。

治った!!

たまにはアップグレードもしないとダメだね。
Tagged with:  

Capistrano大活躍

On 2010年4月24日, in Capistrano, by タカ

導入してよかった!
障害発生時に、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

で終わり。
やっぱり、ちゃんとツールに頼らないとダメだね。

余裕が出てきたら、レシピをいくつか公開しようと思います。

Tagged with:  

Capistrano

On 2010年3月16日, in Ruby, by タカ

Ruby製のデプロイツールです。

仕事で数十台もマシンがあると、全マシンでインストール作業などが発生すると大惨事になります…。
昨日までは、端末を10個くらい並べて実行してました。

でも、今日からはCapistrano使います!

とりあえず、pgpoolのコネクションチェック用のレシピとかを作りました。
まずは、監視系かなぁ。
その後、本来の意味(デプロイ)で使おうと思います。

Tagged with: