テストの自動化
デプロイ作業は手動でも行えますが、
- デプロイ手順のマニュアルを作成する必要がある
- 手動で行うため、手順を間違えないように集中して作業しなければならない
- デプロイ作業に時間がかかる
といったデメリットがあります。
その結果
- デプロイ手順を間違える
- デプロイしている暇がないから、リモートサーバー上で直接ファイルを編集する
といった問題が発生しがちです。
デプロイ作業を自動化することにより
- 作業ミスが無くなる
- デプロイ作業にかかる時間・労力が限りなく減る
といった恩恵を得ることが出来ます。
特に納期前などの繁忙期にデプロイが自動で行えるかどうかの違いは非常に大きいです。
時間をかけて学ぶだけの価値は間違いなくあります。
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 件のコメント :
コメントを投稿