рд╕реАрдЖрдИ/рд╕реАрдбреА рдЪреЗрди рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ рд░ рдбрдХрд░рдХреЛ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд╛рд░реНрдп

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

рд╕реАрдЖрдИ/рд╕реАрдбреА рдЪреЗрди рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ рд░ рдбрдХрд░рдХреЛ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд╛рд░реНрдп

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

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

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

рдкреВрд░реНрд╡рд╛рдкреЗрдХреНрд╖рд╛рд╣рд░реБ

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

рдЙрджреНрджреЗрд╢реНрдпрд╣рд░реВ

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

рдпреЛ рдореЗрд░реЛ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рд╕рдорд╛рдкреНрдд рднрдпреЛред

рдмрд╛рд╣реЗрдХ рдХреБрдиреИ рдкрдирд┐ рднрдгреНрдбрд╛рд░ рд╢рд╛рдЦрд╛рдорд╛ рдкреЛрд╕реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдХреЛрдбрдХреЛ рд▓рд╛рдЧрд┐ master, рдирд┐рдореНрди рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░рд┐рдиреНрдЫ:

  • Travis CI рдорд╛ рдирд┐рд░реНрдорд╛рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реБрд░реБ рд╣реБрдиреНрдЫред
  • рд╕рдмреИ рдПрдХрд╛рдЗ, рдПрдХреАрдХрд░рдг рд░ рдЕрдиреНрдд-рджреЗрдЦрд┐-рдЕрдиреНрдд рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░рд┐рдиреНрдЫред

рдХреЗрд╡рд▓ рдХреЛрдбрдХреЛ рд▓рд╛рдЧрд┐ рдЬреБрди рднрд┐рддреНрд░ рдкрд░реНрджрдЫ master, рдирд┐рдореНрди рдХрд╛рд░реНрдп рдЧрд░рд┐рдиреНрдЫ:

  • рдорд╛рдерд┐ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рд╕рдмреИ, рдкреНрд▓рд╕ ...
  • рд╣рд╛рд▓рдХреЛ рдХреЛрдб, рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рд░ рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдбрдХрд░ рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИред
  • рдбрдХрд░ рд╣рдмрдорд╛ рдЫрд╡рд┐ рддреИрдирд╛рде рдЧрд░реНрджреИред
  • рдЙрддреНрдкрд╛рджрди рд╕рд░реНрднрд░рдорд╛ рдЬрдбрд╛рдиред
  • рдбрдХрд░ рд╣рдмрдмрд╛рдЯ рд╕рд░реНрднрд░рдорд╛ рдЫрд╡рд┐ рдЕрдкрд▓реЛрдб рдЧрд░реНрджреИред
  • рд╣рд╛рд▓рдХреЛ рдХрдиреНрдЯреЗрдирд░ рд░реЛрдХреНрджреИ рд░ рдирдпрд╛рдБ рдЫрд╡рд┐рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдирдпрд╛рдБ рд╕реБрд░реБ рдЧрд░реНрджреИред

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

CI/CD рднрдиреЗрдХреЛ рдХреЗ рд╣реЛ?

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

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

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

тЦН рдирд┐рд░рдиреНрддрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди

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

рд╕реБрд░реБрд╡рд╛рдд

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

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

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

рдбрдХрд░

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

рдбрдХрд░ рд╣рдм рд▓рдЧрднрдЧ рдЙрд╕реНрддреИ рдХреБрд░рд╛ рд╣реЛ GitHub git рднрдгреНрдбрд╛рд░, рд╡рд╛ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЛ рд▓рд╛рдЧреА npm JavaScript рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ред рдпреЛ рдбрдХрд░ рдЫрд╡рд┐рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрдирд▓рд╛рдЗрди рднрдгреНрдбрд╛рд░ рд╣реЛред рдпреЛ рдХреЗ рд╣реЛ рдбрдХрд░ рдбреЗрд╕реНрдХрдЯрдк рдЬрдбрд╛рди рд╣реБрдиреНрдЫред

рддреНрдпрд╕реЛрднрдП, рдбрдХрд░рдХреЛ рд╕рд╛рде рд╕реБрд░реВ рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ рджреБрдИ рдЪреАрдЬрд╣рд░реВ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:

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

docker -v

рдЕрд░реНрдХреЛ, рд╕реЛрдзреНрджрд╛ рддрдкрд╛рдИрдВрдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд░ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реЗрд░ рдбрдХрд░ рд╣рдмрдорд╛ рд▓рдЧ рдЗрди рдЧрд░реНрдиреБрд╣реЛрд╕реН:

docker login

рдбрдХрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ рдЫрд╡рд┐рд╣рд░реВ рд░ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВрдХреЛ рдЕрд╡рдзрд╛рд░рдгрд╛рд╣рд░реВ рдмреБрдЭреНрдиреБрдкрд░реНрдЫред

тЦН рдЫрд╡рд┐рд╣рд░реВ

рдПрдЙрдЯрд╛ рдЫрд╡рд┐ рдПрдЙрдЯрд╛ рдЦрд╛рдХрд╛ рдЬрд╕реНрддреЛ рдЪреАрдЬ рд╣реЛ рдЬрд╕рдорд╛ рдХрдиреНрдЯреЗрдирд░ рднреЗрд▓рд╛ рдЧрд░реНрди рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреНрдЫрдиреНред рдпреЛ рдПрдкрдХреЛ рдлрд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реА рд░ рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕реНрдиреНрдпрд╛рдкрд╕рдЯ рд╣реЛред рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рд╕рдЬрд┐рд▓реИ рдЫрд╡рд┐рд╣рд░реВ рд╕рд╛рдЭреЗрджрд╛рд░реА рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред

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

рдпреЛ рдЖрджреЗрд╢рд▓реЗ рдирд┐рдореНрди рд╣реЗрдбрд░рдХреЛ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдЧрд░реНрдиреЗрдЫ:

REPOSITORY     TAG     IMAGE ID     CREATED     SIZE
---

рдЕрд░реНрдХреЛ рд╣рд╛рдореА рдПрдЙрдЯреИ рдврд╛рдБрдЪрд╛рдорд╛ рдЖрджреЗрд╢рд╣рд░реВрдХреЛ рдХреЗрд╣реА рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рд╣реЗрд░реНрдиреЗрдЫреМрдВ - рдкрд╣рд┐рд▓реЗ рддреНрдпрд╣рд╛рдБ рдЯрд┐рдкреНрдкрдгреАрдХреЛ рд╕рд╛рде рдЖрджреЗрд╢ рдЫ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рдпрд╕рд▓реЗ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдЧрд░реНрди рд╕рдХреНрдЫ рднрдиреНрдиреЗ рдЙрджрд╛рд╣рд░рдгред

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

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

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

тЦНрдЯреНрдпрд╛рдЧрд╣рд░реВ

рдПрдХ рдЯреНрдпрд╛рдЧ рдЫрд╡рд┐ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдПрдХ рд╕рдВрдХреЗрдд рд╣реЛред

тЦН рдбрдХрд░ рдЖрджреЗрд╢рд╣рд░реВрдХреЛ рджреНрд░реБрдд рд╕рдиреНрджрд░реНрдн

рдпрд╣рд╛рдБ рдХреЗрд╣рд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рд╣реБрдиреЗ рдбрдХрд░ рдЖрджреЗрд╢рд╣рд░реВрдХреЛ рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрди рдЫред

рдЯреЛрд▓реА

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

рдкреНрд░рднрд╛рд╡

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

рдЫрд╡рд┐

рдбрдХрд░рдлрд╛рдЗрд▓рдмрд╛рдЯ рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ

рдбрдХрд░ рдЯреНрдпрд╛рдЧ

рдЫрд╡рд┐

рдЫрд╡рд┐ рдЯреНрдпрд╛рдЧрд┐рдЩ

рдбрдХрд░ рддрд╕реНрдмрд┐рд░рд╣рд░реВ

рдЫрд╡рд┐

рдЫрд╡рд┐рд╣рд░реВ рд╕реВрдЪреАрдмрджреНрдз рдЧрд░реНрджреИ

рдбрдХрд░ рд░рди

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

рдЫрд╡рд┐рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдХрдиреНрдЯреЗрдирд░ рдЪрд▓рд╛рдЙрдБрджреИ

рдбрдХрд░ рдзрдХреНрдХрд╛

рдЫрд╡рд┐

рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдорд╛ рдЫрд╡рд┐ рдЕрдкрд▓реЛрдб рдЧрд░реНрджреИ

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

рдЫрд╡рд┐

рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдмрд╛рдЯ рдЫрд╡рд┐ рд▓реЛрдб рдЧрд░реНрджреИ

docker PS

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

рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рд╕реВрдЪреАрдмрджреНрдз рдЧрд░реНрджреИ

рдбрдХрд░ рдкреНрд░рдгрд╛рд▓реА рдкреНрд░реБрди

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

рдкреНрд░рдпреЛрдЧ рдирдЧрд░рд┐рдПрдХрд╛ рдХрдиреНрдЯреЗрдирд░ рд░ рдЫрд╡рд┐рд╣рд░реВ рд╣рдЯрд╛рдЙрдБрджреИ

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

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

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

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

рдХрдиреНрдЯреЗрдирд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдбрдХрд░рд▓рд╛рдИ рдирд┐рд░реНрджреЗрд╢рди рджрд┐рди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпреЛ рднрдирд┐рдиреНрдЫ рдлрд╛рдЗрд▓ рдорд╛рд░реНрдлрдд рдЧрд░рд┐рдиреНрдЫ Dockerfile, рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рдореВрд▓ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫред рдпреЛ рдлрд╛рдЗрд▓, рд╕реБрд░реБрдорд╛, рдПрдХрджрдо рдЕрдмреЛрдз рджреЗрдЦрд┐рдиреНрдЫред

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

  • рджреЗрдЦрд┐ - рдпреЛ рдЖрджреЗрд╢рд▓реЗ рдлрд╛рдЗрд▓ рд╕реБрд░реБ рдЧрд░реНрдЫред рдпрд╕рд▓реЗ рдЖрдзрд╛рд░ рдЫрд╡рд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрджрдЫ рдЬрд╕рдорд╛ рдХрдиреНрдЯреЗрдирд░ рдмрдирд╛рдЗрдПрдХреЛ рдЫред
  • рдХрд╛рдкреА - рд╕реНрдерд╛рдиреАрдп рд╕реНрд░реЛрддрдмрд╛рдЯ рдХрдиреНрдЯреЗрдирд░рдорд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрджреИред
  • WORKDIR - рдирд┐рдореНрди рдЖрджреЗрд╢рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдХрд╛рд░реНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗрдЯ рдЧрд░реНрджреИред
  • RUN - рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЖрджреЗрд╢рд╣рд░реВред
  • ExposE - рдкреЛрд░реНрдЯ рд╕реЗрдЯрд┐рдЩрд╣рд░реВред
  • ENTRYPOINT - рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рдЖрджреЗрд╢ рдХреЛ рд╕рдВрдХреЗрддред

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

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

рдЕрд░реНрдХреЛ рдЪрд░рдгрд╣рд░реВ

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

  • рдХреЛрдб рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрдирдХреЛ рд▓рд╛рдЧрд┐ CI рдЙрдкрдХрд░рдг рд╕реЗрдЯрдЕрдк рдЧрд░реНрджреИред
  • рдЙрддреНрдкрд╛рджрди рд╕рд░реНрднрд░ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрджреИ рдпрд╕рд▓реЗ рд╣рд╛рдореНрд░реЛ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рд░ рдЪрд▓рд╛рдЙрди рд╕рдХреНрдЫред

рд╣рд╛рдореНрд░реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╣рд╛рдореА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫреМрдВ рдЯреНрд░рд╛рднрд┐рд╕ рд╕реАрдЖрдИред рд╕рд░реНрднрд░рдХреЛ рд░реВрдкрдорд╛ - DitigalOcean.

рдпреЛ рдзреНрдпрд╛рди рджрд┐рдиреБрдкрд░реНрдЫ рдХрд┐ рдпрд╣рд╛рдБ рддрдкрд╛рдИрдВ рд╕реЗрд╡рд╛рд╣рд░реВрдХреЛ рдЕрд░реНрдХреЛ рд╕рдВрдпреЛрдЬрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, Travis CI рдХреЛ рд╕рдЯреНрдЯрд╛, рддрдкрд╛рдЗрдБ CircleCI рд╡рд╛ Github рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рд░ DigitalOcean рдХреЛ рд╕рдЯреНрдЯрд╛ - AWS рд╡рд╛ Linodeред

рд╣рд╛рдореАрд▓реЗ Travis CI рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВ, рд░ рдорд╕рдБрдЧ рдкрд╣рд┐рд▓реЗ рдиреИ рдпреЛ рд╕реЗрд╡рд╛рдорд╛ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫред рддреНрдпрд╕рдХрд╛рд░рдг, рдЕрдм рдо рдпрд╕рд▓рд╛рдИ рдХрд╕рд░реА рдХрд╛рдордХреЛ рд▓рд╛рдЧрд┐ рддрдпрд╛рд░ рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рдЫреЛрдЯрдХрд░реАрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрдиреЗрдЫреБред

рдЯреНрд░рд╛рднрд┐рд╕ рд╕реАрдЖрдИ

Travis CI рдХреЛрдб рдкрд░реАрдХреНрд╖рдг рд░ рддреИрдирд╛рддреА рдХреЛ рд▓рд╛рдЧреА рдПрдХ рдЙрдкрдХрд░рдг рд╣реЛред рдо рдЯреНрд░рд╛рднрд┐рд╕ рд╕реАрдЖрдИ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗ рдЬрдЯрд┐рд▓рддрд╛рд╣рд░реВрдорд╛ рдЬрд╛рди рдЪрд╛рд╣рдиреНрди, рдХрд┐рдирдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрджреНрд╡рд┐рддреАрдп рдЫ, рд░ рдпрд╕рд▓реЗ рдзреЗрд░реИ рдлрд╛рдЗрджрд╛ рд▓реНрдпрд╛рдЙрдБрджреИрдиред рддрд░ рдпрджрд┐ рддрдкрд╛рдЗрдБ Travis CI рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ рдо рддрдкрд╛рдЗрдБрд▓рд╛рдИ рд╕реБрд░реБ рдЧрд░реНрди рдЖрдзрд╛рд░рднреВрдд рдХреБрд░рд╛рд╣рд░реВ рдХрднрд░ рдЧрд░реНрдиреЗрдЫреБред рдЪрд╛рд╣реЗ рддрдкрд╛рдЗрдБ Travis CI, CircleCI, Jenkins, рд╡рд╛ рдЕрд░реВ рдХреЗрд╣рд┐ рдЫрдиреМрдЯ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, рд╕рдорд╛рди рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╡рд┐рдзрд┐рд╣рд░реВ рдЬрддрд╛рддрддреИ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗрдЫред

Travis CI рдХреЛ рд╕рд╛рде рд╕реБрд░реВ рдЧрд░реНрди, рдЬрд╛рдиреБрд╣реЛрд╕реН рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд░ рдЦрд╛рддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рддреНрдпрд╕рдкрдЫрд┐ рддрдкрд╛рдЗрдБрдХреЛ GitHub рдЦрд╛рддрд╛ рд╕рдВрдЧ Travis CI рдПрдХреАрдХреГрдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдкреНрд░рдгрд╛рд▓реА рд╕реЗрдЯрдЕрдк рдЧрд░реНрджрд╛, рддрдкрд╛рдИрдВрд▓реЗ рднрдгреНрдбрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рдЬрд╕рдХреЛ рд╕рд╛рде рддрдкрд╛рдИрдВ рдХрд╛рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрд░реНрди рд░ рдпрд╕рд▓рд╛рдИ рдкрд╣реБрдБрдЪ рд╕рдХреНрд╖рдо рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫред (рдо GitHub рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫреБ, рддрд░ рдо рдкрдХреНрдХрд╛ рдЫреБ рдХрд┐ Travis CI BitBucket, рд░ GitLab, рд░ рдЕрдиреНрдп рд╕рдорд╛рди рд╕реЗрд╡рд╛рд╣рд░реВрд╕рдБрдЧ рдПрдХреАрдХреГрдд рд╣реБрди рд╕рдХреНрдЫ)ред

рдкреНрд░рддреНрдпреЗрдХ рдкрдЯрдХ Travis CI рд╕реБрд░реБ рд╣реБрдиреНрдЫ, рд╕рд░реНрднрд░ рд╕реБрд░реБ рд╣реБрдиреНрдЫ, рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрджреЗрд╢рд╣рд░реВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрджреИ, рд╕рдореНрдмрдиреНрдзрд┐рдд рднрдгреНрдбрд╛рд░ рд╢рд╛рдЦрд╛рд╣рд░реВ рддреИрдирд╛рддреА рд╕рд╣рд┐рддред

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

Travis CI рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓ рдмреЛрд▓рд╛рдЗрдпреЛ .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

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

рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рдорд╛ рдо рд╕реНрдерд╛рдиреАрдп Travis CI рд╕рд░реНрднрд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдЬрд╛рдБрджреИрдЫреБред рдореИрд▓реЗ рднрд╛рд╖рд╛рдХреЛ рд░реВрдкрдорд╛ рдиреЛрдб 12 рдЪрдпрди рдЧрд░реЗрдВ рд░ рдкреНрд░рдгрд╛рд▓реАрд▓рд╛рдИ рдбрдХрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рднрдиреЗред

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

рдпрджрд┐ рддрдкрд╛рдЗрдБ рддрдкрд╛рдЗрдБрдХреЛ рднрдгреНрдбрд╛рд░рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдХрднрд░реЗрдЬ рд╕рдВрдХреЗрдд рдЧрд░реНрдиреЗ рдмреНрдпрд╛рдЬрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдпрд╣рд╛рдБ рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рдЬрд╛рдирдХрд╛рд░реА рд╕рдЩреНрдХрд▓рди рд░ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди Jest, Travis CI рд░ Coveralls рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рдЫреЛрдЯреЛ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рддреНрдпрд╕реИрд▓реЗ рдлрд╛рдЗрд▓рдХреЛ рд╕рд╛рдордЧреНрд░реА рдпрд╣рд╛рдБ рдЫ .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

рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓реЗ рджреБрдИ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдЫ:

  • рд╕реАрдЖрдИ рдЙрдкрдХрд░рдг (рд╣рд╛рдореНрд░реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдЯреНрд░рд╛рднрд┐рд╕ CI) рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЫрд╡рд┐рд▓рд╛рдИ рдбрдХрд░ рд╣рдмрдорд╛ рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН, рдЯреНрдпрд╛рдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдкрдард╛рдЙрдиреБрд╣реЛрд╕реНред
  • рд╕рд░реНрднрд░рдорд╛ рдЫрд╡рд┐ рд▓реЛрдб рдЧрд░реНрджреИ, рдкреБрд░рд╛рдиреЛ рдХрдиреНрдЯреЗрдирд░ рд░реЛрдХреНрджреИ рд░ рдирдпрд╛рдБ рд╕реБрд░реБ рдЧрд░реНрджреИ (рд╣рд╛рдореНрд░реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╕рд░реНрднрд░ DigitalOcean рдкреНрд▓реЗрдЯрдлрд░реНрдордорд╛ рдЪрд▓реНрдЫ)ред

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

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

рдпрд╣рд╛рдБ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдХреЛ рдкрд╣рд┐рд▓реЛ рднрд╛рдЧ рд╣реЛ 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, рд░ рдпрд╕реНрддреИред

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

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

  • рд╣рд╛рдореАрд▓реЗ рд╣рд╛рд▓ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдХрдиреНрдЯреЗрдирд░ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд░ рдпрд╕рд▓рд╛рдИ рд░реЛрдХреНрди рдЖрд╡рд╢реНрдпрдХ рдЫред
  • рддреНрдпрд╕рдкрдЫрд┐ рддрдкрд╛рдЗрдБ рдкреГрд╖реНрдарднреВрдорд┐рдорд╛ рдирдпрд╛рдБ рдХрдиреНрдЯреЗрдирд░ рд╕реБрд░реБ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред
  • рддрдкрд╛рдИрдВрд▓реЗ рд╕рд░реНрднрд░рдХреЛ рд╕реНрдерд╛рдиреАрдп рдкреЛрд░реНрдЯ рд╕реЗрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреЗрдЫ 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

рдзреНрдпрд╛рди рджрд┐рдиреБрдкрд░реНрдиреЗ рдХреЗрд╣реА рдХреБрд░рд╛рд╣рд░реВ

рдпреЛ рд╕рдореНрднрд╡ рдЫ рдХрд┐ рдЬрдм рддрдкрд╛рдЗрдБ Travis CI рдмрд╛рдЯ SSH рдорд╛рд░реНрдлрдд рд╕рд░реНрднрд░рдорд╛ рдЬрдбрд╛рди рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, рддрдкрд╛рдЗрдБрд▓реЗ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЦреНрдиреБрд╣реБрдиреЗрдЫ рдЬрд╕рд▓реЗ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рд╕реНрдерд╛рдкрдирд╛ рд╕рдВрдЧ рдЬрд╛рд░реА рд░рд╛рдЦреНрдирдмрд╛рдЯ рд░реЛрдХреНрдиреЗрдЫ рдХрд┐рдирдХрд┐ рдкреНрд░рдгрд╛рд▓реАрд▓реЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрдиреЗрдЫред

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

рд░ рдпрд╣рд╛рдБ рдпрд╕рд▓реЗ рдХреЗ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдЫ - рдПрдХ base64 рдПрдиреНрдХреЛрдб рдЧрд░рд┐рдПрдХреЛ рд╕реНрдЯреНрд░рд┐рдЩ:

MTIzLjQ1LjY3Ljg5IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQWtsT1Vwa0RIcmZIWTE3U2JybVRJcE5MVEdLOVRqb20vQldEU1UKR1BsK25hZnpsSERUWVc3aGRJNHlaNWV3MThKSDRKVzlqYmhVRnJ2aVF6TTd4bEVMRVZmNGg5bEZYNVFWa2JQcHBTd2cwY2RhMwpQYnY3a09kSi9NVHlCbFdYRkNSK0hBbzNGWFJpdEJxeGlYMW5LaFhwSEFac01jaUxxOFY2UmpzTkFRd2RzZE1GdlNsVksvN1hBCnQzRmFvSm9Bc25jTTFROXg1KzNWMFd3NjgvZUlGbWIxenVVRmxqUUpLcHJyWDg4WHlwTkR2allOYnk2dncvUGIwcndlcnQvRW4KbVorQVc0T1pQblRQSTg5WlBtVk1MdWF5ckQyY0U4NlovaWw4YitndzNyMysxbkthdG1Ja2puMnNvMWQwMVFyYVRsTXFWU3NieApOclJGaTl3cmYrTTdRPT0geW91QGV4YW1wbGUuY29tCg==

рдпрд╣рд╛рдБ рдорд╛рдерд┐ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░рд┐рдПрдХреЛ рдЖрджреЗрд╢ рд╣реЛ

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

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

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

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

TLS/SSL рд░ рд▓реЛрдб рдмреНрдпрд╛рд▓реЗрдиреНрд╕рд┐рдЩ

рдореИрд▓реЗ рдорд╛рдерд┐ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕рдмреИ рдЧрд░реЗрдкрдЫрд┐, рдореИрд▓реЗ рд╕рд╛рдордирд╛ рдЧрд░реЗрдХреЛ рдЕрдиреНрддрд┐рдо рд╕рдорд╕реНрдпрд╛ рдпреЛ рдерд┐рдпреЛ рдХрд┐ рд╕рд░реНрднрд░рд╕рдБрдЧ SSL рдЫреИрдиред рдореИрд▓реЗ рдЬрдмрд░рдЬрд╕реНрддреА рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ Node.js рд╕рд░реНрднрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдХреЛ рд╣реБрдирд╛рд▓реЗ рдХрд╛рдо рдЧрд░реНрди рд░рд┐рднрд░реНрд╕ рдкреНрд░реЛрдХреНрд╕реА Nginx рд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдЧрд░реМрдВ, рддрдкрд╛рдИрдВрд▓реЗ рдзреЗрд░реИ рдЯрд┐рдВрдХрд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

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

рдЕрдм рддрдкрд╛рдЗрдБ рд╕рд░реНрднрд░рдорд╛ рд╕рдмреИ рдкреЛрд░реНрдЯрд╣рд░реВ рдмрдиреНрдж рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЬреБрди рдЖрдЧрдорди рдЬрдбрд╛рдирд╣рд░реВ рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрджрдЫ - рдкреЛрд░реНрдЯ рдмрд╛рд╣реЗрдХ 80, рд▓реЛрдб рдмреНрдпрд╛рд▓реЗрдиреНрд╕рд░ рд░ рдкреЛрд░реНрдЯрд╕рдБрдЧ рд╕рдЮреНрдЪрд╛рд░ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ 22 SSH рдХреЛ рд▓рд╛рдЧреАред рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рдпреА рджреБрдИ рдмрд╛рд╣реЗрдХ рдЕрдиреНрдп рдХреБрдиреИ рдкрдирд┐ рдкреЛрд░реНрдЯрд╣рд░реВрдорд╛ рд╕рд░реНрднрд░ рдкрд╣реБрдБрдЪ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЕрд╕рдлрд▓ рд╣реБрдиреЗрдЫред

рдкрд░рд┐рдгрд╛рдорд╣рд░реВ

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

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

рдкреНрд░рд┐рдп рдкрд╛рдардХрд╣рд░реБ! рдХреЗ рддрдкрд╛рдЗрдБ рддрдкрд╛рдЗрдБрдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдорд╛ CI/CD рдкреНрд░рд╡рд┐рдзрд┐рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ?

рд╕реАрдЖрдИ/рд╕реАрдбреА рдЪреЗрди рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ рд░ рдбрдХрд░рдХреЛ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд╛рд░реНрдп

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди