2015年2月26日木曜日

Capistrano 3を使ってデプロイ作業を自動化する

テストの自動化


デプロイ作業は手動でも行えますが、

  • デプロイ手順のマニュアルを作成する必要がある
  • 手動で行うため、手順を間違えないように集中して作業しなければならない
  • デプロイ作業に時間がかかる

といったデメリットがあります。

その結果

  • デプロイ手順を間違える
  • デプロイしている暇がないから、リモートサーバー上で直接ファイルを編集する

といった問題が発生しがちです。

デプロイ作業を自動化することにより

  • 作業ミスが無くなる
  • デプロイ作業にかかる時間・労力が限りなく減る

といった恩恵を得ることが出来ます。

特に納期前などの繁忙期にデプロイが自動で行えるかどうかの違いは非常に大きいです。
時間をかけて学ぶだけの価値は間違いなくあります。

Capistrano


Capistranoとはデプロイ作業を自動化するためのフレームワークです。
Capistrano自体はrubyのフレームワークですが、デプロイ対象のプログラム言語は問いません。
phpのプログラムなどでもCapistranoによりデプロイ作業を自動化することが出来ます。
しかし非常に便利なフレームワークである一方、学習コストが高いため手を付けられずにいる方も多いのではないでしょうか?

今回はCapistranoを使用したことが無い人を対象として、デプロイ自動化手順を少しずつ説明していきたいと思います。量が多いのでいくつかに分割して少しずつ説明していきます。

Capistranoの最新バージョンは3ですが、2と3とでは設定方法が大きく異なるので使用するバージョンに注意してください。今回はCapistrano 3を使用していきます。

お題


今回はデプロイ自動化の一番の基本となる

  • リモートサーバーにソースファイルをアップロードする作業

をCapistrano 3を使って自動化することにします。

概要


  • ローカルマシン上にcapistranoをインストールする
  • ローカルマシン上のソースコードをGitHubのリモートリポジト* リ上にアップロードする
  • ローカルマシン上でデプロイコマンドを実行する
  • GitHubリポジトリ上のソースコードがリモートサーバーにアップロードされる
  • デプロイコマンドはローカルのリポジトリ上で実行します。

前提条件


  • Gitを使用したことがある
  • リモートサーバーがある
  • リモートサーバーにSSHでログインできる

作業手順


ローカルマシン

1. ローカルマシン上にプロジェクトファイルを作成します。

mkdir cap_test
cd cap_test

2. アップロードしたいソースファイルを作成します。

touch test_file

3. GitHubでリモートリポジトリを作成しpushします

git remote add origin git@github.com:{your_account}/cap_test.git
git add .
git cm
git push origin master

リモートリポジトリの名前はcap_testとしました。
{yout_account}にはGitHubのアカウント名が入ります。

4. capistranoをインストールします

bundle経由でインストールします

bundle init # Gemfileが作成される

add line Gemfile

gem 'capistrano', '~> 3.0.1'

bundle install # capistranoがインストールされる

5. capistranoの初期化

cap install # capistrano用のディレクトリ・ファイルが作成されます

6. デプロイ設定ファイルの編集

デプロイの設定のために編集するファイルは2種類あります。

  • グローバルな設定ファイル
    config/deploy.rb # デプロイ全体の設定を行います。
  • 環境ごとの設定ファイル
    config/deploy/*.rb # 環境ごとの設定を行います。

今回はstaging環境を前提としたデプロイを行います。
編集するファイルは以下の2つです。

  • config/deploy.rb
  • config/deploy/staging.rb

    deploy.rbファイルを編集

    lock '3.3.5'
    set :application, 'cap_test'
    set :repo_url, 'git@github.com:{your_account}/cap_test.git'

    deploy/staging.rbを編集する

    リモートサーバーの情報に合わせて以下を設定します

    • ホストIPアドレス
    • ホストユーザ名
    • ローカルマシン上に保存したSSHの秘密鍵

    server 'xx.xx.xx.xx', user: 'remote-server-user', roles: %w{web}
    set :ssh_options, {
    keys: %w(~/.ssh/key.pem),
    }

7. ssh-agentの設定

デプロイ時にリモートサーバー上でgit cloneが実行されますが、
このとき秘密鍵が必要になります。
リモートサーバー上に秘密鍵を設定することでもgit cloneできますが、
秘密鍵の転送・設定は厄介です。特にリモートサーバーが複数ある場合その都度設定するのは面倒です。
ssh-agentを使用することにより、ローカルマシンの秘密鍵を使用してリモートサーバー上でgit cloneすることができます。

以下のコマンドによりgit cloneに用いる鍵をssh-agentに登録します(Macの場合、OSにより方法が異なります)

ssh-add ~/key.pem

8. ローカルマシン上での設定は以上で終了です。

GitHubに最新ファイルをコミットします。

git add .
git commit
git push origin master

リモートサーバー

次にリモートサーバー上での設定を行います。
リモートサーバーにログインします。

1. リモートサーバ上にアップロード用のディレクトリを作成する

デフォルトの設定では/var/www以下にアップロードされます
もしなければ作成します。

mkdir /var/www

デプロイ時にwww以下にさらにディレクトリが作成されるので、所有者も変更しておきます。

chown remote-server-user /var/www

2. gitのインストール

デプロイ時に、リモートサーバー上でgit cloneが実行されます。
もしgitがインストールされていなければインストールしておきます。

yum -y install git

デプロイ

デプロイの準備が整いました。
ではデプロイしてみましょう。
ローカルマシンのプロジェクトディレクトリ上でデプロイコマンドを実行します。

cap staging deploy

さくっとデプロイできましたか?

0 件のコメント :

コメントを投稿