Capistrano3 で Vagrant で構築したVMにデプロイする

Capistrano3 で Vagrant で構築したVMにデプロイするための必要最低限の手順をまとめる.そもそも Capistrano3 いろいろ変わり過ぎ!このエントリーは Capistrano2 ではなく Capistrano3 前提.

初期化処理

まずは任意の作業ディレクトリを作成してコマンドを叩く. capify じゃなくなったので注意!

cap install
もしくは
cap install STAGES=development,staging,production

初期化後はこんな構成になる(treeコマンドを使いたかっただけ).

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

5 directories, 4 files

config/deploy.rb を編集する

テンプレートから以下の3行を更新する. 上から アプリケーション名/デプロイするGitHubリポジトリURL/デプロイする VM 上のディレクトリパス で,事前に :deploy_to の1つ上の階層にパーミッションを与えておく必要がある(実際には Chef あたりで構築しておくと良さそう).

set :application, 'SampleApp'
set :repo_url, 'git@github.com:xxx/xxx.git'
set :deploy_to, '/var/www/SampleApp'

config/deploy/staging.rb を編集する

テンプレートから role 定義をコメントアウトする. そして sever 定義は以下のように変更する.

#role :app, %w{deploy@example.com}
#role :web, %w{deploy@example.com}
#role :db,  %w{deploy@example.com}
(中略)
server 'xxx.xxx.xxx.xxx', user: 'vagrant', roles: %w{app}, ssh_options: {
  keys: %w(~/.vagrant.d/insecure_private_key),
  auth_methods: %w(publickey)
}

デプロイを実行する

あとはデプロイするだけでOK!

cap staging deploy

処理が正常終了した後に vagrant ssh で接続して ls すると,ちゃんとデプロイされていることがわかる.

$ ls -al /var/www/SampleApp
lrwxrwxrwx  1 vagrant vagrant   44 Dec 10 23:52 current -> /var/www/SampleApp/releases/20131210235200
drwxrwxr-x  4 vagrant vagrant 4096 Dec 10 23:52 releases
drwxrwxr-x  7 vagrant vagrant 4096 Dec 10 23:47 repo
drwxrwxr-x  2 vagrant vagrant 4096 Dec 10 23:47 shared

実運用で使うのであれば,まだまだカスタマイズしたり,Capistrano2から機能落ちしてしまった部分の回避策を考えたりする必要があるけど,とにかくまずは動くことを確認してから1歩ずつ進んだ方が良いときもあるので,まずはここから,という感じ.

Capistrano 3への手引き - 今日のごはんは素麺です
Capistrano 3 Tutorial Series Part 2 - Using Capistrano 3 for deploying PHP and other none Rails based websites | ZodiacMedia.co.uk
Capistrano で Vagrant の仮想マシンにアクセス - エンジニアきまぐれTips