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