рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднрд╛рдЧ 1: рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдФрд░ рдХрдВрдЯреЗрдирд░

рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реЛрдз рдкрд░, рд╣реИрдмрд░ рдиреЗ рдПрдХ рд╣рдм рдмрдирд╛рдпрд╛ Kubernetes рдФрд░ рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдкрд╣рд▓рд╛ рдкреНрд░рдХрд╛рд╢рди рдбрд╛рд▓рддреЗ рд╣реБрдП рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИред рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ!

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЖрд╕рд╛рди рд╣реИред рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдВрдХ рдореБрдЭреЗ рдмрд╣реБрдд рд╕рд╛рд░рд╛ рдкреИрд╕рд╛ рдХреНрдпреЛрдВ рджреЗрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рдХреБрдЫ рд╣реА рдШрдВрдЯреЛрдВ рдореЗрдВ рдЗрд╕ рддрдХрдиреАрдХ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднрд╛рдЧ 1: рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдФрд░ рдХрдВрдЯреЗрдирд░

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

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

рдЕрдм, рдмрд┐рдирд╛ рдХрд┐рд╕реА рджреЗрд░реА рдХреЗ, рдЖрдЗрдП рдХрд╛рдо рдкрд░ рд▓рдЧреЗрдВ рдФрд░ рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред

рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдРрдк

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

рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдореБрдЦреНрдп рд╡рд┐рдВрдбреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИред

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднрд╛рдЧ 1: рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдФрд░ рдХрдВрдЯреЗрдирд░
рднрд╛рд╡рдирд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ

рддрдХрдиреАрдХреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рддреАрди рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ:

  • SA-Frontend рдПрдХ Nginx рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╣реИ рдЬреЛ рд░рд┐рдПрдХреНрдЯ рд╕реНрдЯреИрдЯрд┐рдХ рдлрд╝рд╛рдЗрд▓реЗрдВ рдкрд░реЛрд╕рддрд╛ рд╣реИред
  • SA-WebApp рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ рдлреНрд░рдВрдЯрдПрдВрдб рд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред
  • рдПрд╕рдП-рд▓реЙрдЬрд┐рдХ рдПрдХ рдкрд╛рдпрдерди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ рдЯреЗрдХреНрд╕реНрдЯ рд╕реЗрдВрдЯреАрдореЗрдВрдЯ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИред

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

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднрд╛рдЧ 1: рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдФрд░ рдХрдВрдЯреЗрдирд░
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣рд┐рдд рд╣реЛрддрд╛ рд╣реИ

рдЙрдкрд░реЛрдХреНрдд рдЖрд░реЗрдЦ рдореЗрдВ, рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реБрдП рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХреНрд░рдорд╛рдВрдХрд┐рдд рдЪрд░рдгреЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдЙрдиреНрд╣реЗрдВ рддреЛрдбрд╝реЗрдВ:

  1. рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ index.html (рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рд░рд┐рдПрдХреНрдЯ рдРрдк рдкреИрдХреЗрдЬ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ)ред
  2. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдХреЙрд▓ рдЖрддреА рд╣реИред
  3. рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдкрд╛рдпрдерди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
  4. рдкрд╛рдпрдерди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд╛рда рдХреА рднрд╛рд╡рдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдиреБрд░реЛрдз рдХреЗ рдЬрд╡рд╛рдм рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред
  5. рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрддрд╛ рд╣реИ (рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд┐рдП рдЧрдП рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИ)ред

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

рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдирд╛

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

тЦНрд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рдХреА рд╕реНрдерд╛рдкрдирд╛

рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ Node.js рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ NPM рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рдм рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдПрдВ sa-frontend рдФрд░ рдирд┐рдореНрди рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрдБ:

npm install

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

npm start

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

тЦНрдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рдПрдХреНрдЯ рдРрдк рддреИрдпрд╛рд░ рдХрд░рдирд╛

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

рд░рд┐рдПрдХреНрдЯ рдРрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд┐рд░ рд╕реЗ рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░реЗрдВ sa-frontend рдФрд░ рдирд┐рдореНрди рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрдБ:

npm run build

рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдЧрд╛ build. рдЗрд╕рдореЗрдВ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рд╕реНрдерд┐рд░ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреАред

тЦНNginx рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рд░ рдлрд╝рд╛рдЗрд▓реЗрдВ рдкрд░реЛрд╕рдирд╛

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ Nginx рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓ рдФрд░ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдВ рдЖрдк рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рдЖрдкрдХреЛ рдлрд╝реЛрд▓реНрдбрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ sa-frontend/build рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ [your_nginx_installation_dir]/html.

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рджреМрд░рд╛рди рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ index.html рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ [your_nginx_installation_dir]/html/index.html. рдпрд╣ рд╡рд╣ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬрд┐рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Nginx рд╕рд░реНрд╡рд░ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдХреЛ рдкреЛрд░реНрдЯ рдкрд░ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ 80, рд▓реЗрдХрд┐рди рдЖрдк рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдЗрд╕реЗ рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ [your_nginx_installation_dir]/conf/nginx.conf.

рдЕрдм рдЕрдкрдирд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓реЗрдВ рдФрд░ рдкрд░ рдЬрд╛рдПрдВ localhost:80. рдЖрдкрдХреЛ рд░рд┐рдПрдХреНрдЯ рдРрдк рдкреЗрдЬ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднрд╛рдЧ 1: рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдФрд░ рдХрдВрдЯреЗрдирд░
рд░рд┐рдПрдХреНрдЯ рдРрдк Nginx рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдкрд░реЛрд╕рд╛ рдЬрд╛рддрд╛ рд╣реИ

рдпрджрд┐ рдЖрдк рдЕрдм рдлрд╝реАрд▓реНрдб рдореЗрдВ рдХреБрдЫ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ Type your sentence рдФрд░ рдмрдЯрди рджрдмрд╛рдПрдБ Send - рдХреБрдЫ рди рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди, рдпрджрд┐ рдЖрдк рдХрдВрд╕реЛрд▓ рдХреЛ рджреЗрдЦреЗрдВ, рддреЛ рдЖрдк рд╡рд╣рд╛рдВ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпреЗ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдХрд╣рд╛рдБ рд╣реЛрддреА рд╣реИрдВ, рдЖрдЗрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред

рдлреНрд░рдВрдЯ-рдПрдВрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг

рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХреЛрдб рдХреЛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ App.js, рд╣рдо рдЗрд╕реЗ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ Send рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ analyzeSentence(). рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдХреЛрдб рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рдкрддреНрд░ рдХреА рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд╣реИ # ╨Э╨╛╨╝╨╡╤А, рдХреЛрдб рдХреЗ рдиреАрдЪреЗ рдПрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрд╕реА рддрд░рд╣, рд╣рдо рдЕрдиреНрдп рдХреЛрдб рдЕрдВрд╢реЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВрдЧреЗред

analyzeSentence() {
    fetch('http://localhost:8080/sentiment', {  // #1
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
                       sentence: this.textField.getValue()})// #2
    })
        .then(response => response.json())
        .then(data => this.setState(data));  // #3
}

1. рд╡рд╣ URL рдЬрд┐рд╕ рдкрд░ POST рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рдРрд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

2.рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдиреЗ рдЖрд╡реЗрджрди рдХреЛ рднреЗрдЬрд╛ред рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рд╣реИ:

{
    sentence: "I like yogobella!"
}

3.рдЬрдм рдХрд┐рд╕реА рдЕрдиреБрд░реЛрдз рдХрд╛ рдЬрд╡рд╛рдм рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдШрдЯрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдпрд╣ рдШрдЯрдХ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдпрджрд┐ рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд, рдПрдХ JSON рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рд╕рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рдФрд░ рдкрд░рд┐рдХрд▓рд┐рдд рдЯреЗрдХреНрд╕реНрдЯ рд╕реНрдХреЛрд░ рд╣реЛрддрд╛ рд╣реИ), рддреЛ рд╣рдо рдШрдЯрдХ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдВрдЧреЗ PolarityрдЬрдм рддрдХ рд╢рд░реНрддреЗрдВ рдкреВрд░реА рд╣реЛрддреА рд╣реИрдВ. рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╣рдо рдШрдЯрдХ рдХрд╛ рд╡рд░реНрдгрди рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ:

const polarityComponent = this.state.polarity !== undefined ?
    <Polarity sentence={this.state.sentence} 
              polarity={this.state.polarity}/> :
    null;

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╡реИрд╕реЗ рднреА рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ? рдпрджрд┐ рдЖрдк рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЬрд┐рд╕ рдкрддреЗ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди POST рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╡рд╣рд╛рдВ рдЕрднреА рддрдХ рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХреЗ, рддреЛ рдЖрдк рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реЛрдВрдЧреЗред рдЕрд░реНрдерд╛рддреН, рдкрддреЗ рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ http://localhost:8080/sentiment, рд╣рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднрд╛рдЧ 1: рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдФрд░ рдХрдВрдЯреЗрдирд░
рд╣рдореЗрдВ рдПрдХ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ POST рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХреЗ

тЦНрд╕реНрдкреНрд░рд┐рдВрдЧ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯ рдХрд░рдирд╛

рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ JDK8 рдФрд░ Maven рдФрд░ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред

тЦНрдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреИрдХ рдХрд░рдирд╛

рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░реЗрдВ sa-webapp рдФрд░ рдирд┐рдореНрди рдЖрджреЗрд╢ рджрд░реНрдЬ рдХрд░реЗрдВ:

mvn install

рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж sa-webapp рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА target. рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рдлрд╝рд╛рдЗрд▓ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

тЦНрдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдирд╛

рдлреЛрд▓реНрдбрд░ рдкрд░ рдЬрд╛рдПрдВ target рдФрд░ рдирд┐рдореНрди рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдПрдБ:

java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar

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

Error creating bean with name 'sentimentController': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'sa.logic.api.url' in value "${sa.logic.api.url}"

рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдЕрд░реНрде рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрд╕рдВрднрд╡рддрд╛ рдХрд╛ рдЬрд┐рдХреНрд░ рд╣реИ sa.logic.api.url. рдЖрдЗрдП рдЙрд╕ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред

тЦНрдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг

рдпрд╣рд╛рдВ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд╣реИ рдЬрд╣рд╛рдВ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред

@CrossOrigin(origins = "*")
@RestController
public class SentimentController {
    @Value("${sa.logic.api.url}")    // #1
    private String saLogicApiUrl;
    @PostMapping("/sentiment")
    public SentimentDto sentimentAnalysis(
        @RequestBody SentenceDto sentenceDto) 
    {
        RestTemplate restTemplate = new RestTemplate();
        return restTemplate.postForEntity(
                saLogicApiUrl + "/analyse/sentiment",    // #2
                sentenceDto, SentimentDto.class)
                .getBody();
    }
}

  1. рдПрд╕ рдореЗрдВentimentController рд╡рд╣рд╛рдБ рдПрдХ рдореИрджрд╛рди рд╣реИ saLogicApiUrl. рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рд╕рдВрдкрддреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ sa.logic.api.url.
  2. рд░реЗрдЦрд╛ saLogicApiUrl рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рддрд╛ рд╣реИ /analyse/sentiment. рд╕рд╛рде рдореЗрдВ рд╡реЗ рдкрд╛рда рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рд╡рд╛рд▓реА рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрддрд╛ рдмрдирд╛рддреЗ рд╣реИрдВред

тЦНрд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛

рд╕реНрдкреНрд░рд┐рдВрдЧ рдореЗрдВ, рд╕рдВрдкрддреНрддрд┐ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрд░реЛрдд рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ application.properties, рдЬреЛ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ sa-webapp/src/main/resources. рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрдкрддреНрддрд┐ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк рдЗрд╕реЗ рдирд┐рдореНрди рдЖрджреЗрд╢ рд╕реЗ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=WHAT.IS.THE.SA.LOGIC.API.URL

рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рд╣рдорд╛рд░реЗ рдкрд╛рдпрдерди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкрддреЗ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=http://localhost:5000

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

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

тЦНрдкрд╛рдпрдерди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯ рдХрд░рдирд╛

рдкрд╛рдпрдерди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╛рдпрдерди 3 рдФрд░ рдкрд┐рдк рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрдЪрд┐рдд рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

тЦНрдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдПрдБ sa-logic/sa рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрдБ:

python -m pip install -r requirements.txt
python -m textblob.download_corpora

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

рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ:

python sentiment_analysis.py

рдЗрд╕ рдЖрджреЗрд╢ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрддрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:

* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ localhost:5000/

тЦНрдХреЛрдб рдЕрдиреБрд╕рдВрдзрд╛рди

рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рдХреИрд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИ, рдЖрдЗрдП рдкрд╛рдпрдерди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВ:

from textblob import TextBlob
from flask import Flask, request, jsonify
app = Flask(__name__)                                   #1
@app.route("/analyse/sentiment", methods=['POST'])      #2
def analyse_sentiment():
    sentence = request.get_json()['sentence']           #3
    polarity = TextBlob(sentence).sentences[0].polarity #4
    return jsonify(                                     #5
        sentence=sentence,
        polarity=polarity
    )
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)                #6

  1. рд╡рд╕реНрддреБ рдЖрд░рдВрднреАрдХрд░рдг Flask.
  2. рдЗрд╕рдореЗрдВ POST рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ред
  3. рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ sentence рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рд╕реЗ.
  4. рдЕрдирд╛рдо рд╡рд╕реНрддреБ рдЖрд░рдВрднреАрдХрд░рдг TextBlob рдФрд░ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ polarity рдЕрдиреБрд░реЛрдз рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдкрд╣рд▓реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд▓рд┐рдП (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХрдорд╛рддреНрд░ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ)ред
  5. рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд▓реМрдЯрд╛рдирд╛, рдЬрд┐рд╕рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдкрд╛рда рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрдХреЗрддрдХ рд╢рд╛рдорд┐рд▓ рд╣реИ polarity.
  6. рдлреНрд▓рд╛рд╕реНрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ 0.0.0.0:5000 (рдЖрдк рдлреЙрд░реНрдо рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ localhost:5000).

рдЕрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рд╡рд╛рд▓реА рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдЪрд▓ рд░рд╣реА рд╣реИрдВред рд╡реЗ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдХрд╛рд░реНрдп рдХреЗ рдЗрд╕ рдЪрд░рдг рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реЗрдЦ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрддрд╛ рд╣реИред

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднрд╛рдЧ 1: рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдФрд░ рдХрдВрдЯреЗрдирд░
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдХреЛ рд╕реНрд╡рд╕реНрде рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

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

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

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

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

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

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

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

тЦНрд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рдирд╛

рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд┐рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░рдЦрд░рдЦрд╛рд╡ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдиреБрдХрд╕рд╛рди рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛:

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

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднрд╛рдЧ 1: рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдФрд░ рдХрдВрдЯреЗрдирд░
Nginx рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореЗрдВ рдЪрд▓ рд░рд╣реА рд╕реНрдерд┐рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рддрд╛ рд╣реИ

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

  1. рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдХреБрд╢рд▓ рдЙрдкрдпреЛрдЧ: рдбреЙрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред
  2. рдордВрдЪ рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛. рдПрдХ рдХрдВрдЯреЗрдирд░ рдЬрд┐рд╕реЗ рдбреЗрд╡рд▓рдкрд░ рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ, рдХрд╣реАрдВ рднреА рдЪрд▓рд╛рдПрдЧрд╛ред
  3. рдЫрд╡рд┐ рдкрд░рддреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд▓реНрдХрд╛ рдкрд░рд┐рдирд┐рдпреЛрдЬрдиред

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

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

тЦНрд░рд┐рдПрдХреНрдЯ рдРрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рдЫрд╡рд┐ рдмрдирд╛рдирд╛

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

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ Dockerfile, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╣рдордиреЗ Nginx рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдлрд╝рд╛рдЗрд▓реЗрдВ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдерд╛:

  1. рдПрдХ рд░рд┐рдПрдХреНрдЯ рдРрдк рдкреИрдХреЗрдЬ рдмрдирд╛рдирд╛ (npm run build).
  2. Nginx рд╕рд░реНрд╡рд░ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛.
  3. рдХрд┐рд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ build рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ sa-frontend рд╕рд░реНрд╡рд░ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ nginx/html.

рдиреАрдЪреЗ рдЖрдк рдПрдХ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдХреА рдЧрдИ рдЙрдкрд░реЛрдХреНрдд рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдорд╛рдирддрд╛рдПрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

тЦНрдПрд╕рдП-рдлреНрд░рдВрдЯреЗрдВрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░рдлрд╛рдЗрд▓ рддреИрдпрд╛рд░ рдХрд░рдирд╛

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

  1. рдЖрдкрдХреЛ Nginx рдЫрд╡рд┐ рдХреЛ рдЫрд╡рд┐ рдХрд╛ рдЖрдзрд╛рд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред
  2. рдлрд╝реЛрд▓реНрдбрд░ рд╕рд╛рдордЧреНрд░реА sa-frontend/build рдЫрд╡рд┐ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ nginx/html.

рдпрджрд┐ рд╣рдо рдЗрд╕ рд╡рд┐рд╡рд░рдг рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХреА рдУрд░ рдЬрд╛рддреЗ рд╣реИрдВ Dockerfile, рддреЛ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

FROM nginx
COPY build /usr/share/nginx/html

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

рдпрд╣рд╛рдВ рдЖрдкрдХреЗ рдорди рдореЗрдВ рдпрд╣ рд╕рд╡рд╛рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╣рд╛рдВ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реИ build, рдпрд╛рдиреА рд░рд╛рд╕реНрддрд╛ рдХрд╣рд╛рдВ рд╕реЗ рдЖрдпрд╛ /usr/share/nginx/html. рджрд░рдЕрд╕рд▓, рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ рд╡рд┐рд╡рд░рдг рдЫрд╡рд┐ред

тЦН рдЫрд╡рд┐ рдХреЛ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдирд╛ рдФрд░ рдЙрд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛

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

  1. рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд╛рдХ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗрд╡рд╛рд▓рд╛ рдордЬрд╝рджреВрд░.
  2. рдбреЙрдХрд░ рд╣рдм рд╕рд╛рдЗрдЯ рдкрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВред
  3. рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдХрд░ рдЕрдкрдиреЗ рдЦрд╛рддреЗ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

рдЕрдм рдЖрдкрдХреЛ рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ sa-frontend рдФрд░ рд╡рд╣рд╛рдВ рдирд┐рдореНрди рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрдБ:

docker build -f Dockerfile -t $DOCKER_USER_ID/sentiment-analysis-frontend .

рдпрд╣рд╛рдВ рдФрд░ рдиреАрдЪреЗ рд╕рдорд╛рди рдЖрджреЗрд╢реЛрдВ рдореЗрдВ $DOCKER_USER_ID рдбреЙрдХрд░ рд╣рдм рдкрд░ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдорд╛рдВрдб рдХрд╛ рдпрд╣ рднрд╛рдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ: rinormaloku/sentiment-analysis-frontend.

рдРрд╕реЗ рдореЗрдВ рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдЗрд╕рд╕реЗ рд╣рдЯрд╛рдХрд░ рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ -f Dockerfile, рдЪреВрдБрдХрд┐ рдЬрд┐рд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣рдо рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕рдореЗрдВ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореМрдЬреВрдж рд╣реИред

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

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

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

тЦНрдПрдХ рдХрдВрдЯреЗрдирд░ рд╢реБрд░реВ рдХрд░рдирд╛

рдЕрдм рдХреЛрдИ рднреА рдЙрд╕ рдЫрд╡рд┐ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ $DOCKER_USER_ID/sentiment-analysis-frontend. рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рдо рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

docker pull $DOCKER_USER_ID/sentiment-analysis-frontend
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend

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

  • рдкрд╣рд▓рд╛ рдирдВрдмрд░ 80 рд╣реЛрд╕реНрдЯ (рдЕрд░реНрдерд╛рдд, рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреНрдпреВрдЯрд░) рдХрд╛ рдкреЛрд░реНрдЯ рдирдВрдмрд░ рд╣реИред
  • рджреВрд╕рд░рд╛ рдирдВрдмрд░ 80 рдХрдВрдЯреЗрдирд░ рдХрд╛ рдкреЛрд░реНрдЯ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреГрд╖реНрдЯрд╛рдВрдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ.

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднрд╛рдЧ 1: рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдФрд░ рдХрдВрдЯреЗрдирд░
рдЕрдЧреНрд░реЗрд╖рдг рдкреЛрд░реНрдЯ

рд╕рд┐рд╕реНрдЯрдо рдкреЛрд░реНрдЯ рд╕реЗ рдЕрдиреБрд░реЛрдз рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ <hostPort> рдкреНрд░рддрд┐ рдкреЛрд░реНрдЯ <containerPort>. рдпрд╛рдиреА рдкреЛрд░реНрдЯ рддрдХ рдкрд╣реБрдВрдЪ 80 рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рдПрдХ рдкреЛрд░реНрдЯ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ 80 рдХрдВрдЯреЗрдирд░ред

рдмрдВрджрд░рдЧрд╛рд╣ рдХреЗ рдмрд╛рдж рд╕реЗ 80 рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЦреЛрд▓рд╛ рдЧрдпрд╛, рдЖрдк рдЗрд╕ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ localhost:80. рдпрджрд┐ рдЖрдкрдХрд╛ рд╕рд┐рд╕реНрдЯрдо рдбреЙрдХрд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреЙрдХрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдкрддрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛ <docker-machine ip>:80. рдбреЙрдХрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрд╛ рдЖрдИрдкреА рдкрддрд╛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ docker-machine ip.

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдПрдХ рдмрд╛рд░ рдлреНрд░рдВрдЯ-рдПрдВрдб рдРрдк рдХрдВрдЯреЗрдирд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓реЙрдиреНрдЪ рд╣реЛ рдЬрд╛рдиреЗ рдкрд░, рдЖрдкрдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЗрд╕рдХрд╛ рдкреЗрдЬ рдЦреЛрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

тЦН.dockerignore рдлрд╝рд╛рдЗрд▓

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЫрд╡рд┐ рдХрд╛ рдирд┐рд░реНрдорд╛рдг SA-Frontend, рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмреЗрд╣рдж рдзреАрдореА рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдг рд╕рдВрджрд░реНрдн рдХреЛ рдбреЙрдХрд░ рдбреЗрдореЙрди рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬреЛ рдмрд┐рд▓реНрдб рд╕рдВрджрд░реНрдн рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИ, рдХрдорд╛рдВрдб рдХреЗ рдЕрдВрддрд┐рдо рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рджреА рдЧрдИ рд╣реИ docker build. рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рдХрдорд╛рдВрдб рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рд╣реИред рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЕрд╕реЗрдВрдмрд▓реА рд╕рдВрджрд░реНрдн рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ:

sa-frontend:
|   .dockerignore
|   Dockerfile
|   package.json
|   README.md
+---build
+---node_modules
+---public
---src

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

node_modules
src
public

рдлрд╝рд╛рдЗрд▓ .dockerignore рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рдорд╛рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП Dockerfile. рдЕрдм рдЫрд╡рд┐ рдХреЗ рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдХреБрдЫ рд╕реЗрдХрдВрдб рд▓рдЧреЗрдВрдЧреЗред

рдЖрдЗрдП рдЕрдм рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐ рд╕реЗ рдирд┐рдкрдЯреЗрдВред

тЦНрдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рдЫрд╡рд┐ рдмрдирд╛рдирд╛

рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХреНрдпрд╛, рдФрд░ рдЖрдкрдиреЗ рдХрдВрдЯреЗрдирд░ рдЫрд╡рд┐рдпрд╛рдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЪреАрдЬреЗрдВ рдкрд╣рд▓реЗ рд╣реА рд╕реАрдЦ рд▓реА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдпрд╣ рднрд╛рдЧ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реЛрдЧрд╛.

рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ Dockerfile, рдЬреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ sa-webapp. рдпрджрд┐ рдЖрдк рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрд╛рда рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдореЗрдВ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рджреЛ рдирдП рдирд┐рд░реНрдорд╛рдг рдорд┐рд▓реЗрдВрдЧреЗ рдЬреЛ рдХреАрд╡рд░реНрдб рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ ENV ╨╕ EXPOSE:

ENV SA_LOGIC_API_URL http://localhost:5000
тАж
EXPOSE 8080

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

рдХреАрд╡рд░реНрдб EXPOSE рдЖрдкрдХреЛ рдбреЙрдХрд░ рдХреЛ рдкреЛрд░реНрдЯ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╣рдо рдЗрд╕ рдкреЛрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдЖрдк рдЙрд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ Dockerfile рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП SA-Frontend рдРрд╕рд╛ рдХреЛрдИ рдЖрджреЗрд╢ рдирд╣реАрдВ рд╣реИ. рдпрд╣ рдХреЗрд╡рд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рд░рдЪрдирд╛ рдкрд╛рдардХ рдХреЗ рд▓рд┐рдП рд╣реИ Dockerfile.

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

тЦНрдкрд╛рдпрдерди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рдЫрд╡рд┐ рдмрдирд╛рдирд╛

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

тЦНрдХрдВрдЯреЗрдирд░реАрдХреГрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг

рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬрд╝ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЖрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ? рдореИрдВ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛. рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред

  1. рдЖрдЗрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдВрдЯреЗрдирд░ рд╢реБрд░реВ рдХрд░реЗрдВ sa-logic рдФрд░ рдЗрд╕реЗ рдкреЛрд░реНрдЯ рдкрд░ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. рдЖрдЗрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдВрдЯреЗрдирд░ рд╢реБрд░реВ рдХрд░реЗрдВ sa-webapp рдФрд░ рдЗрд╕реЗ рдкреЛрд░реНрдЯ рдкрд░ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ 8080. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдЙрд╕ рдкреЛрд░реНрдЯ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдкрд╛рдпрдерди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдкреБрди: рдЕрд╕рд╛рдЗрди рдХрд░рдХреЗ рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕реБрдиреЗрдЧрд╛ред SA_LOGIC_API_URL:
    $ docker run -d -p 8080:8080 -e SA_LOGIC_API_URL='http://<container_ip or docker machine ip>:5000' $DOCKER_USER_ID/sentiment-analysis-web-app

рдХрд┐рд╕реА рдХрдВрдЯреЗрдирд░ рдпрд╛ рдбреЙрдХрд░ рд╡реАрдПрдо рдХрд╛ рдЖрдИрдкреА рдкрддрд╛ рдХреИрд╕реЗ рдкрддрд╛ рдХрд░реЗрдВ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рджреЗрдЦреЗрдВ README.

рдЖрдЗрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдВрдЯреЗрдирд░ рд╢реБрд░реВ рдХрд░реЗрдВ sa-frontend:

docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend

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

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдкреЛрд░реНрдЯ рдмрджрд▓рддреЗ рд╣реИрдВ sa-webapp, рдпрд╛ рдпрджрд┐ рдЖрдк рдбреЙрдХрд░ рд╡реАрдПрдо рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ App.js рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ sa-frontendрд╡рд┐рдзрд┐ рдореЗрдВ рдЖрдИрдкреА рдкрддрд╛ рдпрд╛ рдкреЛрд░реНрдЯ рдирдВрдмрд░ рдмрджрд▓рдХрд░ analyzeSentence()рдЕрдкреНрд░рдЪрд▓рд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд╡рд░реНрддрдорд╛рди рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЫрд╡рд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реЗрдЦ рдЕрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред

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

рд╕рд╛рд░рд╛рдВрд╢: рд╣рдореЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?

рд╣рдордиреЗ рдЕрднреА рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреА рд╣реИ Dockerfile, рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбреЙрдХрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рднреЗрдЬрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЛ рдХреИрд╕реЗ рддреЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рдП .dockerignore. рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реА рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдЕрдм рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдЪрд▓ рд░рд╣реА рд╣реИрдВред рдпрд╣рд╛рдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдЪрд┐рдд рдкреНрд░рд╢реНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рдЗрд╕ рдкреНрд░рд╢реНрди рдХреЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реЛрдЧрд╛ред рдЗрд╕ рдмреАрдЪ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
рдЖрдЗрдП рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЯреЗрдХреНрд╕реНрдЯ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреБрдирд┐рдпрд╛ рднрд░ рдореЗрдВ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЙрдирдХреЗ рдкрд╛рд╕ рд╣рд░ рдорд┐рдирдЯ рд▓рд╛рдЦреЛрдВ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдЖрддреА рд╣реИрдВ. рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ sa-webapp ╨╕ sa-logic рднрд╛рд░реА рддрдирд╛рд╡ рдореЗрдВ рд░рд╣реЗрдВрдЧреЗ. рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕реНрдХреЗрд▓ рдХрд░реЗрдВ?

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднрд╛рдЧ 1: рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдФрд░ рдХрдВрдЯреЗрдирд░

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

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