こんにちは。monipla for facebookを担当している佐藤(ま)です。
アライドでは「大佐」と呼ばれております。
今回は、Capistranoを使ったデプロイについて書きたいと思います。
まずCapistranoについてですが、Capistranoは「複数の環境に同じ処理を同時に実行させる」ためのツールで、これを利用することで複数環境へのデプロイなどを行うことができます。
では、インストールから簡単な動作確認を行っていきたいと思います。今回は、Gitサーバ上のプロジェクトをCapistranoを使って配布するというのをやっていきます。
◇利用する環境
・Gitサーバ
・デプロイサーバ
※Rubyが入っている必要があります。
・web(デプロイ先)サーバ
◇Capistranoインストール
・デプロイサーバへCapistranoをインストールします。
1 2 3 |
$ sudo gem install capistrano $ sudo gem install capistrano_colors ※capistrano_colorsは、実行結果を色付きで表示するために入れておきます。 |
◇Capistranoのひな型作成
・適当な場所で以下のコマンドを実行し、Capfileとdeploy.rbファイルを作成します。
1 2 3 4 5 |
$ capify . [add] writing './Capfile' [add] making directory './config' [add] writing './config/deploy.rb' [done] capified! |
◇deploy.rb編集
まず試しに、デプロイサーバからwebサーバへコマンドを実行するタスクを作成し、Capistranoの動作確認をしてみます。deloy.rbを初期設定から以下のように書き換えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# sshでログインするユーザ set :user, "[username]" # ssh 公開鍵設定 set :ssh_options, :port=>[port], :forward_agent=>false, :keys=>"[key_location]", :passphrase => "[passphrase]" # コマンド実行時にsudoをつけるか set :use_sudo, false # デプロイサーバ定義 role :web, "[hostname]" # lsコマンド実行タスク task :list do run "ls" end |
タスクを実行します。
1 |
cap list |
lsコマンドが実行されました。
1 2 3 4 5 6 |
* 2013-04-07 21:45:22 executing `list' * executing "ls" servers: ["hostname"] [hostname] executing command ** [out :: hostname] ls結果 ** [out :: hostname] ls結果 |
続いて、Git上のプロジェクトをwebサーバへデプロイするための設定を行います。先程の設定へデプロイ情報を追加します。タスクはデフォルトを利用するので今回は記載しません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# sshでログインするユーザ set :user, "[username]" # ssh 公開鍵設定 set :ssh_options, :port=>[port], :forward_agent=>false, :keys=>"[key_location]", :passphrase => "[passphrase]" # コマンド実行時にsudoをつけるか set :use_sudo, false # アプリケーション名 set :application, "sample" # subverion, git, mercurial, cvs, bzrなど set :scm ,:git #gitリポジトリ set :repository, "git@[hostname]:sample.git" #gitブランチ名 set :branch, :master # どういう方式でデプロイするか # copy デプロイ元でソースを最新化してからデプロイ先にコピー # checkout デプロイ先に接続した後、scmに応じたcheckoutコマンドを実行する set :deploy_via , :copy # deploy先ディレクトリ set :deploy_to, "/var/www/html/sample" # デプロイサーバ定義 role :web, "[hostname]" |
今度はデプロイ先サーバへデプロイが行われるので、一度setupにて初期化を行ったのちdeployコマンドを実行します。実行するとデフォルトのdeployタスクが実行されます。
1 2 |
cap deploy:setup cap deploy |
デプロイ先を見てみると以下のような構成となっており、「current」内が最新のソースとなります。
1 2 3 |
current -> /var/www/html/sample/releases/20130407132929 releases shared |
↓current
1 2 3 4 5 6 7 8 |
README REVISION log -> /var/www/html/sample/shared/log poweredby.gif public .git config.yml.prod tmp |
ただ、このままだとpublicやtmp、.gitが存在しているので、今度はこれらが存在しないようタスクを追加してみます。またここでは合わせて「config.yml.prod」を「config.yml」へリネームする処理も入れています。
1 2 3 4 5 6 7 8 9 10 11 12 |
# 対象外とするファイル設定 set :copy_exclude, [".git", "**/.git"] namespace :deploy do task :restart, :except => { :no_release => true } do #do nothing. end task :finalize_update, :except => { :no_release => true } do run "mv -f #{latest_release}/config.yml.prod #{latest_release}/config.yml" end end |
不要ファイルがなくなり「config.yml.prod」も「config.yml」へリネームされました。
1 2 3 4 |
README REVISION config.yml poweredby.gif |
また、Capistranoのタスクについてはこちらにて確認できます。
よく使うであろうことをできるだけ分かりやすく発信していきます。 Gitの情報を無駄にキャッチアップしてます。