AWS構築手順Capistranoによるデプロイ設定

EC-TRIPでは、アプリケーションのデプロイにはCapistranoを利用します。デプロイの実施方を体系化することで、デプロイによる障害のリスクを大きく下げることが可能となります。
なお、EC-TRIPではデプロイの作業はメンテナンスサーバで行います(メンテナンスサーバをデプロイサーバとしても利用します。)また、アプリケーションのソース管理にはGithubのプライベートリポジトリを利用することとして説明します。

メンテサーバーでのGit clone

メンテナンスサーバーでgit cloneしてアプリケーションを配置します。
注:メンテナンスサーバ上でアプリケーションを動作させるのではないので、アプリケーションすべてをCloneするのは無駄に感じますが、 アプリケーションに含まれるCapistrano設定を利用するために、ここではアプリケーション自体をCloneしてしまいます。

$ cd ~
$ git clone ssh://github/yamataka22/ec-trip.git

アプリケーションのCapistranoの設定

次に、RailsアプリケーションのCapistranoの設定を行います。以下は、サーバー等の設定ではなく、アプリケーションのソースコードの編集になります。

  1. Railsルートディレクトリ/config/deploy.rbを以下の通り編集します。
    ec-trip をアプリケーション名にしてください
    # 4行名 アプリケーション名を編集
    set :application, "ec-trip"
    
    # 5行目 Githubのリポジトリ名を編集
    set :repo_url, "github:yamataka22/ec-trip.git"
    
    # 11行目 アプリケーションのデプロイ先のディレクトリ名をサービス名にあわせて編集
    set :deploy_to, "/var/www/ec-trip"
    
  2. 次にRailsルートディレクトリ/config/deploy/production.rbを編集して、メンテナンスサーバからWebAppサーバへのSSH接続名を設定します。
    SSH接続名は、前項でメンテナンスサーバに設定したWebAppサーバへの接続名(本手順ではec-trip-pro-webapp1)になります。
    # 4〜6行目 ec-trip-webapp1となっている部分を変更(サンプルでは以下の通り)
    role :web, %w{ec-trip-pro-webapp1}
    role :app, %w{ec-trip-pro-webapp1}
    role :db,  %w{ec-trip-pro-webapp1}
    
  3. 編集したファイルをGitにCommit, masterへpushしておいてください。

以上でRailsアプリケーションのCapistrano設定は完了です。

WebAppサーバーの設定

最後に、環境ファイル.envを作成します。なお、.envのSECRET_KEY_BASEは、初回デプロイ実施後に設定するので、現時点では空欄のままとしてください。その他設定例はこちらをご参照ください。

$ cd /var/www/ec-trip/shared
$ vi .env
# .envを記載してください

以上で設定完了です。いよいよデプロイを実行します。

デプロイの実行

前述したとおり、デプロイ作業はメンテナンスサーバにSSH接続して行います。

  1. メンテナンスサーバにSSH接続
  2. Gitからpullする(Capistrano設定を編集したため)
    $ cd ~/ec-trip
    $ git pull origin master
    
    # 初回のみbundle installを実行しておく(Capistranoをbundle execで実行するため)
    $ bundle install
    
  3. デプロイを実行
    $ bundle exec cap production deploy
    
    # デプロイしたいブランチを問われるので、ブランチを指定
    Please enter branch (master): master
    
  4. デプロイ完了後、初回のみ.envのSECRET_KEY_BASEを設定し、Unicornを再起動します。
    # WebAppサーバーへSSH接続
    $ ssh ec-trip-pro-webapp1
    
    $ cd /var/www/ec-trip/current
    $ bundle exec rake secret
    
    # 生成された値を.envのSECRET_KEY_BASEへ設定
    $ vi /var/www/ec-trip/shared/.env
    SECRET_KEY_BASE = "a65b8e7140ade37866a7ec409bf3175e6f3"
    
    # Unicorn再起動
    $ cd /var/www/ec-trip/current
    $ kill -QUIT `cat /var/www/ec-trip/shared/tmp/pids/unicorn.pid`
    $ bundle exec unicorn -c /var/www/ec-trip/current/config/unicorn.rb -E production -D
    
  5. デプロイが完了したら、動作確認を行います。
    現時点では、Route53によるドメイン名(DNS)の設定を行っていないので、ELBのURLを直に指定して接続します。ELBのURLは以下の部分です。 デプロイキャプチャ1 以下の通りトップページが表示されたら完了です。 デプロイキャプチャ2
    デプロイ直後ですと、ELBのヘルスチェックが失敗したままとなり、表示することができません。最新のヘルスチェックになるまで1分ほど待機してから確認してください。
  6. 次回以降は、修正結果をGithubにpush後、メンテサーバーにSSHで接続後、以下のコマンドのみでデプロイできます。
    $ cd ~/ec-trip
    $ bundle exec cap production deploy
    

次章では、Route53を利用したドメイン名の登録を説明していきます。