рд╕реАрдЖрдИ/рд╕реАрдбреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛рдирд╛ рдФрд░ рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛

рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд╣рд▓реА рд╡реЗрдмрд╕рд╛рдЗрдЯреЗрдВ 90 рдХреЗ рджрд╢рдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓рд┐рдЦреАрдВред рдЙрд╕ рд╕рдордп рдЙрдиреНрд╣реЗрдВ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдерд╛ред рдХреБрдЫ рд╕рд╛рдЭрд╛ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкрд░ рдПрдХ рдЕрдкрд╛рдЪреЗ рд╕рд░реНрд╡рд░ рдерд╛, рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рд▓рд┐рдЦрдХрд░ рдПрдлрд╝рдЯреАрдкреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рд╕рд░реНрд╡рд░ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ftp://ftp.example.com. рдлрд┐рд░ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдордп рдереЗ, рддрдм рд╕рдм рдХреБрдЫ рдЕрдм рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рд░рд▓ рдерд╛ред

рд╕реАрдЖрдИ/рд╕реАрдбреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛рдирд╛ рдФрд░ рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛

рддрдм рд╕реЗ рджреЛ рджрд╢рдХреЛрдВ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рд╡реЗрдмрд╕рд╛рдЗрдЯреЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдИ рд╣реИрдВ; рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЬрд╛рд░реА рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдПрдХрд▓ рд╕рд░реНрд╡рд░ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░реНрд╕ рдХреЗ рдкреАрдЫреЗ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рд╕рд░реНрд╡рд░ рдмрди рдЧрдпрд╛, рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдо рд╣реЛ рдЧрдпрд╛ред

рдореЗрд░реЗ рдирд┐рдЬреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдерд╛ред рдФрд░ рдореБрдЭреЗ рдкрддрд╛ рдерд╛ рдХрд┐ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрдп рдХрд░рдХреЗ рд╕рд╛рдЗрдЯ рдХреЛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдПрдХ рд╢рд╛рдЦрд╛ рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрдирд╛ master GitHub рдкрд░. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдкрддрд╛ рдерд╛ рдХрд┐ рдЕрдкрдиреЗ рдЫреЛрдЯреЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдпрд╛ рдбреЙрдХрд░ рд╕реНрд╡рд╛рд░реНрдо рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдпрд╛ рдкреЙрдбреНрд╕, рдПрдЬреЗрдВрдЯреЛрдВ рдФрд░ рдЕрдиреНрдп рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд░реНрд╡рд░реЛрдВ рдХрд╛ рдПрдХ рдмреЗрдбрд╝рд╛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЬрдЯрд┐рд▓рддрд╛рдПрдБ рдХрд╛рдо рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд╕реАрдЖрдИ/рд╕реАрдбреА рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЫреЛрдЯрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ Node.js рдкреНрд░реЛрдЬреЗрдХреНрдЯ) рдФрд░ рдЖрдк рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рддреИрдирд╛рддреА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХреИрд╕реЗ рдХрд░реЗрдВ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЬреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ рд╡рд╣ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд░реБрдЪрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЗрдВ

рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдкрд╛рдардХ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЙрд╕реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдФрд░ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреА рдмреБрдирд┐рдпрд╛рджреА рд╕рдордЭ рд╣реЛред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрд╕реЗ рдЦрд╛рддреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ ╨╕ рдбреЙрдХрд░ рд╣рдм.

рд▓рдХреНрд╖реНрдпреЛрдВ

рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдмрд┐рдирд╛ рд╢рд░реНрдд "рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓" рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рддрд░рд╣ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рдЬреЛ рд╕реАрдЦрд╛ рд╣реИ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЙрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд╛рд╕ рдореЗрдВ рдХрд┐рдП рдЧрдП рдкрд░реАрдХреНрд╖рдг рдФрд░ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдХреЛрдб рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред

рдореЗрд░рд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЗрд╕реА рддрд░рд╣ рд╕рдорд╛рдкреНрдд рд╣реБрдЖред

рд╕рд┐рд╡рд╛рдп рдХрд┐рд╕реА рднреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╢рд╛рдЦрд╛ рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рд▓рд┐рдП master, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВ:

  • рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
  • рд╕рднреА рдпреВрдирд┐рдЯ, рдПрдХреАрдХрд░рдг рдФрд░ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдХреЗрд╡рд▓ рдЙрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЬреЛ рдЗрд╕рдореЗрдВ рдЖрддрд╛ рд╣реИ master, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

  • рдКрдкрд░ рдмрддрд╛рдИ рдЧрдИ рд╣рд░ рдЪреАрдЬрд╝, рд╕рд╛рде рд╣реА...
  • рд╡рд░реНрддрдорд╛рди рдХреЛрдб, рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреЙрдХрд░ рдЫрд╡рд┐ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред
  • рдЫрд╡рд┐ рдХреЛ рдбреЙрдХрд░ рд╣рдм рдкрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ред
  • рдЙрддреНрдкрд╛рджрди рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрд╢рди.
  • рдбреЙрдХрд░ рд╣рдм рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдЫрд╡рд┐ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ред
  • рд╡рд░реНрддрдорд╛рди рдХрдВрдЯреЗрдирд░ рдХреЛ рд░реЛрдХрдирд╛ рдФрд░ рдирдИ рдЫрд╡рд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирдпрд╛ рд╢реБрд░реВ рдХрд░рдирд╛ред

рдпрджрд┐ рдЖрдк рдбреЙрдХрд░, рдЫрд╡рд┐рдпреЛрдВ рдФрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдХреБрдЫ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВред рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдмрддрд╛рдКрдВрдЧрд╛.

рд╕реАрдЖрдИ/рд╕реАрдбреА рдХреНрдпрд╛ рд╣реИ?

рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рд╕реАрдЖрдИ/рд╕реАрдбреА рдХрд╛ рдЕрд░реНрде рд╣реИ "рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг/рдирд┐рд░рдВрддрд░ рддреИрдирд╛рддреАред"

тЦНрдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг

рд╕рддрдд рдПрдХреАрдХрд░рдг рдПрдХ рдРрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдореБрдЦреНрдп рд╕реНрд░реЛрдд рдХреЛрдб рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА (рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╢рд╛рдЦрд╛) рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЛрддреЗ рд╣реИрдВ master). рд╕рд╛рде рд╣реА, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред

тЦНрдирд┐рд░рдВрддрд░ рддреИрдирд╛рддреА

рд╕рддрдд рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдХреЛрдб рдХрд╛ рд▓рдЧрд╛рддрд╛рд░, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╣реИред рд╕реАрдЖрдИ/рд╕реАрдбреА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдХреЛ рдХрднреА-рдХрднреА "рдирд┐рд░рдВрддрд░ рд╡рд┐рддрд░рдг" рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ "рдирд┐рд░рдВрддрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди" рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди "рдирд┐рд░рдВрддрд░ рд╡рд┐рддрд░рдг" рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛

рдпрд╣ рд╕рдм рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЬрд┐рд╕ рдРрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЙрд╕рдХрд╛ рдирд╛рдо рд╣реИ рдиреЛрдЯ рдХрд░реЗрдВ. рдпрд╣ рдПрдХ рд╡реЗрдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореИрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕реЗ рдиреЛрдЯреНрд╕ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬреИрдорд╕реНрдЯреИрдХ-рдкреНрд░реЛрдЬреЗрдХреНрдЯ, рдпрд╛ рд╕рд░реНрд╡рд░ рдХреЗ рдмрд┐рдирд╛ рд╕рд┐рд░реНрдл рдПрдХ рдлреНрд░рдВрдЯ-рдПрдВрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдЬреЛ рдорд╛рдирдХ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рд╢реБрджреНрдз рдХрд░рдирд╛. рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдмрдврд╝рддреА рдЧрдИ, рдореБрдЭреЗ рдЗрд╕рдХрд╛ рд╕рд░реНрд╡рд░ рднрд╛рдЧ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрдбрд╝реА, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рдерд╛ рдХрд┐ рдореБрдЭреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдПрдХреАрдХрд░рдг рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд░рдгрдиреАрддрд┐ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди Node.js рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд╕рд░реНрд╡рд░ рд╣реИ, рдЬреЛ рдПрдХрд▓-рдкреЗрдЬ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реЗрд╡рд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдПрдкреАрдЖрдИ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЙрд╕ рд░рдгрдиреАрддрд┐ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ рдпрд╣ рдкреВрд░реНрдг рд╕реНрдЯреИрдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛.

рдореИрдВрдиреЗ рдкрд░рд╛рдорд░реНрд╢ рдХрд┐рдпрд╛ рдПрдХ рджреЛрд╕реНрдд, рдЬреЛ рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рди рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реИ, рдФрд░ рдЙрд╕рд╕реЗ рдкреВрдЫрд╛ рдХрд┐ рдпрд╣ рд╕рдм рдореЗрд░реА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рджрд┐рдпрд╛ рдХрд┐ рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреИрд╕рд╛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рдХреНрд╖реНрдп рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реИред рдЗрди рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рд░рдЦрдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдбреЙрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдбрд╛рдХ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗрд╡рд╛рд▓рд╛ рдордЬрд╝рджреВрд░

рдбреЙрдХрд░ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ, рдЬреЛ рдХрдВрдЯреЗрдирд░реАрдХрд░рдг рддрдХрдиреАрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдПрдХ рд╣реА рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рддрд░рд┐рдд, рддреИрдирд╛рдд рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдбреЙрдХрд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реНрд╡рдпрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓рддрд╛ рд╣реЛред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдбреЙрдХрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓реНрд╕ (рд╕реАрдПрд▓рдЖрдИ) рдкрд░ рд╣рд╛рде рд░рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рдереАред рдЕрдиреБрджреЗрд╢ рдбреЙрдХрд░ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЧрд╛рдЗрдб рдХреЛ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдЖрдк рдпрд╣ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓рд╛ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЪрд░рдг рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдбреЙрдХрд░ рдбреЗрд╕реНрдХрдЯреЙрдк (рдореИрдХ рдпрд╛ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП) рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдбреЙрдХрд░ рд╣рдм рд▓рдЧрднрдЧ рд╡реИрд╕рд╛ рд╣реА рд╣реИ GitHub рдЧрд┐рдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдпрд╛ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рд▓рд┐рдП NPM рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдбреЙрдХрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдирд▓рд╛рдЗрди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реИред рдбреЙрдХрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рдЗрд╕реА рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИред

рддреЛ, рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рджреЛ рдХрд╛рдо рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдбреЙрдХрд░ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдХрд░ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдбреЙрдХрд░ рд╕реАрдПрд▓рдЖрдИ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ:

docker -v

рдЗрд╕рдХреЗ рдмрд╛рдж, рдкреВрдЫреЗ рдЬрд╛рдиреЗ рдкрд░ рдЕрдкрдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдХреЗ рдбреЙрдХрд░ рд╣рдм рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ:

docker login

рдбреЙрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЫрд╡рд┐рдпреЛрдВ рдФрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд╕рдордЭрдирд╛ рд╣реЛрдЧрд╛ред

тЦНрдЫрд╡рд┐рдпрд╛рдБ

рдПрдХ рдЫрд╡рд┐ рдПрдХ рдмреНрд▓реВрдкреНрд░рд┐рдВрдЯ рдХреА рддрд░рд╣ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдХреЛ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕реНрдиреИрдкрд╢реЙрдЯ рд╣реИред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЖрд╕рд╛рдиреА рд╕реЗ рдЫрд╡рд┐рдпрд╛рдВ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

# ╨Т╤Л╨▓╨╛╨┤ ╤Б╨▓╨╡╨┤╨╡╨╜╨╕╨╣ ╨╛╨▒╨╛ ╨▓╤Б╨╡╤Е ╨╛╨▒╤А╨░╨╖╨░╤Е
docker images

рдпрд╣ рдХрдорд╛рдВрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдЧрд╛:

REPOSITORY     TAG     IMAGE ID     CREATED     SIZE
---

рдЖрдЧреЗ рд╣рдо рд╕рдорд╛рди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХрдорд╛рдВрдб рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВрдЧреЗ - рдкрд╣рд▓реЗ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдПрдХ рдХрдорд╛рдВрдб рд╣реИ, рдФрд░ рдлрд┐рд░ рдпрд╣ рдХреНрдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред

тЦНрдХрдВрдЯреЗрдирд░

рдХрдВрдЯреЗрдирд░ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдкреИрдХреЗрдЬ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЪреАрдЬреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИрдВред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд╛рд▓рд╛ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛: рдПрдХ рдЕрд▓рдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдФрд░ рдПрдХ рд╣реА рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВред рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдЫрд╡рд┐ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

# ╨Я╨╡╤А╨╡╤З╨╕╤Б╨╗╨╡╨╜╨╕╨╡ ╨▓╤Б╨╡╤Е ╨║╨╛╨╜╤В╨╡╨╣╨╜╨╡╤А╨╛╨▓
docker ps -a
CONTAINER ID     IMAGE     COMMAND     CREATED     STATUS     PORTS     NAMES
---

тЦНрдЯреИрдЧ

рдЯреИрдЧ рдХрд┐рд╕реА рдЫрд╡рд┐ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИред

тЦНрдбреЙрдХрд░ рдХрдорд╛рдВрдб рдХрд╛ рдПрдХ рддреНрд╡рд░рд┐рдд рд╕рдВрджрд░реНрдн

рдпрд╣рд╛рдВ рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдбреЙрдХрд░ рдХрдорд╛рдВрдб рдХрд╛ рдЕрд╡рд▓реЛрдХрди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЯреАрдо

рдкреНрд░рд╕рдВрдЧ

рдХрд╛рд░реНрдп

рдбреЛрдХрд░ рдирд┐рд░реНрдорд╛рдг

рдЫрд╡рд┐

Dockerfile рд╕реЗ рдПрдХ рдЫрд╡рд┐ рдмрдирд╛рдирд╛

рдбреЛрдХрд░ рдЯреИрдЧ

рдЫрд╡рд┐

рдЫрд╡рд┐ рдЯреИрдЧрд┐рдВрдЧ

рдбреЙрдХрд░ рдЫрд╡рд┐рдпрд╛рдВ

рдЫрд╡рд┐

рдЫрд╡рд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдмрдирд╛рдирд╛

рдбреЙрдХрд░ рд░рди

рдХрдВрдЯреЗрдирд░

рдПрдХ рдЫрд╡рд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдирд╛

рдбреЙрдХрдЯрд░ рдкреБрд╢

рдЫрд╡рд┐

рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдПрдХ рдЫрд╡рд┐ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛

рдбреЙрдХрд░ рдкреБрд▓

рдЫрд╡рд┐

рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ рдПрдХ рдЫрд╡рд┐ рд▓реЛрдб рд╣реЛ рд░рд╣реА рд╣реИ

рдбреЙрдХрд░ рдкреАрдП

рдХрдВрдЯреЗрдирд░

рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рд╕реВрдЪреА рдмрдирд╛рдирд╛

рдбреЙрдХрд░ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реВрди

рдЫрд╡рд┐/рдХрдВрдЯреЗрдирд░

рдЕрдкреНрд░рдпреБрдХреНрдд рдХрдВрдЯреЗрдирд░реЛрдВ рдФрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛

тЦНрдбреЙрдХрд░рдлрд╝рд╛рдЗрд▓

рдореИрдВ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ рдЙрддреНрдкрд╛рджрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рд░реЗрдбреА-рдореЗрдб рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХрдорд╛рдВрдб рд╣реИ рдЬреЛ рдкреЛрд░реНрдЯ рдкрд░ Node.js рдЖрдзрд╛рд░рд┐рдд рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ 5000. рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ:

npm i         # ╤Г╤Б╤В╨░╨╜╨╛╨▓╨║╨░ ╨╖╨░╨▓╨╕╤Б╨╕╨╝╨╛╤Б╤В╨╡╨╣
npm run build # ╤Б╨▒╨╛╤А╨║╨░ React-╨┐╤А╨╕╨╗╨╛╨╢╨╡╨╜╨╕╤П
npm run start # ╨╖╨░╨┐╤Г╤Б╨║ Node-╤Б╨╡╤А╨▓╨╡╤А╨░

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ, рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдХреЛрдИ рднреА рд╕рд░рд▓ рдиреЛрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛ред

рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдбреЙрдХрд░ рдХреЛ рдирд┐рд░реНрджреЗрд╢ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣ рдирд╛рдордХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ Dockerfile, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рдпрд╣ рдлрд╝рд╛рдЗрд▓, рдкреНрд░рдердо рджреГрд╖реНрдЯрдпрд╛, рдХрд╛рдлреА рд╕рдордЭ рд╕реЗ рдкрд░реЗ рд▓рдЧрддреА рд╣реИред

рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдЬреЛ рдХреБрдЫ рд╣реИ рд╡рд╣ рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖ рдЖрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде, рдХрд╛рдордХрд╛рдЬреА рдорд╛рд╣реМрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдЬреИрд╕рд╛ рдХреБрдЫ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЖрджреЗрд╢ рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВ:

  • рд╕реЗ - рдпрд╣ рдХрдорд╛рдВрдб рдПрдХ рдлрд╛рдЗрд▓ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЙрд╕ рдЖрдзрд╛рд░ рдЫрд╡рд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
  • рдХреЙрдкреА - рд╕реНрдерд╛рдиреАрдп рд╕реНрд░реЛрдд рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ред
  • рдХрд╛рд░реНрдпрджрд┐рд░рд╛ - рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╢реАрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗрдЯ рдХрд░рдирд╛ред
  • рднрд╛рдЧреЛ - рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрдБ.
  • рдЕрдирд╛рд╡реГрдд рдХрд░рдирд╛ - рдкреЛрд░реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕.
  • рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ - рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЖрджреЗрд╢ рдХрд╛ рд╕рдВрдХреЗрддред

Dockerfile рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

# ╨Ч╨░╨│╤А╤Г╨╖╨╕╤В╤М ╨▒╨░╨╖╨╛╨▓╤Л╨╣ ╨╛╨▒╤А╨░╨╖
FROM node:12-alpine

# ╨б╨║╨╛╨┐╨╕╤А╨╛╨▓╨░╤В╤М ╤Д╨░╨╣╨╗╤Л ╨╕╨╖ ╤В╨╡╨║╤Г╤Й╨╡╨╣ ╨┤╨╕╤А╨╡╨║╤В╨╛╤А╨╕╨╕ ╨▓ ╨┤╨╕╤А╨╡╨║╤В╨╛╤А╨╕╤О app/
COPY . app/

# ╨Ш╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╤М app/ ╨▓ ╤А╨╛╨╗╨╕ ╤А╨░╨▒╨╛╤З╨╡╨╣ ╨┤╨╕╤А╨╡╨║╤В╨╛╤А╨╕╨╕
WORKDIR app/

# ╨г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╨╖╨░╨▓╨╕╤Б╨╕╨╝╨╛╤Б╤В╨╕ (╨║╨╛╨╝╨░╨╜╨┤╨░ npm ci ╨┐╨╛╤Е╨╛╨╢╨░ npm i, ╨╜╨╛ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╡╤В╤Б╤П ╨┤╨╗╤П ╨░╨▓╤В╨╛╨╝╨░╤В╨╕╨╖╨╕╤А╨╛╨▓╨░╨╜╨╜╤Л╤Е ╤Б╨▒╨╛╤А╨╛╨║)
RUN npm ci --only-production

# ╨б╨╛╨▒╤А╨░╤В╤М ╨║╨╗╨╕╨╡╨╜╤В╤Б╨║╨╛╨╡ React-╨┐╤А╨╕╨╗╨╛╨╢╨╡╨╜╨╕╨╡ ╨┤╨╗╤П ╨┐╤А╨╛╨┤╨░╨║╤И╨╜╨░
RUN npm run build

# ╨Я╤А╨╛╤Б╨╗╤Г╤И╨╕╨▓╨░╤В╤М ╤Г╨║╨░╨╖╨░╨╜╨╜╤Л╨╣ ╨┐╨╛╤А╤В
EXPOSE 5000

# ╨Ч╨░╨┐╤Г╤Б╤В╨╕╤В╤М Node-╤Б╨╡╤А╨▓╨╡╤А
ENTRYPOINT npm run start

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреА рдЧрдИ рдЖрдзрд╛рд░ рдЫрд╡рд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдЖрдзрд╛рд░ рдЫрд╡рд┐рдпрд╛рдВ (рдЬреИрд╕реЗ рдиреЛрдб рдЕрд▓реНрдкрд╛рдЗрди рд▓рд┐рдирдХреНрд╕) рдЙрдиреНрд╣реЗрдВ рдпрдерд╛рд╕рдВрднрд╡ рдХреЙрдореНрдкреИрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рд╛рде рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдЖрдкрдХреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдХреБрдЫ рдХрд╛рд░реНрдпрдХреНрд░рдо рди рд╣реЛрдВред

тЦНрдХрдВрдЯреЗрдирд░ рдмрдирд╛рдирд╛, рдЯреИрдЧ рдХрд░рдирд╛ рдФрд░ рдЪрд▓рд╛рдирд╛

рдХрдВрдЯреЗрдирд░ рдХреА рд╕реНрдерд╛рдиреАрдп рдЕрд╕реЗрдВрдмрд▓реА рдФрд░ рд▓реЙрдиреНрдЪрд┐рдВрдЧ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ Dockerfile, рдХрд╛рд░реНрдп рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИрдВред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдЫрд╡рд┐ рдХреЛ рдбреЙрдХрд░ рд╣рдм рдкрд░ рдзрдХреЗрд▓реЗрдВ, рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

тЦНрд╡рд┐рдзрд╛рдирд╕рднрд╛

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЫрд╡рд┐, рдПрдХ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдФрд░, рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рдЯреИрдЧ (рдпрджрд┐ рдХреЛрдИ рдЯреИрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЫрд╡рд┐ рдХреЛ рдПрдХ рдЯреИрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдЧрд╛) latest).

# ╨б╨▒╨╛╤А╨║╨░ ╨╛╨▒╤А╨░╨╖╨░
docker build -t <image>:<tag> .

рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдбреЙрдХрд░ рдХреЛ рдЫрд╡рд┐ рдмрдирд╛рддреЗ рд╣реБрдП рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

Sending build context to Docker daemon   2.88MB
Step 1/9 : FROM node:12-alpine
 ---> ...╨▓╤Л╨┐╨╛╨╗╨╜╨╡╨╜╨╕╨╡ ╤Н╤В╨░╨┐╨╛╨▓ ╤Б╨▒╨╛╤А╨║╨╕...
Successfully built 123456789123
Successfully tagged <image>:<tag>

рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдХреБрдЫ рдорд┐рдирдЯ рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рд╕рдм рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд┐рддрдиреА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╣реИрдВред рдПрдХ рдмрд╛рд░ рдирд┐рд░реНрдорд╛рдг рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдиреЗ рдкрд░, рдЖрдк рдХрдорд╛рдВрдб рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ docker images рдФрд░ рдЕрдкрдиреА рдирдИ рдЫрд╡рд┐ рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрдЦреЗрдВ.

REPOSITORY          TAG               IMAGE ID            CREATED              SIZE
<image>             latest            123456789123        About a minute ago   x.xxGB

тЦНрд▓реЙрдиреНрдЪ

рдЫрд╡рд┐ рдмрдирд╛рдИ рдЧрдИ рд╣реИ. рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ localhost:5000, рдореИрдВ, рдЬреЛрдбрд╝реА рдХреЗ рдмрд╛рдИрдВ рдУрд░ 5000:5000 рдЕрдЧрд▓реЗ рдЖрджреЗрд╢ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд 5000. рджрд╛рд╣рд┐рдиреА рдУрд░ рдХрдВрдЯреЗрдирд░ рдкреЛрд░реНрдЯ рд╣реИред

# ╨Ч╨░╨┐╤Г╤Б╨║ ╤Б ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╨╜╨╕╨╡╨╝ ╨╗╨╛╨║╨░╨╗╤М╨╜╨╛╨│╨╛ ╨┐╨╛╤А╤В╨░ 5000 ╨╕ ╨┐╨╛╤А╤В╨░ ╨║╨╛╨╜╤В╨╡╨╣╨╜╨╡╤А╨░ 5000
docker run -p 5000:5000 <image>:<tag>

рдЕрдм рдЬрдм рдХрдВрдЯреЗрдирд░ рдмрди рдЧрдпрд╛ рд╣реИ рдФрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ docker ps рдЗрд╕ рдХрдВрдЯреЗрдирд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП (рдпрд╛ рдЖрдк рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ docker ps -a, рдЬреЛ рд╕рднреА рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рдЪрд╛рд▓реВ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ)ред

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                      PORTS                    NAMES
987654321234        <image>             "/bin/sh -c 'npm runтАж"   6 seconds ago        Up 6 seconds                0.0.0.0:5000->5000/tcp   stoic_darwin

рдпрджрд┐ рдЖрдк рдЕрдм рдкрддреЗ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ localhost:5000 тАФ рдЖрдк рдПрдХ рдЪрд▓ рд░рд╣реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдПрдХ рдкреЗрдЬ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдмрд┐рд▓реНрдХреБрд▓ рдЙрддреНрдкрд╛рджрди рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреЗрдЬ рдЬреИрд╕рд╛ рд╣реА рджрд┐рдЦрддрд╛ рд╣реИред

тЦНрдЯреИрдЧрд┐рдВрдЧ рдФрд░ рдкреНрд░рдХрд╛рд╢рди

рдЙрддреНрдкрд╛рджрди рд╕рд░реНрд╡рд░ рдкрд░ рдмрдирд╛рдИ рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕ рдЫрд╡рд┐ рдХреЛ рдбреЙрдХрд░ рд╣рдм рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдбреЙрдХрд░ рд╣рдм рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдиреА рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЬрдЧрд╣ рд╣реЛрдЧреА рдЬрд╣рд╛рдВ рд╣рдо рдЗрдореЗрдЬ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдЫрд╡рд┐ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕рдХрд╛ рдирд╛рдо рд╣рдорд╛рд░реЗ рдбреЙрдХрд░ рд╣рдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд╕реЗ рд╢реБрд░реВ рд╣реЛред рдЗрд╕рдХреЗ рдмрд╛рдж рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдирд╛рдо рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред рдирд╛рдо рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреЛрдИ рднреА рдЯреИрдЧ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕ рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдирд╛рдордХрд░рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЕрдм рдЖрдк рдирдП рдирд╛рдо рд╕реЗ рдЫрд╡рд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрдорд╛рдВрдб рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ docker push рдЗрд╕реЗ рдбреЙрдХрд░ рд╣рдм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдзрдХреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред

docker build -t <username>/<repository>:<tag> .
docker tag <username>/<repository>:<tag> <username>/<repository>:latest
docker push <username>/<repository>:<tag>

# ╨Э╨░ ╨┐╤А╨░╨║╤В╨╕╨║╨╡ ╤Н╤В╨╛ ╨╝╨╛╨╢╨╡╤В ╨▓╤Л╨│╨╗╤П╨┤╨╡╤В╤М, ╨╜╨░╨┐╤А╨╕╨╝╨╡╤А, ╤В╨░╨║:
docker build -t user/app:v1.0.0 .
docker tag user/app:v1.0.0 user/app:latest
docker push user/app:v1.0.0

рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд░рд╣рд╛, рддреЛ рдЫрд╡рд┐ рдбреЙрдХрд░ рд╣рдм рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдпрд╛ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдЕрдЧрд▓реЗ рдЪрд░рдг

рдЕрдм рддрдХ рд╣рдордиреЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рд╣рдордиреЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рдбреЙрдХрд░ рд╣рдм рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдиреЗ рд▓рдХреНрд╖реНрдп рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдкреНрд░рдЧрддрд┐ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред рдЕрдм рд╣рдореЗрдВ рджреЛ рдФрд░ рдкреНрд░рд╢реНрди рд╣рд▓ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:

  • рдХреЛрдб рдХреЗ рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рд╕реАрдЖрдИ рдЙрдкрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ред
  • рдЙрддреНрдкрд╛рджрди рд╕рд░реНрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рддрд╛рдХрд┐ рд╡рд╣ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЪрд▓рд╛ рд╕рдХреЗред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ. рдПрдХ рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ - DitigalOcean.

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣рд╛рдВ рдЖрдк рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рджреВрд╕рд░реЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рд╕рд░реНрдХрд┐рд▓рд╕реАрдЖрдИ рдпрд╛ рдЬреАрдердм рдПрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ DigitalOcean рдХреЗ рдмрдЬрд╛рдп - AWS рдпрд╛ Linodeред

рд╣рдордиреЗ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╕реЗрд╡рд╛ рдореЗрдВ рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдм рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ

рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЛрдб рдХреЗ рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИред рдореИрдВ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА рдкреЗрдЪреАрджрдЧрд┐рдпреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ, рдФрд░ рдЗрд╕рд╕реЗ рдЬреНрдпрд╛рджрд╛ рд▓рд╛рдн рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдмреБрдирд┐рдпрд╛рджреА рдмрд╛рддреЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред рдЪрд╛рд╣реЗ рдЖрдк рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ, рд╕рд░реНрдХрд▓рд╕реАрдЖрдИ, рдЬреЗрдирдХрд┐рдВрд╕, рдпрд╛ рдХреБрдЫ рдФрд░ рдЪреБрдиреЗрдВ, рд╣рд░ рдЬрдЧрд╣ рд╕рдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдЬрд╛рдПрдВ рдЙрддреНрддрд░ рджреАрдЬрд┐рдП рдФрд░ рдПрдХ рдЕрдХрд╛рдЙрдВрдЯ рдмрдирд╛рдПрдВ. рдлрд┐рд░ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЛ рдЕрдкрдиреЗ GitHub рдЦрд╛рддреЗ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░реЗрдВред рд╕рд┐рд╕реНрдЯрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдЙрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдХрд╛рдо рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред (рдореИрдВ GitHub рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЯреНрд░реИрд╡рд┐рд╕ CI BitBucket, рдФрд░ GitLab рдФрд░ рдЕрдиреНрдп рд╕рдорд╛рди рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред

рд╣рд░ рдмрд╛рд░ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░, рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рд╕рд╣рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред

тЦНрдХрд╛рд░реНрдп рдЬреАрд╡рди рдЪрдХреНрд░

рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ .travis.yml рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд, рдШрдЯрдирд╛рдУрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдЬреАрд╡рди рдЪрдХреНрд░ рдХрд╛рд░реНрдп. рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЙрдирдХреЗ рдШрдЯрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдХреНрд░рдо рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  • apt addons
  • cache components
  • before_install
  • install
  • before_script
  • script
  • before_cache
  • after_success ╨╕╨╗╨╕ after_failure
  • before_deploy
  • deploy
  • after_deploy
  • after_script

тЦНрдкрд░реАрдХреНрд╖рдг

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореИрдВ рд╕реНрдерд╛рдиреАрдп рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдиреЛрдб 12 рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдбреЙрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред

рд╡рд╣ рд╕рдм рдХреБрдЫ рдЬреЛ рдЗрд╕рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИ .travis.yml, рддрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд╕рднреА рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╕рднреА рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдЬрдм рддрдХ рдХрд┐ рдЕрдиреНрдпрдерд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рд╣реЛред рдпрд╣ рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдкрддрд╛ рдЪрд▓ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдХреЛрдб рд╢рд╛рдЦрд╛ рдХреЛ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ рдпрд╛ рдирд╣реАрдВред master, рдФрд░ рдХреНрдпрд╛ рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред рдЗрд╕ рд╡реИрд╢реНрд╡рд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ, рдореИрдВ рд╕рдм рдХреБрдЫ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рд╡реЗрдмрдкреИрдХ рджреЗрд╡ рд╕рд░реНрд╡рд░ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ (рдпрд╣ рдореЗрд░реЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ), рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддрд╛ рд╣реВрдВред

рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ рднрдВрдбрд╛рд░ рдкрд░реАрдХреНрд╖рдг рдХрд╡рд░реЗрдЬ рдЖрдЗрдХрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗ, рдпрд╣рд╛рдВ рдЖрдк рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрд╕реНрдЯ, рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдФрд░ рдХрд╡рд░реЙрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд┐рд░реНрджреЗрд╢ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рддреЛ рдпрд╣рд╛рдБ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рд╣реИ .travis.yml:

# ╨г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╤П╨╖╤Л╨║
language: node_js

# ╨г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╨▓╨╡╤А╤Б╨╕╤О Node.js
node_js:
  - '12'

services:
  # ╨Ш╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╤М ╨║╨╛╨╝╨░╨╜╨┤╨╜╤Г╤О ╤Б╤В╤А╨╛╨║╤Г Docker
  - docker

install:
  # ╨г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╨╖╨░╨▓╨╕╤Б╨╕╨╝╨╛╤Б╤В╨╕ ╨┤╨╗╤П ╤В╨╡╤Б╤В╨╛╨▓
  - npm ci

before_script:
  # ╨Ч╨░╨┐╤Г╤Б╤В╨╕╤В╤М ╤Б╨╡╤А╨▓╨╡╤А ╨╕ ╨║╨╗╨╕╨╡╨╜╤В ╨┤╨╗╤П ╤В╨╡╤Б╤В╨╛╨▓
  - npm run dev &

script:
  # ╨Ч╨░╨┐╤Г╤Б╤В╨╕╤В╤М ╤В╨╡╤Б╤В╤Л
  - npm run test

рдпрд╣реАрдВ рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╕рднреА рд╢рд╛рдЦрд╛рдУрдВ рдФрд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХреНрд░рд┐рдпрд╛рдПрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИрдВред

тЦНрддреИрдирд╛рддреА

рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐ рд╕рднреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░реЗ рд╣реЛ рдЧрдП рд╣реИрдВ, рд╣рдо, рдЬреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рдЙрддреНрдкрд╛рджрди рд╕рд░реНрд╡рд░ рдкрд░ рдХреЛрдб рддреИрдирд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдБрдХрд┐ рд╣рдо рдРрд╕рд╛ рдХреЗрд╡рд▓ рд╢рд╛рдЦрд╛ рдХреЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ master, рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЙрдЪрд┐рдд рдирд┐рд░реНрджреЗрд╢ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдЙрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рд╣рдо рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, рдореИрдВ рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

deploy:
  # ╨б╨╛╨▒╤А╨░╤В╤М Docker-╨║╨╛╨╜╤В╨╡╨╣╨╜╨╡╤А ╨╕ ╨╛╤В╨┐╤А╨░╨▓╨╕╤В╤М ╨╡╨│╨╛ ╨╜╨░ Docker Hub
  provider: script
  script: bash deploy.sh
  on:
    branch: master

рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддреА рд╣реИ:

  • рд╕реАрдЖрдИ рдЯреВрд▓ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЫрд╡рд┐ рдмрдирд╛рдПрдВ, рдЯреИрдЧ рдХрд░реЗрдВ рдФрд░ рдбреЙрдХрд░ рд╣рдм рдХреЛ рднреЗрдЬреЗрдВред
  • рд╕рд░реНрд╡рд░ рдкрд░ рдЫрд╡рд┐ рд▓реЛрдб рдХрд░рдирд╛, рдкреБрд░рд╛рдиреЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рд░реЛрдХрдирд╛ рдФрд░ рдПрдХ рдирдпрд╛ рд╢реБрд░реВ рдХрд░рдирд╛ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд░реНрд╡рд░ DigitalOcean рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдЪрд▓рддрд╛ рд╣реИ)ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЫрд╡рд┐ рдХреЛ рдмрдирд╛рдиреЗ, рдЯреИрдЧ рдХрд░рдиреЗ рдФрд░ рдбреЙрдХрд░ рд╣рдм рдкрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдм рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╣рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЕрджреНрд╡рд┐рддреАрдп рдЯреИрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдФрд░ рд▓реЙрдЧрд┐рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рдгрдиреАрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдХреБрдЫ рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реБрдИ, рдЬреИрд╕реЗ рдЯреИрдЧрд┐рдВрдЧ рд░рдгрдиреАрддрд┐, рд▓реЙрдЧрд┐рди, рдПрд╕рдПрд╕рдПрдЪ рдХреБрдВрдЬреА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ, рдПрд╕рдПрд╕рдПрдЪ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрдирд╛ред рд▓реЗрдХрд┐рди рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдореЗрд░рд╛ рдмреЙрдпрдлреНрд░реЗрдВрдб рдХрдИ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреА рддрд░рд╣ рдмреИрд╢ рдореЗрдВ рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХреА.

рддреЛ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рдЫрд╡рд┐ рдХреЛ рдбреЙрдХрд░ рд╣рдм рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ. рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдЯреИрдЧрд┐рдВрдЧ рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдЧрд┐рдЯ рд╣реИрд╢ рдФрд░ рдПрдХ рдЧрд┐рдЯ рдЯреИрдЧ рдХрд╛ рд╕рдВрдпреЛрдЬрди рд╢рд╛рдорд┐рд▓ рд╣реИ, рдпрджрд┐ рдХреЛрдИ рдореМрдЬреВрдж рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЯреИрдЧ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ рдФрд░ рдЙрд╕ рдЕрд╕реЗрдВрдмрд▓реА рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдпрд╣ рдЖрдзрд╛рд░рд┐рдд рд╣реИред DOCKER_USERNAME ╨╕ DOCKER_PASSWORD рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛ рддрд╛рдХрд┐ рдпрд╣ рдЧрд▓рдд рд╣рд╛рдереЛрдВ рдореЗрдВ рди рдкрдбрд╝реЗред

рдпрд╣рд╛рдБ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рд╣реИ deploy.sh.

#!/bin/sh
set -e # ╨Ю╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╤Б╨║╤А╨╕╨┐╤В ╨┐╤А╨╕ ╨╜╨░╨╗╨╕╤З╨╕╨╕ ╨╛╤И╨╕╨▒╨╛╨║

IMAGE="<username>/<repository>"                             # ╨Ю╨▒╤А╨░╨╖ Docker
GIT_VERSION=$(git describe --always --abbrev --tags --long) # Git-╤Е╤Н╤И ╨╕ ╤В╨╡╨│╨╕

# ╨б╨▒╨╛╤А╨║╨░ ╨╕ ╤В╨╡╨│╨╕╤А╨╛╨▓╨░╨╜╨╕╨╡ ╨╛╨▒╤А╨░╨╖╨░
docker build -t ${IMAGE}:${GIT_VERSION} .
docker tag ${IMAGE}:${GIT_VERSION} ${IMAGE}:latest

# ╨Т╤Е╨╛╨┤ ╨▓ Docker Hub ╨╕ ╨▓╤Л╨│╤А╤Г╨╖╨║╨░ ╨╛╨▒╤А╨░╨╖╨░
echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin
docker push ${IMAGE}:${GIT_VERSION}

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕ рд╣реЛрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЙрд╕рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЪреВрдВрдХрд┐ рдореИрдВ рдбрд┐рдЬрд┐рдЯрд▓ рдУрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ doctl. AWS рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ aws, рдЖрджрд┐ред

рд╕рд░реНрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрдард┐рди рдирд╣реАрдВ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЖрдзрд╛рд░ рдЫрд╡рд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдбреНрд░реЙрдкрд▓реЗрдЯ рд╕реЗрдЯ рдХрд┐рдпрд╛ред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░ рдХреА рдПрдХ рдмрд╛рд░ рдХреА рдореИрдиреНрдпреБрдЕрд▓ рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдбреЙрдХрд░ рдХреА рдПрдХ рдмрд╛рд░ рдХреА рдореИрдиреНрдпреБрдЕрд▓ рд▓реЙрдиреНрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореИрдВрдиреЗ рдбреЙрдХрд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдмрдВрдЯреВ 18.04 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рднреА рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдмрдВрдЯреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╣ рд╕рд░рд▓ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ.

рдореИрдВ рдпрд╣рд╛рдВ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрджреЗрд╢реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реВ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╛рдлреА рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдПрд╕рдПрд╕рдПрдЪ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрдпреЛрдЬрдирд╛ рджреВрдВрдЧрд╛, рдЬрд┐рд╕ рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рддреИрдирд╛рдд рдХреА рдЬрд╛рдПрдЧреА:

  • рд╣рдореЗрдВ рдЙрд╕ рдХрдВрдЯреЗрдирд░ рдХреЛ рдвреВрдВрдврдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рд░реЛрдХрдирд╛ рд╣реИред
  • рдлрд┐рд░ рдЖрдкрдХреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдПрдХ рдирдпрд╛ рдХрдВрдЯреЗрдирд░ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
  • рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдХрд╛ рд╕реНрдерд╛рдиреАрдп рдкреЛрд░реНрдЯ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ 80 - рдпрд╣ рдЖрдкрдХреЛ рдЗрд╕ рдкрддреЗ рдкрд░ рд╕рд╛рдЗрдЯ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ example.comрдЬреИрд╕реЗ рдХрд┐рд╕реА рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдкреЛрд░реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ example.com:5000.
  • рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ рд╕рднреА рдкреБрд░рд╛рдиреЗ рдХрдВрдЯреЗрдирд░ рдФрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛ред

рдпрд╣рд╛рдБ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рд╣реИ.

# ╨Э╨░╨╣╤В╨╕ ID ╤А╨░╨▒╨╛╤В╨░╤О╤Й╨╡╨│╨╛ ╨║╨╛╨╜╤В╨╡╨╣╨╜╨╡╤А╨░
CONTAINER_ID=$(docker ps | grep takenote | cut -d" " -f1)

# ╨Ю╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╤Б╤В╨░╤А╤Л╨╣ ╨║╨╛╨╜╤В╨╡╨╣╨╜╨╡╤А, ╨╖╨░╨┐╤Г╤Б╤В╨╕╤В╤М ╨╜╨╛╨▓╤Л╨╣, ╨╛╤З╨╕╤Б╤В╨╕╤В╤М ╤Б╨╕╤Б╤В╨╡╨╝╤Г
docker stop ${CONTAINER_ID}
docker run --restart unless-stopped -d -p 80:5000 ${IMAGE}:${GIT_VERSION}
docker system prune -a -f

рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдХреБрдЫ рдмрд╛рддреЗрдВ

рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рд╕реЗ рдПрд╕рдПрд╕рдПрдЪ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рджрд┐рдЦрд╛рдИ рджреЗрдЧреА рдЬреЛ рдЖрдкрдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рд░реЛрдХ рджреЗрдЧреА рдХреНрдпреЛрдВрдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ред

The authenticity of host '<hostname> (<IP address>)' can't be established.
RSA key fingerprint is <key fingerprint>.
Are you sure you want to continue connecting (yes/no)?

рдореИрдВрдиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреБрдВрдЬреА рдХреЛ рдРрд╕реЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╕64 рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЪрд░рдг рдореЗрдВ, рдЖрдк рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХреЛ рдбреАрдХреЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ known_hosts рдЙрдкрд░реЛрдХреНрдд рддреНрд░реБрдЯрд┐ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред

echo <public key> | base64 # ╨▓╤Л╨▓╨╛╨┤╨╕╤В <╨┐╤Г╨▒╨╗╨╕╤З╨╜╤Л╨╣ ╨║╨╗╤О╤З, ╨╖╨░╨║╨╛╨┤╨╕╤А╨╛╨▓╨░╨╜╨╜╤Л╨╣ ╨▓ base64>

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдпрд╣ рдЖрджреЗрд╢ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

echo "123.45.67.89 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== [email protected]" | base64

рдФрд░ рдпрд╣рд╛рдБ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ - рдПрдХ рдмреЗрд╕64 рдПрдиреНрдХреЛрдбреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ:

MTIzLjQ1LjY3Ljg5IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQWtsT1Vwa0RIcmZIWTE3U2JybVRJcE5MVEdLOVRqb20vQldEU1UKR1BsK25hZnpsSERUWVc3aGRJNHlaNWV3MThKSDRKVzlqYmhVRnJ2aVF6TTd4bEVMRVZmNGg5bEZYNVFWa2JQcHBTd2cwY2RhMwpQYnY3a09kSi9NVHlCbFdYRkNSK0hBbzNGWFJpdEJxeGlYMW5LaFhwSEFac01jaUxxOFY2UmpzTkFRd2RzZE1GdlNsVksvN1hBCnQzRmFvSm9Bc25jTTFROXg1KzNWMFd3NjgvZUlGbWIxenVVRmxqUUpLcHJyWDg4WHlwTkR2allOYnk2dncvUGIwcndlcnQvRW4KbVorQVc0T1pQblRQSTg5WlBtVk1MdWF5ckQyY0U4NlovaWw4YitndzNyMysxbkthdG1Ja2puMnNvMWQwMVFyYVRsTXFWU3NieApOclJGaTl3cmYrTTdRPT0geW91QGV4YW1wbGUuY29tCg==

рдпрд╣рд╛рдБ рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЖрджреЗрд╢ рд╣реИ

install:
  - echo < ╨┐╤Г╨▒╨╗╨╕╤З╨╜╤Л╨╣ ╨║╨╗╤О╤З, ╨╖╨░╨║╨╛╨┤╨╕╤А╨╛╨▓╨░╨╜╨╜╤Л╨╣ ╨▓ base64> | base64 -d >> $HOME/.ssh/known_hosts

рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЙрд╕реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдмрд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ рдФрд░ рдпрд╣ рдХрд╣реАрдВ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдПрдХ рдФрд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕рдВрдкреВрд░реНрдг рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП - рдХреЗ рд╕рд╛рде doctl. рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ.

doctl compute ssh <droplet> --ssh-command "╨▓╤Б╨╡ ╨║╨╛╨╝╨░╨╜╨┤╤Л ╨▒╤Г╨┤╤Г╤В ╨╖╨┤╨╡╤Б╤М && ╨╖╨┤╨╡╤Б╤М"

рдЯреАрдПрд▓рдПрд╕/рдПрд╕рдПрд╕рдПрд▓ рдФрд░ рд▓реЛрдб рд╕рдВрддреБрд▓рди

рдКрдкрд░ рдмрддрд╛рдИ рдЧрдИ рд╕рднреА рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдЬреЛ рдЖрдЦрд┐рд░реА рд╕рдорд╕реНрдпрд╛ рдЖрдИ рд╡рд╣ рдпрд╣ рдереА рдХрд┐ рд╕рд░реНрд╡рд░ рдореЗрдВ рдПрд╕рдПрд╕рдПрд▓ рдирд╣реАрдВ рдерд╛ред рдЪреВрдБрдХрд┐ рдореИрдВ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Node.js рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдБ рдХрд╛рдо рдХрд░рдирд╛ рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА Nginx рдФрд░ Let's Encrypt, рдЖрдкрдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рдм рдПрд╕рдПрд╕рдПрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдмрд╕ рдПрдХ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдмрдирд╛рдпрд╛ рдФрд░ рдЙрд╕рдХрд╛ рд╡рд┐рд╡рд░рдг рдбреАрдПрдирдПрд╕ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, DigitalOcean рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдкрд░ рдПрдХ рд╕реНрд╡рддрдГ-рдирд╡реАрдиреАрдХрд░рдг рд╕реНрд╡-рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдмрдирд╛рдирд╛ рдПрдХ рд╕рд░рд▓, рдореБрдлрд╝реНрдд рдФрд░ рддреЗрдЬрд╝ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдХреЗ рдкреАрдЫреЗ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдПрд╕рдПрд╕рдПрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдПрд╕рдПрд╕рдПрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА "рд╕реЛрдЪрдиреЗ" рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдкреЛрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ 80. рдЗрд╕рд▓рд┐рдП рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдкрд░ рдПрд╕рдПрд╕рдПрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдПрд╕рдПрд╕рдПрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдЕрдм рдЖрдк рд╕рд░реНрд╡рд░ рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдкреЛрд░реНрдЯ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдкреЛрд░реНрдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░ 80, рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдФрд░ рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ 22 рдПрд╕рдПрд╕рдПрдЪ рдХреЗ рд▓рд┐рдП. рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЗрди рджреЛрдиреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреЛрд░реНрдЯ рдкрд░ рд╕рд░реНрд╡рд░ рддрдХ рд╕реАрдзреЗ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдкрд░рд┐рдгрд╛рдо

рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдореИрдВрдиреЗ рдЬреЛ рдХреБрдЫ рднреА рдмрд╛рдд рдХреА рдереА рдЙрд╕реЗ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рди рддреЛ рдбреЙрдХрд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдФрд░ рди рд╣реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реАрдЖрдИ/рд╕реАрдбреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдиреЗ рдореБрдЭреЗ рдЕрдм рдбрд░рд╛ рджрд┐рдпрд╛ред рдореИрдВ рдПрдХ рд╕рддрдд рдПрдХреАрдХрд░рдг рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рддреИрдирд╛рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдореЗрд░реЗ рд▓рд┐рдП рдЕрднреА рднреА рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдпрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдореЗрд░реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред рдореБрдЭреЗ рдЬрд╛рдирдирд╛ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдиреЗ рдЖрдкрдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХреА рд╣реИред рдореИрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдиреЗ рдЙрддрдирд╛ рд╣реА рд╕реАрдЦрд╛ рдЬрд┐рддрдирд╛ рдореИрдВрдиреЗ рд╕реАрдЦрд╛, рдЬрдмрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рдмрд╛рдд рдХреА рдереА рдЙрд╕реЗ рд╕рдордЭ рд▓рд┐рдпрд╛ред

рдкреБрдирд╢реНрдЪ рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рдмрд╛рдЬрд╝рд╛рд░ рдПрдХ рдЫрд╡рд┐ рд╣реИ рдбрд╛рдХ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗрд╡рд╛рд▓рд╛ рдордЬрд╝рджреВрд░, рдЬрд┐рд╕реЗ рдПрдХ рдХреНрд▓рд┐рдХ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдпрд╣рд╛рдВ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╡реАрдкреАрдПрд╕. рд╕рднреА рдирдП рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ 3 рджрд┐рдиреЛрдВ рдХрд╛ рдирд┐рдГрд╢реБрд▓реНрдХ рдкрд░реАрдХреНрд╖рдг рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реАрдЖрдИ/рд╕реАрдбреА рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ?

рд╕реАрдЖрдИ/рд╕реАрдбреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛рдирд╛ рдФрд░ рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ