Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Node.jsサーバアプリケーションの 稼働方法 ~基本からDockerまで~
Akiyoshi Tanaka
May 09, 2019
Programming
1
630
Node.jsサーバアプリケーションの 稼働方法 ~基本からDockerまで~
Akiyoshi Tanaka
May 09, 2019
Tweet
Share
More Decks by Akiyoshi Tanaka
See All by Akiyoshi Tanaka
TypeScript @Decorator で node.js 開発
akkunchoi
0
55
Laravel5.5 Broadcastingを使ってみた話
akkunchoi
1
420
Other Decks in Programming
See All in Programming
未経験QAの私が、よきQA(Question Asker) になっていく物語
atamaplus
0
320
byte列のbit表現を得るencodingライブラリ作った
convto
1
180
競プロへの誘 -いざな-
u76ner
0
380
GraphQL+KMM開発でわかったこと / What we learned from GraphQL+KMM development
kubode
0
130
NieR Re[in]carnationにおけるUnityアニメーション活用術
applibot
1
510
Cloud-Conference-Day-Spring Cloud + Spring Webflux: como desenvolver seu primeiro microsserviço reativo em Java?
kamilahsantos
1
140
Jetpack Compose 頑張らないPreviewParameterProvider
horie23
0
110
About Type Syntax Proposal
quramy
1
1.2k
クリエイティブ系のウェブサイト制作で役立つCSS技法 / CSS for develop creative website
clockmaker
2
1.6k
TechFeed Conference 2022 - Kotlin Experimental
jmatsu
0
820
スモールチームがAmazon Cognitoでコスパよく作るサービス間連携認証
tacke_jp
2
740
「新卒だけ」じゃない!学び直しを支えるミクシィの技術研修を紹介
mixi_engineers
PRO
0
120
Featured
See All Featured
Designing the Hi-DPI Web
ddemaree
272
32k
How to train your dragon (web standard)
notwaldorf
57
3.8k
Principles of Awesome APIs and How to Build Them.
keavy
113
15k
VelocityConf: Rendering Performance Case Studies
addyosmani
316
22k
Adopting Sorbet at Scale
ufuk
63
7.5k
Writing Fast Ruby
sferik
612
57k
What's new in Ruby 2.0
geeforr
336
30k
Keith and Marios Guide to Fast Websites
keithpitt
404
21k
Reflections from 52 weeks, 52 projects
jeffersonlam
337
17k
Art, The Web, and Tiny UX
lynnandtonic
280
17k
Facilitating Awesome Meetings
lara
29
3.9k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
15
910
Transcript
/PEFKTαʔόΞϓϦέʔγϣϯͷ Քಇํ๏ ʙجຊ͔Β%PDLFS·Ͱʙ
ࣗݾհ w גࣜձࣾ#5SFF w ాதষت"LJZPTIJ5BOBLB w !BLLVO@DIPJ w /PEFKTΞϓϦέʔγϣϯӡ༻ܦݧ
୯ମϓϩάϥϜ αʔόϨε αʔό 'BB4-BNCEB #BB4'JSFCBTF *BB4&$ 1BB4)FSPLV ϑϩϯτΤϯυΞϓϦέʔγϣϯͷϏϧυ ࠓͷτϐοΫʂ /PEFKTͷ༻్ࠓͷτϐοΫ
*P5σόΠε ΦϯϓϨ
w /PEFKTͰαʔόཱͯͨ͜ͱ͕͋Δ w QNΛͬͨ͜ͱ͕͋Δ w %PDLFS্Ͱ/PEFKTΛಈ͔͍ͯ͠Δ ࣭
w جຊ w ϓϩηεϚωʔδϟ w αʔόΞʔΩςΫνϟ w "84&$4Y/PEFKT ࣍
w جຊ w ϓϩηεϚωʔδϟ w αʔόΞʔΩςΫνϟ w "84&$4Y/PEFKT
/PEFKT8FCαʔόಈ࡞ྫ ιʔε $ curl http://localhost:8000 Fri May 03 2019 13:00:25
GMT+0900 (JST) αʔόىಈ ΫϥΠΞϯτ ΞΫηε $ node index.js
OPEFίϚϯυ w جຊతʹγϯάϧϓϩηεɺγϯάϧεϨου w ΤϥʔͰϓϩηε͕མͪΔͱఀࢭͯ͠͠·͏ w ߋ৽͢ΔࡍʹμϯλΠϜ͕ൃੜ
w جຊ w ϓϩηεϚωʔδϟ w ΞʔΩςΫνϟ w "84&$4Y/PEFKT
ϓϩηεϚωʔδϟ ɾΞϓϦέʔγϣϯ͕ҟৗऴྃͨ͠߹ʹࣗಈతʹ࠶࢝ಈ͢Δɻ ɾϥϯλΠϜɾύϑΥʔϚϯεͱϦιʔε༻ྔʹؔ͢ΔΠϯαΠτΛಘΔɻ ɾύϑΥʔϚϯεΛ্ͤ͞ΔͨΊʹઃఆΛಈతʹมߋ͢Δɻ ɾΫϥελϦϯάΛ੍ޚ͢Δɻ IUUQTFYQSFTTKTDPNKBBEWBODFEQNIUNM
ϓϩηεϚωʔδϟ w GPSFWFS w 1. w 4USPOH-PPQ1SPDFTT.BOBHFS TUSPOHQN w
4ZTUFN%
1.
ϓϩηεϚωʔδϟQN w /PEFKTͷϓϩηεϚωʔδϟ w Πϯετʔϧɺىಈ؆୯ w ϓϩηε࠶ىಈɺઃఆϑΝΠϧԽ $ npm install
pm2@latest -g $ pm2 start app.js
ϓϩηεϚωʔδϟQN w σϓϩΠ w ࣗಈىಈαϙʔτ w Ϛϧνϓϩηεىಈ w ଞɺϞχλϦϯάɺϩάཧ
ϓϩηεϚωʔδϟQNσϓϩΠ w ઃఆϑΝΠϧʹهड़ͯ͠ίϚϯυ࣮ߦ͢Δ͚ͩ w θϩμϯλΠϜͰߋ৽Մೳ w DBQJTUSBOPͱͷ૬ੑ͕ѱ͍ɻQNͰͷσϓϩΠ͕ແ w γϯϘϦοΫϦϯΫͰϦϦʔεΛΓସ͑ΔΈ͕QNʹ߹Θͳ͍ w
࠶ىಈ࣌ʹө͞Εͳ͍ɺΤϥʔͰམͪΔ
ϓϩηεϚωʔδϟQNσϓϩΠ module.exports = { apps: [{ name: "app", script: "app.js"
}], deploy: { production: { key: "/path/to/some.pem", user: "ubuntu", host: ["192.168.0.13"], ref: "origin/master", repo: "git@github.com:Username/repository.git", path: "/var/www/my-repository", 'post-deploy': "npm install", }, } } FDPTZTUFNDPOpHKT IUUQTQNJPEPDFOSVOUJNFHVJEFFBTZEFQMPZXJUITTI
ϓϩηεϚωʔδϟQNࣗಈىಈ w ࣗಈىಈαʔόىಈ࣌ʹࣗಈతʹϓϩηεΛىಈ͢Δ w ֤04ʹ߹ΘͤͨࣗಈىಈઃఆΛੜ͢ΔίϚϯυ͕༻ҙ w TZTUFNE VQTUBSU MBVODIE PQFOSD
SDE TZTUFNW $ pm2 startup
ϓϩηεϚωʔδϟϚϧνϓϩηε w $16ϦιʔεΛ࠷େݶ͏ͨΊ w γϯάϧϓϩηεͰϕϯνϚʔΫൺֱ͠ͳ͍Ͱʜʂ w ϫʔΧʔϓϩηε͕ͭఀࢭͯ͠ɺଞͷϓϩηεͰಈ࡞ w $16ϔϏʔͳॲཧɺϒϩοΩϯά*0Ͱࢭ·Δ
ϓϩηεϚωʔδϟϚϧνϓϩηε w ϓϩηεͷσʔλΠϕϯτڞ༗͞Εͳ͍ w 3FEJTͰڞ༗͢Δ w 8FC4PDLFUΛϚϧνϓϩηεͰ͏߹ඞਢ
ϓϩηεϚωʔδϟQNϚϧνϓϩηε w ෛՙࢄΛࣗͰΔˠGPSLϞʔυ w ෛՙࢄΛQNʹ͍ͤͨˠDMVTUFSϞʔυ
ϓϩηεϚωʔδϟQNϚϧνϓϩηε DMVTUFS GPSL ιʔεमਖ਼ ෆཁ ඞཁ ϙʔτׂ ϚελʔͷΈ ͭ ϓϩηε͝ͱ
ෳ ىಈํ๏ DMVTUFSϞδϡʔϧ DIJME@QSPDFTTGPSL ϩʔυόϥϯγϯά ༗ ແ εςΟοΩʔ ηογϣϯ ෆՄ -#ଆͰՄ
ϓϩηεϚωʔδϟ·ͱΊ w OPEFͷىಈQNͰࣄΓΔ w Ϛϧνϓϩηεʹ͢Δ߹Ϟʔυͷҧ͍ʹҙ w DMVTUFSϞʔυͱGPSLϞʔυͷ͍͚
w جຊ w ϓϩηεϚωʔδϟ w αʔόΞʔΩςΫνϟ w "84&$4Y/PEFKT
αʔόΞʔΩςΫνϟ γϯάϧϓϩηε Ϛϧνϓϩηε γϯάϧαʔό ։ൃ༻్ খن Ϛϧναʔό γϯϓϧ εέʔϧΞτ DMVTUFSͰ
εέʔϧΞτ
γϯάϧϓϩηεɾγϯάϧαʔό w ࠷γϯϓϧͳߏ w ։ൃڥɺϓϩτλΠϓ͚ αʔό
Ϛϧνϓϩηεɾγϯάϧαʔό w खܰʹεέʔϧΞοϓ͍ͨ͠ɺՄ༻ੑΛ্͍͛ͨ w খنͳϓϩμΫτ͚ αʔό DMVTUFS
Ϛϧνϓϩηεɾγϯάϧαʔό w GPSLϞʔυͳΒϩʔυόϥϯαඞཁ ϩʔυόϥϯα αʔό GPSL
γϯάϧϓϩηεɾϚϧναʔό ϩʔυόϥϯα w αʔόଆͷߏΛγϯϓϧʹෛՙࢄ͕Ͱ͖Δ w %PDLFSڥͰߏங͍͢͠ w ϩʔυόϥϯαͰεςΟοΩʔηογϣϯ͍ͨ͠߹ʢ4PDLFUJPʣ αʔό αʔό
ϚϧνϓϩηεɾϚϧναʔό ϩʔυόϥϯα w ϚϧνίΞαʔόͰෛՙࢄ͍ͨ͠ w GPSLϞʔυͰಈ͔͢ͱ໘ αʔό αʔό
αʔόΞʔΩςΫνϟ·ͱΊ γϯάϧϓϩηε Ϛϧνϓϩηε γϯάϧαʔό ։ൃ༻్ খن Ϛϧναʔό γϯϓϧ εέʔϧΞτ DMVTUFSͰ
εέʔϧΞτ
w جຊ w ϓϩηεϚωʔδϟ w αʔόΞʔΩςΫνϟ w "84&$4Y/PEFKT
"84&$4 w "84ͷ%PDLFSίϯςφϚωδϝϯταʔϏε w &$͔ɺϑϧϚωʔδυͷ'BSHBUFΛબͰ͖Δ w 'BSHBUFศར͚ͩͲɺ&$ΑΓׂߴͰɺTTIͰαοͱೖΕͳ͍
%PDLFSY/PEFKT w %PDLFSͱ/PEFKTͷ૬ੑ͕ྑ͍ w ͲͪΒجຊγϯάϧϓϩηε w /PEFKTίϯςφ͚ͩͰ8FCαʔόίϯςφ͕ͳͯ͘ಈ͘
ෳαʔόߏ๊͕͑Δ՝ w σϓϩΠ w ϩάऩू w εέʔϧΞτ w αʔόߏཧ
ෳαʔόߏ๊͕͑Δ՝Λ"84&$4Ͱղܾ w σϓϩΠ w ϩάऩू w εέʔϧΞτ w αʔόߏཧ ϩʔϦϯάߋ৽
$MPVE8BUDI Φʔτεέʔϧ %PDLFSpMFEPDLFSDPNQPTF
ϩʔϦϯάߋ৽ ίϯςφ W ίϯςφ W ίϯςφ W ίϯςφ W ৽͍͠όʔδϣϯΛىಈ
৽όʔδϣϯͷૄ௨͕֬ೝͰ͖Ε چόʔδϣϯΛࢭΊΔ
"84&$4 &-# ʢϩʔυόϥϯαʣ &$ %PDLFSίϯςφ &$ %PDLFSίϯςφ %PDLFSίϯςφ ˞'BSHBUFͷ߹ɺ&$ෆཁ
"84&$4 w ίϯςφͷࣗಈ෮چ w OPEFKTϓϩηε͕མͪͯɺૄ௨͕Ͱ͖ͳ͘ͳΔͱίϯςφΛىಈ͢Δ w ϩʔϦϯάߋ৽ w ϩάυϥΠόઃఆ w
&-#ʹΑΔϩʔυόϥϯγϯά w ΤϑΣϝϥϧϙʔτʹ͢Δ͜ͱͰϙʔτׂࣗಈ
ϓϩηεϚωʔδϟ ɾΞϓϦέʔγϣϯ͕ҟৗऴྃͨ͠߹ʹࣗಈతʹ࠶࢝ಈ͢Δɻ ɾϥϯλΠϜɾύϑΥʔϚϯεͱϦιʔε༻ྔʹؔ͢ΔΠϯαΠτΛಘΔɻ ɾύϑΥʔϚϯεΛ্ͤ͞ΔͨΊʹઃఆΛಈతʹมߋ͢Δɻ ɾΫϥελϦϯάΛ੍ޚ͢Δɻ IUUQTFYQSFTTKTDPNKBBEWBODFEQNIUNM
"84&$4 w "84&$4ϓϩηεϚωʔδϟʁ w &$4্ͳΒQNΛΘͣOPEFίϚϯυ͚ͩͰेʁ
·ͱΊ w QNͰαʔόӡ༻ͷେ෦ղܾͰ͖Δ w ༻్ʹ߹ͬͨΞʔΩςΫνϟબఆ͕ඞཁ w ෳߏ%PDLFSΛͬͨӡ༻͕Φεεϝ
Γ͍ͨ͜ͱ w XPSLFS@UISFBET w ύϑΥʔϚϯεɾνϡʔχϯά w ͦͷଞͷίϯςφϚωδϝϯταʔϏε
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠