（９）Capistranoでdeploy#1｜EC2でgit+RonR+unicorn+nginx+capistrano+Jenkins 


##その９｜Capistranoでdeployしてみる＃１


###１．これまでの目次

1. [EC2＋gitリモートサーバ構築#1](http://qiita.com/items/bed591f7a076cb92ed20)
2. [（２）EC2＋gitリモートサーバ構築#２](http://qiita.com/items/14afe3712ff43a01da69)
3. [（３）EC2にrvm+rubyインストール](http://qiita.com/items/35ab6c6e6750110dc621)
4. [（４）EC2にrailsインストール](http://qiita.com/items/296aa3af986b4bffe7d8)
5. [（５）EC2にrails起動テスト](http://qiita.com/items/978bc6e2a53450be90f1)
6. [（６）EC2にunicorn準備](http://qiita.com/items/7ee7fa53b0066dd274a6)
7. [（７） EC2にnginx準備](http://qiita.com/items/12325db56282a6e3a79d)
8. [（８） EC2にnginx経由のunicorn](http://qiita.com/items/0473b7ad89a3a6d21211)


###２．インストール
ローカルマシンにgemでインストール。インストール後、capコマンドが使えるかどうか確認

```
gem install capistrano
gem install capistrano-ext
gem install capistrano_colors
```

###３．設定ファイル作成
railsプロジェクトルートディレクトリに移動して、`capify .`とターミナルから打つと、設定ファイルが作成されます。

```
[add] writing './Capfile'
[add] writing './config/deploy.rb'
[done] capified!
```

###４．config/deploy.rbを編集

```
set :application, "sample"
set :repository,  "ssh://gituser@xx.xxx.xxx.xxx/home/gituser/repos/sample.git"
set :scm, :git
set :deploy_to, "/deploy/www/#{application}"
set :rails_env, "production"


# set :scm, :git # You can set :scm explicitly or Capistrano will make an intelligent guess based on known version control directory names
# Or: `accurev`, `bzr`, `cvs`, `darcs`, `git`, `mercurial`, `perforce`, `subversion` or `none`

set :user, "artist"
ssh_options[:port] = "22"
ssh_options[:forward_agent] = true
default_run_options[:pty] = true

role :web, "xx.xxx.xxx.xxx"                          # Your HTTP server, Apache/etc
role :app, "xx.xxx.xxx.xxx"                          # This may be the same as your `Web` server
role :db,  "xx.xxx.xxx.xxx", :primary => true # This is where Rails migrations will run
# cap deploy:setup 後、/deploy/www/sample の権限変更
namespace :setup do
  task :fix_permissions do
    sudo "chown -R #{user}.#{user} #{deploy_to}"
  end
end
after "deploy:setup", "setup:fix_permissions"

```

###５．deployユーザの作成｜artistユーザ
* デプロイ:setup時（後述）、ディレクトリを作成したり権限の変更を行う。その為に、sudoコマンドを使用出来るユーザ（＝capistranoでdeployする時にリモート側で実行するユーザ）を予め作成しておく。
wheelグループはsudo可能なので、wheelグループに追加する。

```
sudo useradd -m -s /bin/bash artist
sudo usermod -G wheel artist
```

* そしてwheelグループのユーザがpasswdなしでsudoのコマンドが実行出来るようにする。

```
sudo su -
visudo
```

**%wheel  ALL=(ALL)       NOPASSWD: ALL**
この行のコメントアウトを削除する。

**%wheel  ALL=(ALL) ALL**
この行はコメントアウトする。


* デプロイ先の/vaw/wwwは、先にリモートサーバに作成しておく。wwwディレクトリのオーナーはartistユーザに。

```
mkdir /var/www
chown -Rf artist. /var/www 
```

* デプロイユーザartistに対してもcapistranoはSSH＋公開鍵認証で接続するので、ローカルの公開鍵をリモートサーバの/home/artist/.ssh/authorized_keysに登録しておく。

```/home/artist
sudo su - artist
mkdir .ssh
chmod 700 .ssh
cd .ssh
touch authorized_keys
chmod 600 authorized_keys
cat id_rsa.pub >> authorized_keys
```
※再終行のcatが分からない人は[EC2＋gitリモートサーバ構築#1](http://qiita.com/items/bed591f7a076cb92ed20)を参考に。


###５．デプロイ｜setup
まず、デプロイ先を作成。ローカルのターミナルから。

```
cd RAILS_ROOT_DIR
cap deploy:setup
```

リモートサーバのdeployディレクトリ以下に、

> /deploy/www/sample/
/deploy/www/sample/releases
/deploy/www/sample/shared
/deploy/www/sample/shared/log
/deploy/www/sample/shared/pids
/deploy/www/sample/shared/system

が出来ているはず。

###６．デプロイ

```
cap deploy
```