рдЕрдкрдиреЗ
рдЖрдЦрд┐рд░реА рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдбреЙрдХреНрдпреВ рдХреЛ рд╣рдорд╛рд░реЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЖрдЬ рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкреНрд░рдХрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдбреЙрдХреНрдпреВ рдПрдХ рдЙрдмрдВрдЯреВ рд╕рд░реНрд╡рд░ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдорд┐рдиреА рд╣рд░реЛрдХреВ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИред рдбреЙрдХреНрдпреВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рддрд╛ рд╣реИ:
$ git push production master
рдХрдИ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ (Node.js, Java, PHP, Python etc) рдХреЗ рд▓рд┐рдПред рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рд░рдирд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ, рдЬрд┐рд╕реЗ
http/https
рдорд╛рдзреНрдпрдо рд╕реЗ рддреБрд░рдВрдд рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рдпрджрд┐ рдЖрдк
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЖрдк рд░реЗрдЦрд╛ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ -
"рдбреЙрдХ рд╕рдВрдЪрд╛рд▓рд┐рдд рдмрд╛рд╢ рдХреА рд▓рдЧрднрдЧ 100 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдорд┐рдиреА-рд╣рд░реЛрдХреВ" - рдмреИрд╢ рдХреЛрдб рдХреА рд▓рдЧрднрдЧ 100 рд▓рд╛рдЗрдиреЗрдВ рдЬреЛ рд╣рд░реЛрдХреВ рдХреЗ рдХрд╛рдо рдХреА рдирдХрд▓ рдХрд░рддреА рд╣реИрдВред рдпрд╣ рдПрдХ рдХрд╛рдлреА "рдЖрд╕рд╛рди" рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╣рд▓ рдХрд░рддреА рд╣реИред
рд╕рдм рдХреБрдЫ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐
рдбреЛрдХреВ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЗ рдХрдВрдзреЛрдВ рдкрд░ рдЦрдбрд╝рд╛ рд╣реИ рдЬреИрд╕реЗ:
рдбреЛрдХрд░ ,
рд╣реЗрд░реЛрдХреВ рдмрд┐рд▓реНрдбрдкреИрдХ ,
рдирд╛рдЗрдЬрд┐рдирдХреНрд╕ ,
рдЧрд┐рдЯ ред
рдбрд╛рдХ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗрд╡рд╛рд▓рд╛ рдордЬрд╝рджреВрд░
рдкрд╣рд▓рд╛ рдФрд░ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдбреЙрдХрд░ рд╣реИред
рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
рдХрдВрдЯреЗрдирд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкрд░ рдПрдХ рдирдпрд╛ рд░реВрдк рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рдХреЛ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрднрд╛рд╕реА рдорд╢реАрдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ, рдЬреИрд╕реЗ: рдорд╢реАрди рдХрд╛ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд╕рдордп, рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░, рдЫрд╡рд┐ рд╕рдВрд╕реНрдХрд░рдг (рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде), рд╕рд╛рде рд╣реА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп
рд╕реВрдЪрдХрд╛рдВрдХ , рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдеред
рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░, рдЖрдк рдПрдХ рдРрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдмрд╛рд╣рд░реА рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рдПрдЧреА, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо, рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рдеред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдПрдХ рд╣реА рдЫрд╡рд┐ рд╕реЗ, рдЖрдк рдХрдИ (рдЬрдм рддрдХ рдкрд░реНрдпрд╛рдкреНрдд рдорд╢реАрди рд╕рдВрд╕рд╛рдзрди рд╣реИрдВ) рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ "рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ" рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЙрдмрдВрдЯреВ рд╕рд░реНрд╡рд░ рдХреА рдЫрд╡рд┐ рд╣реИ, рддреЛ 1 рдЬреАрдмреА рдХрд╛ рдХрд╣рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдореЛрдВрдЧреЛрдбреАрдмреА рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдирдИ рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ 1.3 рдЬреАрдмреА рдирд╣реАрдВ рдмрд▓реНрдХрд┐ 300 рдПрдордмреА рд╣реЛрдЧрд╛ред
рдбреЙрдХрд░ рдлрд╛рдЗрд▓реЗрдВ рдЖрдкрдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдЫрд╡рд┐ рдХреЛ "рдбрд┐рдЬрд╛рдЗрди" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЖрдк "рдЗрдХрдЯреНрдард╛" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдЬрдЧрд╣ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЗрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдорд╢реАрдиреЛрдВ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд╣рд╛рдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реА рд╕рдордп, рдбреЙрдХрд░ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рд╢реБрд░реВ рдХреА рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╡рд┐рд╢реЗрд╖ рдорд╢реАрди рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдВрдЧреАред
рдбреЙрдХрд░ рдЫрд╡рд┐рдпрд╛рдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВред рдпрд╛рдиреА рдХреЛрдИ рднреА, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐
rm -rf /
рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдмрд╕реЗ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдХрд╛рд░реНрд░рд╡рд╛рдИ, рдЙрд╕реЗ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛рдПрдЧреА рдпрджрд┐ рдкрд░рд┐рд╡рд░реНрддрди рд╕рд░рд╛рд╣рдиреАрдп рдирд╣реАрдВ рд╣реИрдВред
рдбреЙрдХрд░ рдиреЗ рдЕрдкрдиреЗ рдЖрд╕рдкрд╛рд╕ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрддреНрдкрд╛рджрдХ рд╕рдореБрджрд╛рдп рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрдИ рдмрдбрд╝реА рдХрдВрдкрдирд┐рдпреЛрдВ рдЬреИрд╕реЗ рдХрд┐
рдпреИрдВрдбреЗрдХреНрд╕ ,
рд░реЗрдб рд╣реИрдЯ ,
рдлреЗрд╕рдмреБрдХ ,
рд╕реНрдкреЙрдЯрд┐рдлрд╝ рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ рдЕрдкрдирд╛ рд░рд╣реЗ рд╣реИрдВред
рдбреЙрдХреНрдпреВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдбреЙрдХреНрдпреВ рдЕрдкрдиреА рдореВрд▓ рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддрдерд╛рдХрдерд┐рдд
рдмрд┐рд▓реНрдбрд╕реНрдЯреЗрдк ред рдЙрдирдХреА
рдбреЙрдХрдЯрд░ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣
ubuntu:quantal
, рдЬрд┐рд╕ рдкрд░ рдХрдИ рдЖрд╡рд╢реНрдпрдХ
рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВ, рд╕рд╛рде рд╣реА рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╣реЗрд░реЛрдХреВ рд╕реЗ
рдкреИрдХреЗрдЬ рдмрдирд╛рддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рд╕рдореБрджрд╛рдп рд╕реЗ рдХреБрдЫ рднреА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░реНрд▓, рдбрд╛рд░реНрдЯ, рд╕реНрдЯреЗрдЯрд┐рдХ рдЕрдкрд╛рдЪреЗ рдЖрджрд┐)ред
рдмреЗрд╕ рдЗрдореЗрдЬ рдХреЗ рдЕрдВрджрд░ рдПрдХ
рдмрд┐рд▓реНрдбрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдХрд╛рд░реНрдп рдмрд┐рд▓реНрдб рдкреИрдХ рдХреЛ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд "рдЦреЛрдЬ" рдФрд░ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╣реИред
рд╣реЗрд░реЛрдХреВ рдмрд┐рд▓реНрдбрдкреИрдХ
рдкреИрдХреНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ, рдпрд╣ рдЪрд▓рдиреЗ рдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╣реИрдХ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдХрдИ рдлрд╛рдЗрд▓реЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдирддрд╛ рд╣реИ,
рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ ,
рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ ,
рд░рд┐рд▓реАрдЬрд╝ рдХрд░рддрд╛ рд╣реИ ред рдЬрд┐рд╕рдХрд╛ рдХрд╛рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ (рдЖрдорддреМрд░ рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рдореЗрдВ рдлрд╛рдЗрд▓реЛрдВ рджреНрд╡рд╛рд░рд╛, рдЬреЗрдордлрд╛рдЗрд▓ - рд░реВрдмреА, рдкреИрдХреЗрдЬ.рдЬреЙрди - рдиреЛрдбреНрд╕, рдЖрджрд┐), рдХреНрд░рдорд╢рдГ рдЖрд╡реЗрджрди рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдЬрд╛рд░реА рдХрд░реЗрдВред
рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдмрд┐рд▓реНрдб рдкреИрдХ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд░рдирдЯрд╛рдЗрдо рдмрдирд╛рддрд╛ рд╣реИ (Node.js рдпрд╛ OpenJDK рдХреЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ), рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ (npm, maven, pip ..) рдЬрдм рддрдХ рдпрд╣ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛, рддрдм рддрдХ рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдЧрд╛ред ред
рдпрджрд┐ рдЖрдк рд╣рд░реЛрдХреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдм рдЖрдЙрдЯрдкреБрдЯ, рдЬреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рд╣рд░реЛрдХреВ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдзрдХреНрдХрд╛ рджреЗрдиреЗ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдмрд┐рд▓реНрдбрдкреИрдХ рдХреЗ рдХрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред
nginx
рдбреЙрдХрд░ рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдкреЛрд░реНрдЯ рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдорд╢реАрди рдХреЗ рдмрд╛рд╣рд░реА рдкреЛрд░реНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред Dokku рдЖрд╡реЗрджрди рдореЗрдВ рдкреЛрд░реНрдЯ рдирдВрдмрд░ 5000 рдХреЛ рдкрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдмрд╛рд╣рд░реА, 49200 рд╕реЗ рдКрдкрд░ рдкреЛрд░реНрдЯ рд░реЗрдВрдЬ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
ONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a60c2af71770 app/app:latest /bin/bash -c /start 30 hours ago Up 30 hours 0.0.0.0:49264->5000/tcp prickly_curie 9c3c58b649df app/likeastore.com:latest /bin/bash -c /start 47 hours ago Up 47 hours 0.0.0.0:49253->5000/tcp sad_lumiere 1b55d9087d23 app/tour:latest /bin/bash -c /start 8 days ago Up 8 days 0.0.0.0:49228->5000/tcp suspicious_wozniak f700b5db1100 app/demo:latest /bin/bash -c /start 2 weeks ago Up 2 weeks 0.0.0.0:49159->5000/tcp sleepy_heisenberg 4df87e09611d app/analytics:latest /bin/bash -c /start 2 weeks ago Up 2 weeks 0.0.0.0:49153->5000/tcp tender_curie
рдХрдВрдЯреЗрдирд░ рд╕реЗ / рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдлрд╝рд┐рдХ
Nginx рджреНрд╡рд╛рд░рд╛
рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИ ред рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдбреЙрдХреНрдпреВ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░реЗрдЧрд╛ред рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ:
upstream app { server 127.0.0.1:49264; } server { listen [::]:80; listen 80; server_name app.likeastore.com; return 301 https://$host$request_uri; }
рдпрд╛рдиреА рд╕рд░реНрд╡рд░ рд╕реЗ рдкреЛрд░реНрдЯ 80 рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░ рд╕реЗ рдпрд╛рддрд╛рдпрд╛рдд рдХреЗ рд▓рд┐рдП
рдЕрдкрд╕реНрдЯреНрд░реАрдо рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
Git
рдХрдИ рд▓реЛрдЧ Git рдХреЛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред Git рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╕реАрдорд╛ рд╕рд┐рд░реНрдл рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд╣реИ, рдХрдИ Git - рдирдИ FTP рдХрд╣рддреЗ рд╣реИрдВред рдпрд╣ git рд╣реИ рдЬрд┐рд╕реЗ рд╕рд░реНрд╡рд░ рдореЗрдВ рд╕реЛрд░реНрд╕ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Dokku
git-hooks
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ "рдзрдХреЗрд▓рдиреЗ" рдХреЗ рдмрд╛рдж, рдпрд╣
dokku
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд "рдмреИрд╢ рдХреА рд▓рдЧрднрдЧ 100 рд▓рд╛рдЗрдиреЗрдВ" рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдХрд╛рд░реНрдп рдЖрдзрд╛рд░ (рдмрд┐рд▓реНрдбрд╕реНрдЯреЗрдк) рд╕реЗ рдПрдХ рдирдИ рдбреЙрдХрдЯрд░ рдЫрд╡рд┐ рдмрдирд╛рдирд╛ рд╣реИ, рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдмрд┐рд▓реНрдбрд░" рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдПрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрд╡рдпрдВ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ nxx рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВред
рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдзрдХреНрдХрд╛ рдХреЗ рд╕рд╛рде рдЖрд╡реЗрджрди рдХреЛ "рд╕реНрд╡рдЪреНрдЫ" рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рдПрдХ рдирдП рдХрдВрдЯреЗрдирд░ рдЯреНрд░реЗрдирд░ рдореЗрдВред
рд╕реНрдерд╛рдкрдирд╛
рдкреНрд░реЛрдЬреЗрдХреНрдЯ
рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдореЗрдВ рд╕рдм рдХреБрдЫ рдХреБрдЫ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИред рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧреА - рдЧрд┐рдЯ,
buildback
, рдЖрджрд┐ ... рдФрд░ рдЖрдзрд╛рд░
buildback
рдЫрд╡рд┐ рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
рд╡рд┐рдиреНрдпрд╛рд╕
рд╕рд░реНрд╡рд░ рдкрд░ Dokku рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ 3 рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
1. рдЕрдкрдиреА ssh рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдк рдЧрд┐рдЯ рдкреБрд╢ рдХрд░ рд╕рдХреЗрдВред
$ cat ~/.ssh/id_rsa.pub | ssh root@yourserver.com "sudo sshcommand acl-add dokku progrium"
2.ред Init / config рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЖрдкрдХреЛ рд░рд┐рдореЛрдЯ рдмреНрд░рдВрдЪ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
[remote "staging"] url = dokku@stage.likeastore.com:app-stage.likeastore.com fetch = +refs/heads/*:refs/remotes/deploy/* [remote "production"] url = dokku@likeastore.com:app fetch = +refs/heads/*:refs/remotes/deploy/*
рдирд╛рдореЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ - рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпреЛрдЧреНрдп рдирд╛рдо рдХреЗ рд╕рд╛рде, рдЬреИрд╕реЗ
app-stage.likeastore.com
, рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛрдЧрд╛
app-stage.likeastore.com
app-stage.likeastore.com
, рдФрд░ рдЖрдзрд╛рд░ рдирд╛рдо рдХреЗ рд╕рд╛рде, рдЬреИрд╕реЗ
app
, рдкрд░
app.likeastore.com
app.likeastore.com
3. рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ,
Procfile
рдлрд╝рд╛рдЗрд▓
Procfile
рдЬрд┐рд╕рдореЗрдВ Node.js рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рд╣реЛрдВ
web: node app.js
рдЙрд╕рдХреЗ рдмрд╛рдж, рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рддреИрдпрд╛рд░ рд╣реИред
deploymenta
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ:
$ git push production master
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рдорд╛рди рдХреНрдпрд╛ рд╣реИ:
тА║ git push staging development:master -----> Cleaning up ... -----> Building app-stage.likeastore.com ... Node.js app detected -----> Requested node range: 0.10.x -----> Resolved node version: 0.10.25 -----> Downloading and installing node -----> Restoring node_modules directory from cache -----> Pruning cached dependencies not specified in package.json -----> Installing dependencies -----> Caching node_modules directory for future builds -----> Cleaning up node-gyp and npm artifacts -----> Building runtime environment -----> Discovering process types Procfile declares types -> web -----> Releasing app-stage.likeastore.com ... -----> Deploying app-stage.likeastore.com ... =====> Application deployed: https://app-stage.likeastore.com To dokku@stage.likeastore.com:app-stage.likeastore.com 77008a6..99dfe55 development -> master
рдкрд╣рд▓реА рддреИрдирд╛рддреА рдХреЗ рдмрд╛рдж, рдорд╛рдВрдЧ рдкрд░, рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░
рдПрд╕рдПрд╕рдПрд▓ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП
рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд▓рдЧ-рдЗрди
рдмреБрдирд┐рдпрд╛рджреА рдбреЙрдХреНрдпреВ рдХреЛ рдХрд╛рдлреА рд╕реАрдорд┐рдд рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдХрдИ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ,
рдбреЗрдЯрд╛рд╕реНрдЯреЛрд░реНрд╕ - рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рднрдВрдбрд╛рд░рдг рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕рдорд╛рдзрд╛рди (рдорд╛рд░рд┐рдпрд╛рдбреАрдмреА, рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдХреНрдпреВрдПрд▓, рдореЛрдВрдЧреЛрдмреАрдбреА рдЖрджрд┐) рдХреЗ рд╕рд╛рде,
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХреЛрдВ -
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХреЛрдВ (рд╕рд░реНрдХрд╕, рд╢реЛрдореЗрди рдЖрджрд┐) рдФрд░
рдЕрдиреНрдп рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ (рдмреЛрд╡рд░, рдЧреНрд░рдВрдЯ, рдПрд▓рд┐рдЯреЗрд╕рд░реНрдЪ,)ред SSH рддреИрдирд╛рддреА рдХреБрдВрдЬреА)ред
рд▓рд┐рдХреЛрд░рд┐рдпреЛрд░ рдореЗрдВ
рдбреЙрдХреНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╣рдорд╛рд░рд╛ рдЕрдиреБрднрд╡ рдмрд╣реБрдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рд░рд╣рд╛, рдЬрд┐рд╕реЗ рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ!
рдкреБрдирд╢реНрдЪред рдиреЗрдЯ рдкрд░ рдбреЙрдХреНрдпреВ рдкрд░ рдореЗрд░реА рдкреНрд░рд╕реНрддреБрддрд┐ рдХрд╛ рдПрдХ
рд╡реАрдбрд┐рдпреЛ рд╣реИ , рдХреБрдЫ рд╡рд┐рд╡рд░рдг рд╣реИрдВред