рдЕрднреА рдХреБрдЫ рдШрдВрдЯреЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмрд╣рд╕ рд╢реБрд░реВ рдХреА рдереА рдХрд┐ Node.JS рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдзреАрдореА рд╣реИ рдФрд░ рдЗрд╕реЗ рдЧреЛрд▓рдВрдЧ, рдЬрдВрдЧ, рдкреАрдПрдЪрдкреА, рдЖрджрд┐ рдХреЛ рдкрд╕рдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╡рд┐рд╡рд╛рдж рдореЗрдВ рд╡рд┐рдкрд░реАрдд рдкрдХреНрд╖ рдХрд╛ рдореБрдЦреНрдп рддрд░реНрдХ рдпрд╣ рдерд╛ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рд╣реИред рдХрдерд┐рдд рддреМрд░ рдкрд░, рдЬрдм рдХреЛрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХреЗрд╡рд▓ рдЗрд╕ рдПрдХрд▓-рд╕реВрддреНрд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЯрд┐рдХреА рд╣реБрдИ рд╣реИ рдФрд░ рдЕрдм рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдмрд╕ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, NodeJS рдХреЗ рд╕рд╛рде рдЪреАрдЬреЗрдВ рдереЛрдбрд╝реА рдмреЗрд╣рддрд░ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВ, рдореИрдВ рдпрд╣ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЙрд╕реЗ рдкрд╕рдВрдж рдерд╛ рдФрд░ рдЬрд┐рд╕реЗ рд╡рд╣ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рдореЗрдВ рдмреЗрд╣рддрд░ рдорд╛рдирддрд╛ рд╣реИред
рд╣реИрдмрд░ рдкрд░ "рдкреАрдПрдо 2" рдХреАрд╡рд░реНрдб рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛-рдкреНрд░рдмрдВрдзрдХ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдХреЛрдИ рднреА рд▓реЗрдЦ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХрд▓ рд╕рдВрджрд░реНрднред рдореИрдВ Node.JS (рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрддрд╛ рд╣реИ, рд╣рд╛рдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ) рдкрд░ рдмреИрдХрдПрдВрдб рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреЗ рдЗрд╕ рдЕрдВрдзреЗрд░реЗ рдХреЛрдиреЗ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдФрд░ рдмрд╣рд╛ рджреЗрдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдореИрдВ (рдЬреЛрд░рджрд╛рд░ рддрд░реАрдХреЗ рд╕реЗ рдмрддрд╛рдпрд╛) рдЧрдпрд╛ред рдореИрдВ рд╣рд░ рдХрд┐рд╕реА рд╕реЗ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВред
рдЦреБрдж PM2 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж
PM2 рдПрдХ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХ рд╣реИ рдЬрд┐рд╕реЗ AGPL-3.0 рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд рд╣реИред рдПрдирдкреАрдПрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдЗрд╕рдореЗрдВ ~ 350k рд╕рд╛рдкреНрддрд╛рд╣рд┐рдХ рдбрд╛рдЙрдирд▓реЛрдб рд╣реИрдВред рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрди рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ NodeJS рдкрд░ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ (рдЖрдк рдЗрд╕реЗ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ), рдЬреЛ рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдХрд░рдиреЗ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреЗ рдмреАрдЪ рд▓реЛрдб рдХреЛ рд▓рдЪреАрд▓реЗ рдврдВрдЧ рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
GitHub рдкрд░ PM2 рднрдВрдбрд╛рд░ рд╕реЗ рдПрдХ рдЫреЛрдЯреА рдХрддрд░рди:
PM2 рдиреЛрдб-рдЬреЗрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрд┐рд▓реНрдЯ-рдЗрди рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЬреАрд╡рд┐рдд рд░рдЦрдиреЗ, рдбрд╛рдЙрдирдЯрд╛рдЗрдо рдХреЗ рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рд╕реНрдЯрдо рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рдкрд░, рдХрдИ рдирдП рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА рд╣реИ, рдЬрдм рдЙрддреНрдкрд╛рджрди рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП "рд░реЛрд▓ рдЖрдЙрдЯ" рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡реЗ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЗрд╕реЗ "рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП" рдХреИрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╡реЗ
set NODE_ENV=production && node app.js
рдХреЛ SSH рдХрдВрд╕реЛрд▓ рдореЗрдВ
set NODE_ENV=production && node app.js
, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХрдВрд╕реЛрд▓ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдВрдж рдХрд░реЗрдВ рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред StackOverflow рд╕рд╡рд╛рд▓ -
рдиреЛрдб.рдЬреЗрдПрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ? рд╕рднреА рд╕рдордп рдХреЗ рд▓рд┐рдП 237 рд╣рдЬрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛ред
PM2 рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдПрдХ рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд░рддрд╛ рд╣реИ:
pm2 start app.js
рдпрд╣ рдЖрджреЗрд╢ "рдбреЗрдордирд╛рдЗрдЬ рдХрд░рддрд╛ рд╣реИ" (рдЕрдВрдЧреНрд░реЗрдЬреА "рдбреЗрдореЛрдиреЗрдЬрд╝") рдиреЛрдбрдЬ рдкреНрд░реЛрд╕реЗрд╕ рд╕реЗ, рдЗрд╕рдХреА рдореЗрдореЛрд░реА рдЦрдкрдд рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рд╡рд╛рдкрд╕ рд╣рдорд╛рд░реЗ рдореЗрдврд╝реЗ
рдЬреИрд╕реЗ рд╣реА рдмреИрдХрдПрдВрдб рдкрд░ рд▓реЛрдб рдмрдврд╝рддрд╛ рд╣реИ, рдЗрд╕реЗ рд╕реНрдХреЗрд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ - рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдФрд░ рдХреНрд╖реИрддрд┐рдЬ рджреЛрдиреЛрдВ - рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрдИ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЕрдЧрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрджрд░ рдХрдИ рдзрд╛рдЧреЗ рд╣реИрдВред NodeJS рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдкреНрд░рд╡рд╛рд╣ рдПрдХ рд╣реИред PM2 рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдФрд░ рдХрдИ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреЗ рдмреАрдЪ рд▓реЛрдб рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдЕрднреА рднреА рд╕рд┐рд░реНрдл рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде:
pm2 start app.js -i max
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ,
рдЕрдзрд┐рдХрддрдо рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдпрд╛рдиреА 8-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП 8 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдмрдирд╛рдИ рдЬрд╛рдПрдВрдЧреАред рдЖрдк
рдЕрдзрд┐рдХрддрдо рдХреЗ рдмрдЬрд╛рдп
-1 рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
, рдФрд░ рдлрд┐рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА
рд╕рдВрдЦреНрдпрд╛ рдХреЛрд░
1 рдХреА
рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧреАред рд╕рднреА рдЖрдХрд░реНрд╖рдг рдпрд╣ рд╣реИ рдХрд┐ HTTP (рдПрд╕) / рд╡реЗрдмрд╕реЛрдХреЗрдЯ / рдЯреАрд╕реАрдкреА / рдпреВрдбреАрдкреА рдХрдиреЗрдХреНрд╢рди рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ? рдЖрдк рдпрд╣рд╛рдБ PM2 рдореЗрдВ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ -
PM2 рдХреНрд▓рд╕реНрдЯрд░ рдореЛрдб ред

рдЖрдк рдЬрд┐рддрдиреА рдЪрд╛рд╣реЗрдВ рдЙрддрдиреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ рд╕рд┐рдлрд╛рд░рд┐рд╢ "рдкреНрд░рддрд┐ рдХреЛрд░ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛" рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреА рдЬрд╛рддреА рд╣реИред
рд╕реНрдореГрддрд┐ рдХрд╛ рд╕рдореНрдорд╛рди
PHP рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХрд░рддреЗ рд╕рдордп, рдореИрдВ рдПрдХ рдмрд╛рд░ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдЕрдиреБрднрд╡рд╣реАрдирддрд╛ рдХреЗ рдХрд╛рд░рдг, рдЙрд╕рдиреЗ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдЗрдВрдЬрди рдореЗрдВ рдПрдХ рдмрдЧ рд░рдЦрд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг, рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдиреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд░реИрдо рдЦрд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╕рд┐рд░реНрдл рд▓рдЯрдХрд╛ рд╣реБрдЖ рдерд╛ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреА рдкрд╣реБрдВрдЪ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдереАред
рдЬреИрд╕рд╛ рдХрд┐ PHP рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬрд╛рдирддреЗ рд╣реИрдВ, PHP-FPM рдореЗрдВ рдЖрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╡рд┐рддрд░рдг рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрджрд┐ рдЖрдк рдЕрдЪрд╛рдирдХ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдереЗ, рддреЛ PHP-FPM рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдирдП рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ) - рд╕реНрдереИрддрд┐рдХ, рдЬрдм рдиреНрдпреВрдирддрдо рдФрд░ рдЕрдзрд┐рдХрддрдо рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб рд╕реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЧрддрд┐рд╢реАрд▓ - рдХрд┐рддрдирд╛ рдХрд╛ рдЖрд╡рдВрдЯрди рдЖрд╡рд╢реНрдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рдмрдбрд╝реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВред PM2 рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк 8 рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рдмрд╣реБрдд рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ? рдФрд░ PM2 рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ - рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рд╕рд┐рд░реНрдл рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде:
# Set memory threshold for app reload pm2 start app.js -i max --max-memory-restart <200MB>
рд╣рд░ рдмрд╛рд░ рдореЗрдореЛрд░реА рд╕реАрдорд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдиреЗ рдкрд░, PM2 рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛ред рдореЗрдореЛрд░реА рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рд╣реИ рдирд╛? 8 рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ * 200 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ = 1.6 рдЧреАрдЧрд╛рдмрд╛рдЗрдЯред рджреНрд╡рд┐рддреАрдп рд╢реНрд░реЗрдгреА рдХрд╛ рдЧрдгрд┐рддред
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк N рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдХреЗ рдмрд╛рдж рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдирд╛ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЕрднреА рддрдХ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╛рдо рдЖ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмреЗрдЭрд┐рдЭрдХ рдореБрдЭреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВрдЧреЗ :)
рдФрд░ рдЕрдЧрд░ рдореИрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░рддрд╛ рд╣реВрдВ?
рдЖрд╢реНрдЪрд░реНрдп, рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рд╣реИ! PM2 рднреА рдЖрдкрдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдЕрднреА рднреА рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХрдорд╛рдВрдб рдирд╣реАрдВ рд╣реИрдВ:
pm2 startup
PM2 рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ рдЬреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрдврд╝рд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдкрдХреЛ рд╕рддрд░реНрдХ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЬрдм Node.JS рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдЬрд╛рдП рддреЛ рд╕рдм рдХреБрдЫ рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, Node.JS рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж,
pm2 unstartup
рдФрд░
pm2 startup
ред рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдВрдХ рдкрд░ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ -
рдкреАрдПрдо 2 рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЗрдирд░реЗрдЯрд░ ред
рдХреНрдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╕рдордп рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ?
рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ! рдареАрдХ рд╣реИ, рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВ? рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдм рдХреБрдЫ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд▓ рдЖрдкрдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддрд╛ рд╣реИ!
pm2 start env.js --watch --ignore-watch="node_modules"
рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╕реНрдерд╛рдиреАрдп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдорд╛рд╕реНрдЯрд░ рдмреНрд░рд╛рдВрдЪ рдХреЗ рд╕рд╛рде рд░рд┐рдореЛрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдорд╛рд╕реНрдЯрд░ рдмреНрд░рд╛рдВрдЪ рдХреЛ рдорд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реЗ рд╕рд╛рдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, рдпрд╣ рдмрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ -
git pull origin master && npm run build
ред рдЬрдм
рд╕рд░реНрд╡рд░ / рдмрд┐рд▓реНрдб рдФрд░
рдХреНрд▓рд╛рдЗрдВрдЯ / рдмрд┐рд▓реНрдб рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдореЗрдВ рдлрд╛рдЗрд▓ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрдирд░рд╛рд░рдВрдн рд╣реЛ рдЬрд╛рдПрдВрдЧреАред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЗрд╕ рдкрд╛рда рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рднреА рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдХреБрдЫ рдЧрдВрднреАрд░ рдХреЗ рд╕рд╛рде рдкрддрд▓рд╛ рдХрд░реВрдВрдЧрд╛ рдФрд░ рд▓рд┐рдЦреВрдВрдЧрд╛ рдХрд┐ рдпрджрд┐ рдЖрдк рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрджрд▓реЗ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рдВ, рддрд╛рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╣рдореЗрд╢рд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛ рд╕рдХреЗред рдпрд╣ рд╢реВрдиреНрдп-рдбрд╛рдЙрдирдЯрд╛рдЗрдо рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╣реИ!
рдФрд░ рдЖрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЗрд╕рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдирдЧрдгрдХреНрд╕ рд▓реЛрдб рдХреЗ рд╕рдорд╛рди рдХреБрдЫ):
pm2 reload all
рдмрд╣реБрдд рд╕рд╛рд░реА рдЯреАрдореЗрдВ! рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ
рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдЬреАрдм рд╡рд╛рдХреНрдпрд╛рдВрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╕реЗ рдКрдм рдЧрдпрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рд░рд▓ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ: рдПрдХ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдлрд╝рд╛рдЗрд▓ рд╣реИред рд╕рдорд░реНрдерд┐рдд рдкреНрд░рд╛рд░реВрдк JSON, YAML рдФрд░ JS рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдкрдХреЛ
рд╕рд░реНрд╡рд░ рдФрд░
рдХреНрд▓рд╛рдЗрдВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
module.exports = { apps: [{ script: "app.js", watch: ["server", "client"], env_production : { "NODE_ENV": "production" } }] }
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рд▓рд┐рдВрдХ -
рдкреАрдПрдо 2 рдЖрд╡реЗрджрди рдШреЛрд╖рдгрд╛ рджреЗрдЦреЗрдВ ред
рдФрд░ рдирд┐рдЧрд░рд╛рдиреА рднреА рд╣реИ!
рдФрд░ рдПрдХ рдирд╣реАрдВред рдЖрдк рдЬрд┐рд╕реЗ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдЪреБрдиреЗрдВред рдЖрдк рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрдВрд╕реЛрд▓ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
pm2 monit

рдпрд╛ рдкреВрд░реНрдг рд╡реЗрдм-рдЖрдзрд╛рд░рд┐рдд рдирд┐рдЧрд░рд╛рдиреА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореБрдЭ рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдпрд╣
рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
pm2 plus
рдФрд░ рдмрд╣реБрдд, рдмрд╣реБрдд рдЕрдзрд┐рдХ ...
Heroku рдФрд░ Docker рдХреЗ рд▓рд┐рдП рдШреЛрд╖рд┐рдд рд╕рдорд░реНрдерди, рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреЛрд░реНрдЯ рдЗрдиреНрдХреНрд░реАрдкреНрд╢рди редvv (рдЬрдм рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреЛрд░реНрдЯ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ), рдПрдХ рд╣реА OS рдореЗрдВ рдХрдИ PM2 рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдХрд╛ рд▓реЙрдиреНрдЪ, рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ API рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдФрд░ demonized рдмрд╛рд╢ рдФрд░ рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛!
рдореБрдЭреЗ рд╢рд╛рдпрдж рдХреБрдЫ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рдпрд╛рдж рдЖрдпрд╛, рдЬреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдпрд╛рдж рджрд┐рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред