Capistrano 実践Tips集
-
Upload
trinityt- -
Category
Technology
-
view
43.555 -
download
0
Transcript of Capistrano 実践Tips集
Capistrano 実践 Tips 集
2009/09/07
高倉 利明
目次
これだけは入れとけ!便利な gemこう記述しろ!設定ファイル意外と知らない?注意点
1.これだけは入れとけ! 便利な gem
・ capistrano_colors・ capistrano-ext
※ インストール方法は割愛。 ググれ!
capistrano_colors
使用前 使用後
何ができる?→capistrano の実行コマンド、 コメントなどを色づけしてくれる。 地味だけど便利。
capistrano-ext
何ができる?→ 環境に応じた capistrano 設定を差分ファイルで 上書きする事が可能になる。
capistrano-ext フォルダ構成
Root └ /config └ deploy.rb ( 共通設定 ) └ /deploy └ staging.rb ( staging 差分) └ production.rb ( production 差
分)
capistrano-ext環境ごとの「 user 」を置き換えたいなら。。。
#config/deploy.rbset :user, “hogehoge“
#config/deploy/staging.rbset :user, “fugafuga“
#config/deploy/production.rbset :user, “piyopiyo“
capistrano-ext
ステージング環境へデプロイ
本番環境へデプロイ
$ cap staging deploy
$ cap production deploy
2.こう記述しろ!設定ファイル
(1) deploy.rb デフォルト記述(2) Passenger との連携設定(3) パスワードなどの動的入力(4) プッシュ式デプロイ
(1) deploy.rb デフォルト記述
Q. deploy.rb ファイル書くの面倒だよ! 何かいい手ない?
A. AP サーバで以下のデフォルトルールに従えば~ Rails の実行ユーザは「 app 」 アプリ設置場所は「 /u/apps 」 「 app 」ユーザに「 /u/apps 」以下のファイル
作成・削除権限を与える サーバに公開鍵などでの パスワード無し ssh ログイン可能
(1) deploy.rb デフォルト記述
7 行で済みます。#config/deploy.rbset :application, “test “set :scm, “subversion“set :scm_user, “hogehoge“set :scm_password, “fugafuga“
role :web, “web.test.com“role :app, “app.test.com“role :db, “db.test.com “
(2) Passenger との連携設定Q.Capistrano を Passenger と 連携させたいんだけど、 何か記述しておいた方が良い?
A.Passenger は「 tmp/restart.txt 」 にファイルがあると、自動的に そのアプリのみ再読み込みするので~
(2) Passenger との連携設定以下のように再起動タスクを記述しておくと便利。
#config/deploy.rbnamespace :deploy do task :restart, :roles => :app do run "touch #{current_release}/tmp/restart.txt” end
# 以下タスクは Apache 自体の起動 / 停止に使用。複数アプリを # 単一 Apache で公開している場合は使用しない方が良い task :start, :roles => :app do run "sudo /etc/rc.d/init.d httpd start " end task :stop, :roles => :app do run "sudo /etc/rc.d/init.d httpd stop " endend
(3) パスワードなどの動的入力
Q.capistrano でセキュリティ要件が厳しいとき、 以下のような要望が出てくる。 さあどうしよう?
セキュリティ要件でパスワードを設定ファイル上にベタ書きするのは NG
Subversion サーバのパスワードをデプロイ担当者ごとに使い分けたい
AP サーバのパスワードをデプロイ担当者ごとに使い分けたい
...etc
(3) パスワードなどの動的入力A.Capistrano::CLI を使用すれば
動的入力できる!
#config/deploy.rb
# 入力(エコーバックあり)set :scm_user do Capistrano::CLI.ui.ask (“scm user:”)end
# パスワード ( エコーバックなし )set :scm_password do Capistrano::CLI.password_prompt(“scm pass:”)end
(4) プッシュ式デプロイ
AP サーバ
Capistrano 実行サーバ
Subversion サーバ
Q. セキュリティ上 AP サーバから Subversion リポジトリに アクセス出来ないんだって! これではデプロイできない。。。助けて!
(4) プッシュ式デプロイ
A. 「 deploy_via, :copy 」オプションを 使うことで、プッシュ式デプロイを行い
ましょう。
#config/deploy.rb
set :deploy_via, :copy
(4) プッシュ式デプロイ
AP サーバ
Capistrano 実行サーバ Subversion サーバ
deploy_via :copy を設定すると 1. capistrano 実行サーバにチェックアウト 2. AP サーバに gzip 圧縮して scp アップロード 3. AP サーバ上で展開して配置という流れでデプロイを行う事ができます。
①
②
③
3.意外と知らない?注意点
・ role:db の意味・ユーザのアップロード画像などは どこに置くべき?
role:db の意味
Q. role :db に指定するサーバは、 DB サーバで良いんだよね?
A. いいえ。 × : DB サーバ ○: Migration を実行するサーバ (ほとんどの場合 AP サーバと同じで良い)
ユーザのアップロード画像置き場所
Q. ユーザがアップロードした画像とか doc ファイルとかって、 どこに配置しておくのが良いのかな?
ユーザのアップロード画像置き場所A.shared/system 以下にに置き、 capistrano で public 以下へシンボリックリンクを 張りましょう。
myapp └ current └ releases---20091122010101( 最新アプリ ) └ shared └log └ log └public └ system └ user_img └ user_img
シンボリックリンク
シンボリックリンク
シンボリックリンク
ユーザのアップロード画像置き場所シンボリックリンクを張る例:#config/deploy.rb
after “deploy”, “deploy:link_images”
namespace(:deploy) do task :link_images do run <<-CMD cd #{release_path} && ln –nfs #{shared_path}/user_images #{release_path}/public/user_images CMD endend
ご静聴ありがとう
ございました。