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

рдЖрдордЪреНрдпрд╛ рд╡рд┐рдирдВрддреАрдиреБрд╕рд╛рд░, Habr рдиреЗ рдПрдХ рд╣рдм рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЖрдгрд┐ рддреНрдпрд╛рдд рдкрд╣рд┐рд▓реЗ рдкреНрд░рдХрд╛рд╢рди рдЯрд╛рдХрддрд╛рдирд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдирдВрдж рд╣реЛрдд рдЖрд╣реЗ. рд╕рджрд╕реНрдпрддрд╛ рдШреНрдпрд╛!

Kubernetes рд╕реЛрдкреЗ рдЖрд╣реЗ. рдпрд╛ рдХреНрд╖реЗрддреНрд░рд╛рдд рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдмрдБрдХрд╛ рдорд▓рд╛ рдЦреВрдк рдкреИрд╕реЗ рдХрд╛ рджреЗрддрд╛рдд, рддрд░ рдХреЛрдгреАрд╣реА рдЕрд╡рдШреНрдпрд╛ рдХрд╛рд╣реА рддрд╛рд╕рд╛рдВрдд рдпрд╛ рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рд╡рд░ рдкреНрд░рднреБрддреНрд╡ рдорд┐рд│рд╡реВ рд╢рдХрддреЛ?

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

рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЗрддрдХреНрдпрд╛ рд▓рд╡рдХрд░ рд╢рд┐рдХрддрд╛ рдпреЗрддрд╛рдд рдпрд╛рдмрджреНрджрд▓ рддреБрдореНрд╣рд╛рд▓рд╛ рд╢рдВрдХрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕, рдореА рд╕реБрдЪрд╡рд┐рддреЛ рдХреА рддреБрдореНрд╣реА рд╕реНрд╡рддрдГ рдкреНрд░рдпрддреНрди рдХрд░рд╛. рдЕрд░реНрдерд╛рдд, рдпрд╛ рд╕рд╛рдордЧреНрд░реАрдордзреНрдпреЗ рдкреНрд░рднреБрддреНрд╡ рдорд┐рд│рд╡рд▓реНрдпрд╛рдирдВрддрд░, рддреБрдореНрд╣реА рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░рдордзреНрдпреЗ рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЕрд╕рд╛рд▓. рдореА рдпрд╛рдЪреА рд╣рдореА рджреЗрдК рд╢рдХрддреЛ, рдХрд╛рд░рдг рдореА рдЖрдордЪреНрдпрд╛ рдХреНрд▓рд╛рдпрдВрдЯрдирд╛ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рд╕реЛрдмрдд рдХрд╛рдо рдХрд░рд╛рдпрд▓рд╛ рд╢рд┐рдХрд╡рддреЛ рддреАрдЪ рдкрджреНрдзрдд рдЗрдереЗ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ. рд╣реЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рдЗрддрд░рд╛рдВрдкреЗрдХреНрд╖рд╛ рд╡реЗрдЧрд│реЗ рдХрд╛рдп рдХрд░рддреЗ? рдЦрд░рдВ рддрд░, рдмрд░реНрдпрд╛рдЪ рдЧреЛрд╖реНрдЯреА рдЖрд╣реЗрдд. рддрд░, рдпрд╛рдкреИрдХреА рдмрд╣реБрддреЗрдХ рд╕рд╛рд╣рд┐рддреНрдп рд╕реЛрдкреНрдпрд╛ рдЧреЛрд╖реНрдЯреАрдВрдЪреНрдпрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгрд╛рдиреЗ рд╕реБрд░реВ рд╣реЛрддреЗ - рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдЪреНрдпрд╛ рд╕рдВрдХрд▓реНрдкрдирд╛ рдЖрдгрд┐ рдХреБрдмреЗрдХреНрдЯрд▓ рдХрдорд╛рдВрдбрдЪреА рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ. рдпрд╛ рд╕рд╛рдордЧреНрд░реАрдЪреЗ рд▓реЗрдЦрдХ рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рддрд╛рдд рдХреА рддреНрдпрд╛рдВрдЪреЗ рд╡рд╛рдЪрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕, рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕ рдЖрдгрд┐ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░реНрд╕рд╢реА рдкрд░рд┐рдЪрд┐рдд рдЖрд╣реЗрдд. рдЖрдкрдг рджреБрд╕рд▒реНрдпрд╛ рдорд╛рд░реНрдЧрд╛рдиреЗ рдЬрд╛рдК. рдкреНрд░рдердо, рдЖрдореНрд╣реА рд╕рдВрдЧрдгрдХрд╛рд╡рд░реАрд▓ рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╕рд╛ рдЪрд╛рд▓рд╡рд╛рдпрдЪрд╛ рдпрд╛рдмрджреНрджрд▓ рдмреЛрд▓реВ. рдордЧ рдЖрдореНрд╣реА рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕рд╕рд╛рдареА рдХрдВрдЯреЗрдирд░ рдкреНрд░рддрд┐рдорд╛ рддрдпрд╛рд░ рдХрд░реВ. рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░, рдЖрдореНрд╣реА Kubernetes рд╢реА рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдК рдЖрдгрд┐ Kubernetes рджреНрд╡рд╛рд░реЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХреНрд▓рд╕реНрдЯрд░рдордзреНрдпреЗ рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддреИрдирд╛рдд рдХрд░рдгреНрдпрд╛рдХрдбреЗ рд▓рдХреНрд╖ рджреЗрдК.

рд╣рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрди, рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдХрдбреЗ рд╣рд│реВрд╣рд│реВ рджреГрд╖реНрдЯреАрдХреЛрди рдареЗрд╡реВрди, рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдордзреНрдпреЗ рд╕рд░реНрд╡рдХрд╛рд╣реА рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░рд╛рд╕рд░реА рд╡реНрдпрдХреНрддреАрд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реЗ рдХрд╛рдп рдШрдбрдд рдЖрд╣реЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рдЪреА рдЦреЛрд▓реА рджреЗрдИрд▓. Kubernetes рд╣реЗ рдирдХреНрдХреАрдЪ рдПрдХ рд╕рд╛рдзреЗ рддрдВрддреНрд░рдЬреНрдЮрд╛рди рдЖрд╣реЗ, рдЬреНрдпрд╛рдВрдирд╛ рддреЗ рд╢рд┐рдХрд╛рдпрдЪреЗ рдЖрд╣реЗ рддреНрдпрд╛рдВрдирд╛ рддреЗ рдХреБрдареЗ рдЖрдгрд┐ рдХрд╕реЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ рд╣реЗ рдорд╛рд╣рд┐рдд рдЕрд╕реЗрд▓.

рдЖрддрд╛, рдЖрдгрдЦреА рдЕрдбрдЪрдг рди рдареЗрд╡рддрд╛, рдЪрд▓рд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд░реВрдпрд╛ рдЖрдгрд┐ рдЖрдкрдг рдЬреНрдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгрд╛рд░ рдЖрд╣реЛрдд рддреНрдпрд╛рдмрджреНрджрд▓ рдмреЛрд▓реВрдпрд╛.

рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ

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

рдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪреА рдореБрдЦреНрдп рд╡рд┐рдВрдбреЛ рдЕрд╢реА рджрд┐рд╕рддреЗ.

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

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

  • SA-Frontend рдПрдХ Nginx рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░ рдЖрд╣реЗ рдЬреЛ рд╕реНрдЯреЕрдЯрд┐рдХ рд░рд┐рдНрдХреНрдЯ рдлрд╛рдЗрд▓реНрд╕ рд╕рд░реНрд╡реНрд╣ рдХрд░рддреЛ.
  • SA-WebApp рд╣реЗ Java рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рд╡реЗрдм рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд╣реЗ рдЬреЗ рдлреНрд░рдВрдЯрдПрдВрдбрдЪреНрдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛рдВрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ.
  • рдПрд╕рдП-рд▓реЙрдЬрд┐рдХ рд╣рд╛ рдкрд╛рдпрдерди рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд╣реЗ рдЬреЛ рдордЬрдХреВрд░рд╛рд╡рд░ рднрд╛рд╡рдирд╛рдВрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЛ.

рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрдгреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ рдХреА рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕ рдЕрд▓рдЧрд╛рд╡рдордзреНрдпреЗ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдирд╛рд╣реАрдд. рддреЗ "рдЬрдмрд╛рдмрджрд╛рд░рд╛рдВрдЪреЗ рдкреГрдердХреНрдХрд░рдг" рд╣реА рдХрд▓реНрдкрдирд╛ рдЕрдВрдорд▓рд╛рдд рдЖрдгрддрд╛рдд, рдкрд░рдВрддреБ рддреНрдпрд╛рдЪ рд╡реЗрд│реА рддреНрдпрд╛рдВрдирд╛ рдПрдХрдореЗрдХрд╛рдВрд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рддреЗ.

рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднрд╛рдЧ 1: рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕, рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕ рдЖрдгрд┐ рдХрдВрдЯреЗрдирд░реНрд╕
рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдордзреНрдпреЗ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣рд┐рдд рд╣реЛрддреЛ

рд╡рд░реАрд▓ рдЖрдХреГрддреАрдордзреНрдпреЗ, рддреБрдореНрд╣реА рд╕рд┐рд╕реНрдЯреАрдордЪреЗ рдХреНрд░рдорд╛рдВрдХрд┐рдд рдЯрдкреНрдкреЗ рдкрд╛рд╣реВ рд╢рдХрддрд╛, рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдирдордзреАрд▓ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣рд╛рдЪреЗ рд╡рд░реНрдгрди рдХрд░реВрди. рдЪрд▓рд╛ рддреНрдпрд╛рдВрдирд╛ рдкрд╛рд╣реВрдпрд╛:

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

рдпрд╛ рд╕рд░реНрд╡ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рд╕рд╛рдареА рдХреЛрдб рдЖрдврд│реВ рд╢рдХрддреЛ рдпреЗрдереЗ. рдореА рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ рдХреА рдЖрдкрдг рдЖрддреНрддрд╛рдЪ рд╣реЗ рднрд╛рдВрдбрд╛рд░ рд╕реНрд╡рддрдГрд╕рд╛рдареА рдХреЙрдкреА рдХрд░рд╛, рдХрд╛рд░рдг рдЖрдкрд▓реНрдпрд╛рдкреБрдвреЗ рдмрд░реЗрдЪ рдордиреЛрд░рдВрдЬрдХ рдкреНрд░рдпреЛрдЧ рдЖрд╣реЗрдд.

рддреБрдордЪреНрдпрд╛ рд╕реНрдерд╛рдирд┐рдХ рдорд╢реАрдирд╡рд░ рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕-рдЖрдзрд╛рд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЪрд╛рд▓рд╡рдгреЗ

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

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

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

npm install

рдлреЛрд▓реНрдбрд░рдордзреНрдпреЗ рд╣реА рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡реВрди node_modules рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪреА рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рд▓реЛрдб рдХреЗрд▓реА рдЬрд╛рдИрд▓, рдЬреНрдпрд╛рдЪреНрдпрд╛ рдиреЛрдВрджреА рдлрд╛рдЗрд▓рдордзреНрдпреЗ рдЖрд╣реЗрдд package.json. рдПрдХрд╛рдЪ рдлреЛрд▓реНрдбрд░рдордзреНрдпреЗ рдЕрд╡рд▓рдВрдмрди рдбрд╛рдЙрдирд▓реЛрдб рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░, рдЦрд╛рд▓реАрд▓ рдЖрджреЗрд╢ рдЪрд╛рд▓рд╡рд╛:

npm start

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

тЦНрдЙрддреНрдкрд╛рджрдирд╛рд╕рд╛рдареА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрд░реНрдЬ рддрдпрд╛рд░ рдХрд░рдгреЗ

рд░рд┐рдЕреЕрдХреНрдЯ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЙрджреНрджреЗрд╢рд╛рдиреЗ, рдЖрдореНрд╣рд╛рд▓рд╛ рддреЗ рд╕реНрдЯреЕрдЯрд┐рдХ рдлрд╛рдЗрд▓реНрд╕рдЪреНрдпрд╛ рд╕реЗрдЯрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓ рдЖрдгрд┐ рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░ рд╡рд╛рдкрд░реВрди рдХреНрд▓рд╛рдпрдВрдЯрд▓рд╛ рд╕рд░реНрд╡реНрд╣ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓.

React рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдкреБрдиреНрд╣рд╛ рдЯрд░реНрдорд┐рдирд▓ рд╡рд╛рдкрд░реВрди, рдлреЛрд▓реНрдбрд░рд╡рд░ рдиреЗрд╡реНрд╣рд┐рдЧреЗрдЯ рдХрд░рд╛ 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. рддреБрдореНрд╣рд╛рд▓рд╛ React рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рдкреЗрдЬ рджрд┐рд╕реЗрд▓.

рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднрд╛рдЧ 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.

тЦН Java рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЪрд╛рд▓рд╡рдгреЗ

рдлреЛрд▓реНрдбрд░рд╡рд░ рдЬрд╛ 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: рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕, рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕ рдЖрдгрд┐ рдХрдВрдЯреЗрдирд░реНрд╕
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддрдпрд╛рд░ рдХрд░рдгрд╛рд░реНтАНрдпрд╛ рд╕рд░реНрд╡ рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕ рдХрд╛рд░реНрдпрд░рдд рдХреНрд░рдорд╛рдиреЗ рдЖрдгрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд

рдЖрддрд╛, рддреБрдореНрд╣реА рд╕реБрд░реВ рдареЗрд╡рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рддреБрдордЪрд╛ React рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдмреНрд░рд╛рдЙрдЭрд░рдордзреНрдпреЗ рдЙрдШрдбрд╛ рдЖрдгрд┐ рддреНрдпрд╛рд╕реЛрдмрдд рдХрд╛рд╣реА рд╡рд╛рдХреНрдп рдкрд╛рд░реНрд╕ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рд╛. рд╕рд░реНрд╡рдХрд╛рд╣реА рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдХреЗрд▓реЗ рдЕрд╕рд▓реНрдпрд╛рд╕ - рдмрдЯрдг рджрд╛рдмрд▓реНрдпрд╛рдирдВрддрд░ 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.

рдЦрд╛рд▓реА рдЖрдкрдг рдХрдВрдЯреЗрдирд░ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрдгрд┐ рдЖрдкрд▓реНрдпрд╛ рд╕реНрдерд╛рдирд┐рдХ рд╕рдВрдЧрдгрдХрд╛рд╡рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡рд░реАрд▓ рдЪрд░рдгрд╛рдВрдордзреАрд▓ рд╕рдорд╛рдВрддрд░ рдкрд╛рд╣реВ рд╢рдХрддрд╛.

тЦН SA-Frontend рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рд╕рд╛рдареА рдбреЙрдХрд░рдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХрд░рдгреЗ

рдЬреНрдпрд╛ рд╕реВрдЪрдирд╛ рдпрд╛рдд рдЕрд╕рддреАрд▓ 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. рдбреЙрдХрд░ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирдЪрд╛ IP рдкрддреНрддрд╛ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА рдХрдорд╛рдВрдб рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛ 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. рдЖрддрд╛ рдкреНрд░рддрд┐рдорд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рдХрд╛рд╣реА рд╕реЗрдХрдВрдж рд▓рд╛рдЧрддреАрд▓.

рдЖрддрд╛ Java рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд╕рд╛рдареА рдЗрдореЗрдЬрд╡рд░ рдХрд╛рдо рдХрд░реВрдпрд╛.

тЦН Java рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рд╕рд╛рдареА рдХрдВрдЯреЗрдирд░ рдкреНрд░рддрд┐рдорд╛ рддрдпрд╛рд░ рдХрд░рдгреЗ

рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ, рдХрдВрдЯреЗрдирд░ рдкреНрд░рддрд┐рдорд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рдЬреЗ рдХрд╛рд╣реА рдорд╛рд╣рд┐рдд рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рддреЗ рддреБрдореНрд╣реА рдЖрдзреАрдЪ рд╢рд┐рдХрд▓реЗ рдЖрд╣реЗ. рдореНрд╣рдгреВрдирдЪ рд╣рд╛ рд╡рд┐рднрд╛рдЧ рдЦреВрдкрдЪ рд▓рд╣рд╛рди рдЕрд╕реЗрд▓.

рдлрд╛рдИрд▓ рдЙрдШрдбрд╛ DockerfileрдЬреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлреЛрд▓реНрдбрд░рдордзреНрдпреЗ рдЖрд╣реЗ sa-webapp. рдЬрд░ рддреБрдореНрд╣реА рдпрд╛ рдлрд╛рдИрд▓рдЪрд╛ рдордЬрдХреВрд░ рд╡рд╛рдЪрд▓рд╛, рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛рдд рдлрдХреНрдд рджреЛрди рдирд╡реАрди рдмрд╛рдВрдзрдХрд╛рдореЗ рджрд┐рд╕рддреАрд▓, рдЬреНрдпрд╛рдЪреА рд╕реБрд░реБрд╡рд╛рдд рдХреАрд╡рд░реНрдбрдкрд╛рд╕реВрди рд╣реЛрдИрд▓ ENV ╨╕ EXPOSE:

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

рдХреАрд╡рд░реНрдб ENV рддреБрдореНрд╣рд╛рд▓рд╛ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ рдкрд░реНрдпрд╛рд╡рд░рдгреАрдп рдЪрд▓ рдШреЛрд╖рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ. рд╡рд┐рд╢реЗрд╖рддрдГ, рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рддреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдордЬрдХреВрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгрд╛рд░реНтАНрдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪреНрдпрд╛ API рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА URL рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ.

рдХреАрд╡рд░реНрдб 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

рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ рдХрд┐рдВрд╡рд╛ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирдЪрд╛ IP рдкрддреНрддрд╛ рдХрд╕рд╛ рд╢реЛрдзрд╛рдпрдЪрд╛ рд╣реЗ рдЬрд╛рдгреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА, рдлрд╛рдЗрд▓ рдкрд╣рд╛ рдорд▓рд╛ рд╡рд╛рдЪрд╛.

рдЪрд▓рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрдВрдЯреЗрдирд░ рд▓рд╛рдБрдЪ рдХрд░реВрдпрд╛ sa-frontend:

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

рдЖрддрд╛ рдмреНрд░рд╛рдЙрдЭрд░рдордзреАрд▓ рдкрддреНрддреНрдпрд╛рд╡рд░ рдЬрд╛рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡рдХрд╛рд╣реА рддрдпрд╛рд░ рдЖрд╣реЗ localhost:80 рдЖрдгрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╛рдкрд░реВрди рдкрд╣рд╛.

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

рдЖрдордЪрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдпрдЧреНрд░рд╛рдо рдЖрддрд╛ рдЕрд╕рд╛ рджрд┐рд╕рдд рдЖрд╣реЗ.

рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднрд╛рдЧ 1: рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕, рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕ рдЖрдгрд┐ рдХрдВрдЯреЗрдирд░реНрд╕
рдорд╛рдпрдХреНрд░реЛ рд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕ рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ рдЪрд╛рд▓рддрд╛рдд

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

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

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛