Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
capistrano-bundle_rsync使ったらオートスケールが高速化した話
Search
ryonext
June 17, 2015
Programming
2.6k
8
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
capistrano-bundle_rsync使ったらオートスケールが高速化した話
ryonext
June 17, 2015
More Decks by ryonext
See All by ryonext
AWS Lambda の Ruby 対応
ryonext
0
280
TwitterのList編集しやすいやつ作った
ryonext
0
1.8k
validationについて
ryonext
1
870
AWS Lambda と API GatewayでRails使わずに済んだ話
ryonext
8
4.4k
PumaとUnicornで最近自分が理解したこと
ryonext
13
9.6k
Hubot事例
ryonext
1
1.7k
Redisでバッチ処理を冗長化しつつ排他制御
ryonext
0
2.2k
CircleCIとwercker
ryonext
3
1.3k
rubykaigi 3day interactive white board
ryonext
2
410
Other Decks in Programming
See All in Programming
GraphQL の onError と Nullability のこれから
quramy
0
180
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
210
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
280
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
1k
気持ちぃ〜角丸 Squircle
ryu1013
0
340
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
160
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
200
Groovy as a human and AI friendly programming language
paulk
0
110
R8 の設定見直しでアプリサイズ削減
andpad
0
230
AmebaブログはKMPから卒業します
kmars0605
0
240
Coding with AI: How to trust the storyteller (AWS Community Day Adria, Ljubljana 2026)
slobodan
0
120
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
4
1.3k
Featured
See All Featured
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
Prompt Engineering for Job Search
mfonobong
0
540
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
Testing 201, or: Great Expectations
jmmastey
46
8.4k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Abbi's Birthday
coloredviolet
4
10k
For a Future-Friendly Web
brad_frost
184
10k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Mind Mapping
helmedeiros
1
410
Transcript
$BQJTUSBOPCVOEMF@STZOD ͬͨΒΦʔτεέʔϧ͕ߴ Խͨ͠
ࣗݾհ w Ϣχίϯͱ͍͏ϕϯνϟʔͰ3BJMTॻ͍ͯ·͢ w ΠΧJESZPOFYU
࣍ w DBQJTUSBOPCVOEMF@STZODͱ w ๊͍͑ͯͨ՝ w ղܾͨ͠ํ๏ͱखॱ w ݁Ռ
DBQJTUSBOPCVOEMF@STZODͱ w %F/"ͷ!TPOPUT͞Μ͕࡞ͬͨɺ֤ϊʔυʹ STZODͰσϓϩΠͰ͖Δ(FN w IUUQTHJUIVCDPNTPOPUTDBQJTUSBOP CVOEMF@STZOD
Կ͕͍͍ͷ͔ʁ w ௨ৗͷDBQJTUSBOPͰɺ֤ϊʔυʹTTI͠ɺ֤ ϊʔυͰෛՙͷֻ͔ΔCVOEMFJOTUBMMΛߦ͏ɻ w ͜ͷ(FNɺσϓϩΠ༻ͷαʔόͰCVOEMF JOTUBMMΛߦ͍ɺσϓϩΠޙͷʮՌʯΛ࡞ͬͨ ͋ͱͰɺ֤ϊʔυʹSTZODͰ͢Δ
ಈ࡞Πϝʔδ DBQJTUSBOP࣮ߦαʔό σϓϩΠରαʔό σϓϩΠରαʔό σϓϩΠରαʔό/ TTI ֤αʔόͰCVOEMFJOTUBMM͕ߦΘΕΔ
ಈ࡞Πϝʔδ DBQJTUSBOP࣮ߦαʔό σϓϩΠରαʔό σϓϩΠରαʔό σϓϩΠରαʔό/ DBQJTUSBOP࣮ߦαʔόͰ CVOEMFJOTUBMMͨ͠ͷΛ STZODͰ͢Δ σϓϩΠର
͜ΕʹΑΓ w ֤ϊʔυͰDQVෛՙͷ͔͔Δ࡞ۀ͕ߦΘΕͳ͍ ͷͰϦιʔεʹ͍͞͠ w ͕૿͖͑ͯͨͱ͖ɺ͕͘ͳΓʹ͍͘
ͦͷଞͷϝϦοτ w ҰσϓϩΠͨ͠όʔδϣϯσϓϩΠαʔό ʹอଘ͞Ε͍ͯΔͨΊɺಉ͡όʔδϣϯͷσϓ ϩΠ͕ૣ͍ w ͜Ε͕Φʔτεέʔϧʹޮ͘
๊͍͑ͯͨ՝ w ࣍ͷΑ͏ͳΈͰΦʔτεέʔϧΛઃఆ͍ͯ͠ ·ͨ͠
ΦʔτεέʔϦϯά༻".*Λ࡞ ΦʔτεέʔϦϯ ά༻".* ΠϯελϯεΛ৽ن࡞͠ɺΞϓϦಈ࡞ʹඞཁͳϛυϧΣ Ξʢ3VCZ/HJOYͳͲʣΛೖΕͨͷΛ".*Խ ΞϓϦ༻ͷ "OTJCMF
ىಈ࣌ʹ6TFS%BUBͰҎԼͷॲ ཧΛ࣮ߦ ΦʔτεέʔϦϯ ά༻".*͔Β্ཱͪ ͕ͬͨΠϯελϯε (JU)VC͔ΒΞϓϦͷϦϙδτϦΛऔಘ औಘͨ͠ϦϙδτϦ͔Βɺࣗʹରͯ͠DBQEFQMPZΛ࣮ߦ
w ϝϦοτ w ؆୯ w σϝϦοτ w ճCVOEMFJOTUBMM͕ΔͷͰ͍ w ͱݴ͏͔ճͰ͍
͜ΕʹΑΓ w ฏۉͯ͠ڧͷ͕͔͔͍࣌ؒͬͯͨ
w ࠷৽ͷBQQαʔό͔Β".*Λ࡞ͬͯɺىಈͯ͠ 6OJDPSOΛ্ཱͪ͛Δɺͱ͍͏Γํ͋Δ͚ Ͳ w ".*ࠩ͠ସ͑ BVUPTDBMJOHHSPVQࠩ͠ସ͑· ͰɺσϓϩΠͱηοτͰΔͷϋʔυϧߴ͍ ʢҰԠࣗಈԽͰ͖Δ͔ʣ
ղܾͨ͠ํ๏ͱखॱ
͜͏ߟ͑ͨ w σϓϩΠ͞Ε͍ͯΔͷNBTUFSΛอ͓ͬͯΓɺ ඞͣDBQJTUSBOPͰσϓϩΠ͍ͯ͠ΔͷͰ w BVUPTDBMFͰىಈ࣌ʹɺDBQJTUSBOP CVOEMF@STZODͰσϓϩΠ͢ΕɺࠓNBTUFSʹ ͋ΔͷΛSTZOD͢Δ͚ͩͳͷͰૣ͍ͷͰʁ
͜͏͍͏ߏʹ σϓϩΠαʔό $JSDMF$* "QQαʔό "QQαʔό BVUPTDBMF ࣌ʣ σϓϩΠґཔ ݱࡏՔಇதͷ"QQαʔόʹσϓϩΠ ࣗʹσϓϩΠґཔ
σϓϩΠ
$JSDMF$*͔ΒσϓϩΠ͠ͳ ͍ཧ༝ w ࡞ऀͷ!TPOPUT͞Μͷϒϩάʹهड़͞Ε͍ͯ ·͕͢ɺσϓϩΠαʔόͱ"QQαʔόͷΞʔΩ ςΫνϟ͕ಉ͡Ͱ͋Δඞཁ͕͋ΔͨΊɻ w σϓϩΠαʔόͰCVOEMFJOTUBMM͔ͯ͠Β STZODͰSVCZΞϓϦΛࢃ͘DBQJTUSBOP֦ு ࡞ͬͨTPOPUTCMPHIUUQCMPHMJWFEPPSKQ
TPOPUTBSDIJWFTIUNM
௨ৗσϓϩΠ࣌ͷεΫϦϓτ 15 production: 16 branch: master 17 commands: 18 -
ssh {Ϣʔβ}@{σϓϩΠαʔό} 'source ~/.bash_profile; branch=master stage=production sh' < deploy.sh DJSDMFZNM
௨ৗσϓϩΠ࣌ͷεΫϦϓτ 1 #!/bin/sh 2 3 mkdir -p deploy/{app_name} 4 5
if [ ! -d ./deploy/{app_name}/$branch ] ; then 6 git clone
[email protected]
:{github_user}/{github_repo} ~/deploy/ {app_name}/$branch 7 fi 8 cd /home/ubuntu/deploy/{app_name}/$branch 9 git fetch 10 git checkout -f origin/$branch 11 bundle 12 bundle exec cap $stage deploy EFQMPZTI
௨ৗσϓϩΠ࣌ͷεΫϦϓτ 1 set :stage, :production 2 set :branch, ENV['BRANCH_NAME'] ||
'master' 3 set :rails_env, 'production' 4 5 require 'aws-sdk' 6 7 AWS.config( 8 access_key_id: ENV['AWS_ACCESS_KEY_ID'], 9 secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], 10 region: ‘{region}’ 11 ) 12 13 instances = AWS.ec2.instances.with_tag(:Name, ‘{instance_name}’).select{|i| i.status == :running}.map(&:dns_name) 14 15 role :app, instances, user: 'ubuntu' 16 role :web, instances, user: 'ubuntu' 17 role :db, instances.first, user: 'ubuntu' DPOpHEFQMPZQSPEVDUJPOSC
Φʔτεέʔϧ࣌ 1 #!/bin/bash 2 sudo su - {Ϣʔβ} -c "ssh
{Ϣʔβ}@{σϓϩΠαʔό} -o StrictHostKeyChecking=no 'source ~/.bash_profile; HOST=`hostname` branch=master stage=autoscale sh /home/ubuntu/deploy/{app_name}/ master/deploy.sh’” >> /tmp/autoscale.log 6TFS%BUB
Φʔτεέʔϧ࣌ DPOpHEFQMPZBVUPTDBMFSC 1 set :stage :production 2 set :rails_env, 'production'
3 set :host, ENV['HOST'] 4 5 server fetch(:host), user: 'ubuntu', roles: %w{app web db}
݁Ռ w ΦʔτεέʔϧͰֻ͔Δ࣌ؒʢ"84Ͱ "VUP4DBMJOH(SPVQΛ ͨ͠ͱ͜Ζ͔Βɺ&-#Ͱ αʔϏεΠϯ͢Δ·Ͱͷ࣌ؒʣ w #FGPSF w ඵ
w "GUFS w ඵ
͜͏͔͙ͭΜͩʂ w ࣮࣭ɺΦʔτεέʔϧͰ૿͔ͯ͠Βɺ࣮ࡍ ʹαʔό͕ಈ͘Α͏ʹͳΔ·Ͱʹ͔͔Δͷ ͰɺσϓϩΠ࡞ۀࣗମҎͰऴΘ͍ͬͯΔ ͜ͱʹɻ
·ͱΊ w ճCVOEMFJOTUBMM͢Δࠓ·ͰͷΓํ͕ѱ͔ͬ ͨͱ͍͏ͷ͋Γ·͕͢ɺͦΕͰઈେͳޮՌ Λൃش͢Δ͜ͱʹɻ
ಉ͡Α͏ͳ͜ͱ͕Ͱ͖Δϓϩ μΫτ w TʹΞοϓϩʔυͯ͠ɺσϓϩΠ࣌ʹQVMMͯ͘͠Δͱ͍͏ͷ w IUUQTHJUIVCDPNTPSBINBNJZB w IUUQTHJUIVCDPNGVKJXBSBTUSFUDIFS w ͜Ε!TPOPUT͞Μʹհͯ͠ΒͬͨͷͰ͕͢ɺDFSGDPOTVM͕ඞཁͩͬͨͷͰɺ·ͣ
DBQJTUSBOP͚ͩͰͰ͖Δຊ(FNͰͬͯΈ·ͨ͠ɻ w ࠓͬͯΔαʔϏε͕ͨͬͯେنʹͳ͖ͬͯͨΒ࠶ݕ౼ͯ͠Έ·͢ɻ