Capistrano3を試してみる

Capistrano3を試してみる。


MacRubyVagrantはインストールされた状態。

インストール

とりあえずMacCapistranoをインストールする。

$ gem install capistrano
$ cap -V
Capistrano Version: 3.2.1 (Rake Version: 10.1.0)

サーバを2台用意

VagrantでDBサーバを2台用意する。

$ mkdir server1
$ cd server1
$ vagrant init centos65
$ vi Vagrantfile
  config.vm.network "private_network", ip: "192.168.33.11"
$ vagrant up

sshで接続できるか確認しておく。

$ ssh vagrant@192.168.33.11

こんな感じでserver2(192.168.33.12)も用意する。

vagrantのboxは下記のコマンドで追加済み。
$ vagrant box add centos65 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box

セットアップ

適当な場所に適当にディレクトリを用意し、cap installする。

$ mkdir sample
$ cd sample
$ cap install

下記のファイルが生成される。

$ tree
.
├── Capfile
├── config
│   ├── deploy
│   │   ├── production.rb
│   │   └── staging.rb
│   └── deploy.rb
└── lib
    └── capistrano
        └── tasks

Hello, world!を表示してみる

production.rb,staging.rbは使わず、今回はdevelpment.rbを作成する。

$ vi config/deploy/development.rb
role :web, %w{192.168.33.11 192.168.33.12}↲

server '192.168.33.11', user: 'vagrant', roles: %w{web}, ssh_options: {
  password: 'vagrant'
}

server '192.168.33.12', user: 'vagrant', roles: %w{web}, ssh_options: {
  password: 'vagrant'
}

deploy.rbに下記のタスクを追加する。

$ vi config/deploy.rb
・・・
namespace :test do
  desc 'Hello, world!'
  task :hello do
    on roles(:web) do
      execute "echo Hello, world!"
    end
  end
end

実行すると、各サーバーでHello, world!がechoされる。

$ cap development test:hello
INFO[dea8d320] Running /usr/bin/env echo Hello, world! on 192.168.33.12
INFO[bc01e84a] Running /usr/bin/env echo Hello, world! on 192.168.33.11
DEBUG[dea8d320] Command: echo Hello, world!
DEBUG[bc01e84a] Command: echo Hello, world!
DEBUG[dea8d320]         Hello, world!
INFO[dea8d320] Finished in 0.098 seconds with exit status 0 (successful).
DEBUG[bc01e84a]         Hello, world!
INFO[bc01e84a] Finished in 0.104 seconds with exit status 0 (successful).

デプロイしてみる

index.htmlだけあるリポジトリをデプロイしてみる。


下記のような感じでdeploy.rbを修正する。

$ vi config/deploy.rb
・・・
set :repo_url, 'https://github.com/・・・/sample.git'
・・・
set :deploy_to, '/home/vagrant/my_app'

デプロイできるかとりえあえずチェックする。

$ cap development deploy:check

エラーが出なければデプロイする。

$ cap development deploy

下記のような感じでデプロイされる。

$ cd server1
$ vagrant ssh
centos$ tree
.
`-- my_app
    |-- current -> /home/vagrant/my_app/releases/20140813073813
    |-- releases
    |   `-- 20140813073813
    |       |-- REVISION
    |       `-- index.html
    |-- repo
    |   ・・・
    |-- revisions.log
    `-- shared


再度デプロイすると、

$ cap development deploy

releasesが増えてcurrentがそっち向いているのが確認できる。

centos$ tree
.
`-- my_app
    |-- current -> /home/vagrant/my_app/releases/20140813075752
    |-- releases
    |   |-- 20140813073813
    |   |   |-- REVISION
    |   |   `-- index.html
    |   `-- 20140813075752
    |       |-- REVISION
    |       `-- index.html
    |-- repo
    |   ・・・
    |-- revisions.log
    `-- shared