capistrano設定の共通化       (+ Tips集)    2013/02/15 kyoto.rb
shiba_yu36
• Perl• JavaScript• (Rubyはあんまり使ってない...)
capistrano     使ってますか?注) capistranoはdeploy用のツールです
capistranoとは?• デプロイ用ツール• コマンド一つでアプリケーションのデ プロイが出来たりする• 特にRailsに特化してる• 知らない人が多かったらデモするかも
capistranoにまつわるよくある(?)ストーリー
このprojectではcapを使おう!便利!
便利だからこっちのprojectでも使おう  適当に設定コピペ
あ、このprojectちょっとだけdeploy方法違うから適当に修正       しちゃおう
それから数カ月後....
自分が別のprojectへ...    さてdeployだ適当にcap deployとかしたら    いいんでしょ
cap deploy微妙に方法違ってサーバ全台落ちる
何が問題か• 各プロジェクトでCapfileをそれぞれ作 る• deploy手順がそれぞれ違う• 人が気をつけないとdeploy出来ない状 態に
共通化したい• 同じような処理はきちんとまとめたい• 便利なツールは社内で共有したい• 出来るだけdeploy方法がばらばらにな らないようにしたい
例)common-deploy.rb• 各project共通処理をまとめておく• update, restart, log, etc...• あとはCapfileでloadする運用
例)common-deploy.rbdesc "Update remote files"task :update do |o|    run "mkdir -p #{releases_path}"    strategy.deploy!    ...
問題点• 少し便利なオレオレ設定を共通ファイ  ルに書き出す• 行数が多くなってくる• 微妙にタスク間でconflictしだす• common-deploy.rbを更新できなくな  る• 結局元の状況に............
問題点wc -l common-deploy.rb 981 common-deploy.rb
最近の共通化の方針• やりたいことごとにファイルを作って共 通化する• default設定, deploy用, cron,  perlbrew, rbenv, daemontools, etc...• それぞれのサービスは必要な物だけload
最近の共通化の方針• それぞれのサービスは必要な物だけload• サービスの差異を吸収しながら共通化で きる• task名とその内容の標準化は別途必要
例.!"" Capfile # サービスごとの設定#"" config    !"" cron.rb          # cron設定    !"" daemontools.rb # svc操作用関数    !"" default.rb   ...
demo(っぽいもの)• Capfile• default設定• cron設定など• 実際のdeployとか• 随時質問を受けます
これにより• オレオレ設定でも違うファイルにして おけば良い• load対象を分けるので、一定の互換性 が保たれる
ここからはcapistranoの  tipsを紹介します
plugin編
plugin編• gem install capistrano_colors -> 色  付け • 目grepに便利です
deploy編
deploy編• 以下が協調して動作する • 本体のdeploy.rb • deploy/scm, • deploy/strategy
deploy編• scm : version管理ツールの種類ご とのdeploy設定• strategy : どのようなdeploy方法を とるか
git設定set :scm, :git # git使うset :git_shallow_clone, 1 # depth=1でやってくれるset :git_enable_submodules, 1 # submoduleもset :branch...
strategy設定• deploy_viaを設定すればstrategyを 決められる• 様々な方法でdeploy
strategy設定• いろんな方法でdeployしてくれる • checkout • copy • remote_cache • 独自
strategy checkout• remoteでcloneしてcheckout• versionで区切る方法だと毎回cloneさ れそう • versions/20130208みたいなやつ
strategy copy• 手元のファイルをupload• なんかいろいろやっててよくわからん
strategy remote_cache • cached-copy dirにclone • それをrsyncでコピーしてdeploy • 毎回cloneするよりだいぶ速い
strategy設定• とりあえずremote_cache使うとよいset :deploy_via, :remote_cache
環境ごとに設定変える
環境ごとに設定変える• capistrano-ext• taskでroleを動的定義する
capistrano-ext• production.rbとかstaging.rbとか• もうちょい調べる
roleを動的定義するtask @production do  role :app, production01.host  role :cron, production01.hostendtask @development do  role :...
roleを動的定義するcap @production deploycap @development deploy
task実行サーバを制限する
role制限role :app, app.hostrole :db, db.hosttask :restart, :roles => [:app] do  ...end
only制限role :app, app.host, :perl => truerole :db, db.hosttask :perl_setup, :only => { :perl => true }do   ...end
defaultタスク
defaultタスク• defaultというタスクを作っておく• するとnamespaceでタスクを呼べる
defaultタスクnamespace :deploy do  task :default do    update    restart  end  task :update do    ...  end  task :restart do ...
defaultタスク          cap deploycap deploy:update deploy:restart
他にも話せそうだけどとりあえず終わります!
Upcoming SlideShare
Loading in …5
×

130207 kyotorb

3,152 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,152
On SlideShare
0
From Embeds
0
Number of Embeds
2,364
Actions
Shares
0
Downloads
3
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

130207 kyotorb

  1. 1. capistrano設定の共通化 (+ Tips集) 2013/02/15 kyoto.rb
  2. 2. shiba_yu36
  3. 3. • Perl• JavaScript• (Rubyはあんまり使ってない...)
  4. 4. capistrano 使ってますか?注) capistranoはdeploy用のツールです
  5. 5. capistranoとは?• デプロイ用ツール• コマンド一つでアプリケーションのデ プロイが出来たりする• 特にRailsに特化してる• 知らない人が多かったらデモするかも
  6. 6. capistranoにまつわるよくある(?)ストーリー
  7. 7. このprojectではcapを使おう!便利!
  8. 8. 便利だからこっちのprojectでも使おう 適当に設定コピペ
  9. 9. あ、このprojectちょっとだけdeploy方法違うから適当に修正 しちゃおう
  10. 10. それから数カ月後....
  11. 11. 自分が別のprojectへ... さてdeployだ適当にcap deployとかしたら いいんでしょ
  12. 12. cap deploy微妙に方法違ってサーバ全台落ちる
  13. 13. 何が問題か• 各プロジェクトでCapfileをそれぞれ作 る• deploy手順がそれぞれ違う• 人が気をつけないとdeploy出来ない状 態に
  14. 14. 共通化したい• 同じような処理はきちんとまとめたい• 便利なツールは社内で共有したい• 出来るだけdeploy方法がばらばらにな らないようにしたい
  15. 15. 例)common-deploy.rb• 各project共通処理をまとめておく• update, restart, log, etc...• あとはCapfileでloadする運用
  16. 16. 例)common-deploy.rbdesc "Update remote files"task :update do |o| run "mkdir -p #{releases_path}" strategy.deploy! if ENV[ROLES] =~ /proxy/ && server_type ==daemontools puts "### SEEMS LIKE PROXY; UPDATE CURRENT ###" daemontools.update_current end if ENV[ROLES] && update_timestamp_filter && !update_timestamp_filter.include?(ENV[ROLES]) update_static_timestamps endend
  17. 17. 問題点• 少し便利なオレオレ設定を共通ファイ ルに書き出す• 行数が多くなってくる• 微妙にタスク間でconflictしだす• common-deploy.rbを更新できなくな る• 結局元の状況に............
  18. 18. 問題点wc -l common-deploy.rb 981 common-deploy.rb
  19. 19. 最近の共通化の方針• やりたいことごとにファイルを作って共 通化する• default設定, deploy用, cron, perlbrew, rbenv, daemontools, etc...• それぞれのサービスは必要な物だけload
  20. 20. 最近の共通化の方針• それぞれのサービスは必要な物だけload• サービスの差異を吸収しながら共通化で きる• task名とその内容の標準化は別途必要
  21. 21. 例.!"" Capfile # サービスごとの設定#"" config !"" cron.rb # cron設定 !"" daemontools.rb # svc操作用関数 !"" default.rb # 共通deploy設定 !"" perlbrew.rb # perlbrew用 #"" utils.rb # その他便利関数
  22. 22. demo(っぽいもの)• Capfile• default設定• cron設定など• 実際のdeployとか• 随時質問を受けます
  23. 23. これにより• オレオレ設定でも違うファイルにして おけば良い• load対象を分けるので、一定の互換性 が保たれる
  24. 24. ここからはcapistranoの tipsを紹介します
  25. 25. plugin編
  26. 26. plugin編• gem install capistrano_colors -> 色 付け • 目grepに便利です
  27. 27. deploy編
  28. 28. deploy編• 以下が協調して動作する • 本体のdeploy.rb • deploy/scm, • deploy/strategy
  29. 29. deploy編• scm : version管理ツールの種類ご とのdeploy設定• strategy : どのようなdeploy方法を とるか
  30. 30. git設定set :scm, :git # git使うset :git_shallow_clone, 1 # depth=1でやってくれるset :git_enable_submodules, 1 # submoduleもset :branch, "master"set :repository do "git@host:projects/Hoge.git"end
  31. 31. strategy設定• deploy_viaを設定すればstrategyを 決められる• 様々な方法でdeploy
  32. 32. strategy設定• いろんな方法でdeployしてくれる • checkout • copy • remote_cache • 独自
  33. 33. strategy checkout• remoteでcloneしてcheckout• versionで区切る方法だと毎回cloneさ れそう • versions/20130208みたいなやつ
  34. 34. strategy copy• 手元のファイルをupload• なんかいろいろやっててよくわからん
  35. 35. strategy remote_cache • cached-copy dirにclone • それをrsyncでコピーしてdeploy • 毎回cloneするよりだいぶ速い
  36. 36. strategy設定• とりあえずremote_cache使うとよいset :deploy_via, :remote_cache
  37. 37. 環境ごとに設定変える
  38. 38. 環境ごとに設定変える• capistrano-ext• taskでroleを動的定義する
  39. 39. capistrano-ext• production.rbとかstaging.rbとか• もうちょい調べる
  40. 40. roleを動的定義するtask @production do role :app, production01.host role :cron, production01.hostendtask @development do role :app, development01.host role :cron, development01.hostend
  41. 41. roleを動的定義するcap @production deploycap @development deploy
  42. 42. task実行サーバを制限する
  43. 43. role制限role :app, app.hostrole :db, db.hosttask :restart, :roles => [:app] do ...end
  44. 44. only制限role :app, app.host, :perl => truerole :db, db.hosttask :perl_setup, :only => { :perl => true }do ...end
  45. 45. defaultタスク
  46. 46. defaultタスク• defaultというタスクを作っておく• するとnamespaceでタスクを呼べる
  47. 47. defaultタスクnamespace :deploy do task :default do update restart end task :update do ... end task :restart do ... endend
  48. 48. defaultタスク cap deploycap deploy:update deploy:restart
  49. 49. 他にも話せそうだけどとりあえず終わります!

×