• Like
130207 kyotorb
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

130207 kyotorb

  • 1,850 views
Published

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,850
On SlideShare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
2
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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