Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Capistrano 実践Tips集

47,240 views

Published on

Published in: Technology
  • 素晴らしい。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Capistrano 実践Tips集

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

×