ááťá˝ááşáŻááşáááŻáˇáááąáŹááşá¸áááŻááťááşáĄá Habr áááş ááááŻááťááşáá áşááŻáááşááŽá¸áá˛áˇáááşá ááźáŽá¸ááąáŹáˇ áááááŻáśá¸ ááŻááşááąááŹááᯠááťáąáááşááŤáááşá á áŹáááşá¸áá˝ááşá¸ááŤá
Kubernetes áááş áá˝ááşáá°áááşá ááŹááŽáĄáááşá¸áááşáĄáá˝ááşá¸ áááşáá°áááᯠá¤áááşá¸áááŹááᯠááťá˝ááşá¸ááťááşáááŻááşááąáŹáşáááşá¸ á¤ááąááá˝ááş áĄááŻááşááŻááşáááş áááşááťáŹá¸áááş ááťá˝ááşáŻááşáĄáŹá¸ áĄáááşááźáąáŹááˇáş áá˝áąáĄááźáąáŹááşáĄááťáŹá¸ááąá¸ááźááááşá¸á
Kubernetes áááş áĄáá˝ááşááťááşááźááşá
á˝áŹ ááąáˇááŹáááŻááşáááşáᯠáááşááśáááážáááŤáá áááşáááŻááşáááŻááş ááźááŻá¸á
áŹá¸ááŻááşááąáŹááşáááş áĄááźáśááźáŻáĄááşááŤáááşá áááŻáááŻáááşáážáŹá á¤áá
ášá
ááşá¸ááᯠááťá˝ááşá¸ááťááşááźáŽá¸ Kubernetes áĄá
áŻáĄááąá¸áážá microservices ááťáŹá¸ááᯠáĄááźáąááśá áĄáááŽááąá¸áážááşá¸áá
áşááŻááᯠáááş run áááŻááşáááşááźá
áşáááşá ááťá˝ááşáŻááşáááş á¤ááąááŹáá˝ááş ááťá˝ááşáŻááşáĄááŻáśá¸ááźáŻáááˇáş áá°ááŽááąáŹáááşá¸á
áá
áşáá˝ááş ááŤáážáááąáŹááźáąáŹááˇáş ááťá˝ááşáŻááşáááş ááťá˝ááşáŻááşáááŻáˇáááąáŹááşáááşááťáŹá¸áĄáŹá¸ Kubernetes áážááˇáş áááşáááŻáˇáĄááŻááşááŻááşááááşáááşá¸á á¤áááşá¸áá˝ážááşááťááşáááş áĄááźáŹá¸áá°ááťáŹá¸áážááˇáş áááşáááŻáˇáá˝áŹááźáŹá¸ááááşá¸á ááááşááąáŹáˇ áĄááťáŹá¸ááźáŽá¸áá˛á áááŻáˇááźáąáŹááˇáşá á¤áá
ášá
ááşá¸ááťáŹá¸áĄááťáŹá¸á
áŻáááş Kubernetes ááááąáŹáááŹá¸ááťáŹá¸áážááˇáş kubectl command ááĄááşášááŤáááşááťáŹá¸ááźá
áşááąáŹ áááŻá¸áážááşá¸ááąáŹáĄááŹááťáŹá¸ááᯠáážááşá¸áááşá¸ááťááşááźááˇáş á
áááşáááşá á¤ááąáŹááşá¸ááŤá¸ááťáŹá¸áááąá¸ááŹá¸áá°ááťáŹá¸áááş áááşá¸áááŻáˇáá
áŹáááşáá°áááş áĄáááŽááąá¸áážááşá¸áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻá áááŻááşááááŻáááşááąáŹááşáážáŻááťáŹá¸áážááˇáş Docker containers áááŻáˇáážááˇáş áááşá¸áážáŽá¸áááşáᯠáá°ááááşá ááŤáááŻáˇ áááźáŹá¸áááşá¸ááᯠáá˝áŹá¸áááşá ááááŚá¸á
á˝áŹá áá˝ááşááťá°ááŹáážá áááŻááşááááŻááŹá¸áá
áşááťáŹá¸ááᯠáĄááźáąááśá áĄááşáááŽááąá¸áážááşá¸áá
áşááŻáĄáŹá¸ áááşáááŻáˇááŻááşááąáŹááşááááşááᯠáá˝áąá¸áá˝áąá¸ááźááŤá
ááŻáˇá áááŻáˇááąáŹááş microservice áá
áşááŻá
áŽáĄáá˝ááş áá˝ááşááááşááŹááŻáśááťáŹá¸ áááşááąáŹááşááźááşá¸ááᯠááźááˇáşáážáŻááŤáááşá áááşá¸ááąáŹááşá ááťá˝ááşáŻááşáááŻáˇáááş Kubernetes áážááˇáş áááşá¸áážáŽá¸ááźáŽá¸ Kubernetes ááž á
áŽááśáááˇáşáá˝á˛áááˇáş áĄá
áŻáĄááąá¸áážá microservices ááťáŹá¸ááᯠáĄááźáąááśá áĄáááŽááąá¸áážááşá¸áá
áşááŻá ááźááˇáşááťááşáážáŻááᯠáááŻááşá¸ááźáŹá¸á
áááşááźáŹááŤáááşá
á¤ááťááşá¸áááşáážáŻáááş Kubernetes ááŽáááŻáˇ áááźááşá¸ááźááşá¸ááťááşá¸áááşááźááşá¸ááźááˇáşá Kubernetes áá˝ááş áĄááŹáĄáŹá¸ááŻáśá¸ááᯠáááŻá¸áážááşá¸á á˝áŹá áŽá ááşááŹá¸ááŻáśááᯠááŹá¸áááşáááşáĄáá˝ááş ááŹáááşáá°áááŻáĄááşááąáááˇáşáĄááŹááťáŹá¸ááᯠááŹá¸áááşáááąáŹááąáŤááşáážáŻáááşáá˛áážáŻááᯠááąá¸ááŤááááˇáşáááşá Kubernetes áááş áááşá¸ááᯠááťá˝ááşá¸ááťááşáááŻáá°áááŻááşá¸ áááşáááˇáşááąááŹáážááˇáş áááşáááŻáˇáĄááŻáśá¸ááźáŻáááşááᯠáááááŻááşá áąáááˇáş áááŻá¸áážááşá¸ááąáŹáááşá¸áááŹáá áşááŻááźá áşááźáąáŹááşá¸ ááąááťáŹááŤáááşá
áᲠááąáŹááşáááşááá˛áá˝á˛áá˛á ááŤáááŻáˇáá˛áˇáĄááŻááşááŻááşáááˇáş application áĄááźáąáŹááşá¸ááźáąáŹááźááĄáąáŹááşá
á ááşá¸áááşáĄááşááş
ááťá˝ááşáŻááşáááŻáˇááĄáááŽááąá¸áážááşá¸áááş ááŻááşááąáŹááşááťááşáá áşááŻáᏠááŻááşááąáŹááşáááşááźá áşáááşá á áŹááźáąáŹááşá¸áá˝á˛ááźááşá¸á áááşááźáŹááźááşá¸ááááááŹááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻá áááˇáşáá˝ááşá¸ááá˛áˇáááŻáˇá áááşá¸áááş á áŹááźáąáŹááşá¸áá áşááźáąáŹááşá¸ááᯠáĄááŻáśá¸ááźáŻááŹá áááşá¸áááş ááŤááťáááśá áŹá¸ááťááşáááŻááşáᏠáá˝á˛ááźááşá¸á áááşááźáŹáážáŻááᯠááŻááşááąáŹááşááźáŽá¸ áĄááťááŻáˇáĄááŹááášááŻáá áşááŻááśáááŻáˇ ááŤááťááąá¸ááŹá¸áá°á á áááşááśá áŹá¸áážáŻáááŻááşáᏠáááąáŹááŹá¸ááᯠáĄáá˛ááźááşáážáŻááá°áááşá
á¤áááşáážáŹ á¤áĄáááŽááąá¸áážááşá¸á áááşááááşá¸áááŻá¸ááŻáśá áśááźá áşáááşá

á
áááşáááąáŹááŹá¸ áááşá¸á
á
áşááźááşá¸ áááşáĄááşáááŽááąá¸áážááşá¸
áááşá¸áááŹáááŻááşááŹáážáŻááąáŹááˇáşáážááźááˇáşááťážááş áĄáááŽááąá¸áážááşá¸áá˝ááş ááŻááşáááşá¸ááŹáááşáĄá áŻáśáĄáááşááᯠááźáąáážááşá¸ááąá¸áááˇáş microservice ááŻáśá¸ááŻá áŽááŤáááşááŤáááşá
- SA-Frontend áááş React static áááŻááşááťáŹá¸ááᯠááąáŹááşáá˝ááşááąá¸áááˇáş Nginx áááşááŹááŹáá áşááŻááźá áşáááşá
- SA-WebApp áááş áážáąáˇáááşá¸ááž ááąáŹááşá¸áááŻááťááşááťáŹá¸ááᯠáááŻááşáá˝ááşáááˇáş Java áá˝ááş ááąá¸ááŹá¸ááŹá¸ááąáŹ áááşáĄááşáááŽááąá¸áážááşá¸áá áşááŻááźá áşáááşá
- SA-Logic áááş á áŹááŹá¸ááśá áŹá¸ááťááşááᯠáááŻááşá¸ááźáŹá¸á áááşááźáŹáážáŻááŻááşááąáŹááşáááˇáş Python áĄáááŽááąá¸áážááşá¸áá áşááŻááźá áşáááşá
ááŽá¸áááˇáşáá˝á˛ááŹá¸ááŹáá˝ááş microservices ááťáŹá¸ááážááááşááᯠáááááźáŻáááş áĄááąá¸ááźáŽá¸ááŤáááşá áá°áááŻáˇáááş "ááŹáááşáá˝á˛ááąááźááşá¸" áá áááşáá°á¸áááŻáĄááąáŹááşáĄáááşááąáŹáşááąáŹáşáááşá¸á áá áşááťáááşáááşá¸áá˝ááşá áĄááťááşá¸ááťááşá¸áĄááźááşáĄáážááşáááşááśáááşáááŻáĄááşáááşá

ááťážáąáŹááşáá˝ážáŹáá˝ááşááąááŹá
áŽá¸áááşá¸áááşá
áĄáááşááąáŹáşááźá፠ááŻáśáá˝ááşá áááşáááş áĄáááŽááąá¸áážááşá¸áĄáá˝ááşá¸ ááąááŹá áŽá¸áááşá¸áážáŻááťáŹá¸ááᯠáááŻááşááąáŹáşááŹá¸áááˇáş á áá áşá ááśááŤááşáĄáááˇáşááťáŹá¸ááᯠáááşáá˝áąáˇááźááşáááŻááşááŤáááşá áá°áááŻáˇááᯠááźááŻáá˝á˛áááŻááşááĄáąáŹááşá
- áááąáŹááşááŹáááş ááŹááŹááž áááŻááşáá
áşáᯠááąáŹááşá¸áááŻáááşá
index.html(áááŻáĄááŹá React áĄááşááşáááşááąáˇááťáşááᯠáááşáááş)á - áĄááŻáśá¸ááźáŻáá°áááş áĄáááŽááąá¸áážááşá¸áážááˇáş áĄááźááşáĄáážááş ááŻáśáˇááźááşáááŻááşááźáŽá¸á áááşá¸áááş Spring ááᯠáĄááźáąááśá áááşáĄááşáááŽááąá¸áážááşá¸áááŻáˇ ááąáŤáşáááŻáážáŻááᯠááźá áşá áąáááşá
- áááşáĄááşáááŽááąá¸áážááşá¸áááş á áŹááŹá¸áááŻáá˝á˛ááźááşá¸á áááşááźáŹáááş ááąáŹááşá¸áááŻááťááşááᯠPython áĄáááŽááąá¸áážááşá¸áááŻáˇ ááąá¸áááŻáˇáááşá
- Python áĄáááŽááąá¸áážááşá¸áááş á áŹááŹá¸á ááśá áŹá¸ááťááşááᯠáááŻááşá¸ááźáŹá¸á áááşááźáŹááźáŽá¸ ááąáŹááşá¸áááŻááťááşááᯠááŻáśáˇááźááşáááˇáşáĄááąááźááˇáş ááááşááᯠááźááşááąá¸áááşá
- Spring áĄáááŽááąá¸áážááşá¸áááş React áĄáááŽááąá¸áážááşá¸ááśáááŻáˇ ááŻáśáˇááźááşáážáŻáá áşáᯠááąá¸áááŻáˇáááş (áááŻáˇááąáŹááşá áááşá¸áááş áá˝á˛ááźááşá¸á áááşááźáŹááŹá¸ááąáŹ á áŹááŹá¸áááááşááᯠáĄááŻáśá¸ááźáŻáá°ááś ááźááááş)á
á¤áĄáááŽááąá¸áážááşá¸áĄáŹá¸ááŻáśá¸áĄáá˝ááş ááŻááşááᯠáá˝áąáˇáááŻááşáááşá . ááťá˝ááşáŻááşáááŻáˇáážáąáˇáá˝ááş áááşá¸áážááˇáşá áááşáááşá áŹá¸á ááŹááąáŹááşá¸ááąáŹ á ááşá¸áááşáážáŻááťáŹá¸ááťáŹá¸á á˝áŹáážáááąáŹááźáąáŹááˇáş ᤠrepository ááᯠáááŻáááşáááŻááşáááŻááşáá°á¸áá°áááş áĄááźáśááźáŻáááŻááŤáááşá
á ááşáá˝ááşá¸áážá áááŻááşááááŻáááşááąáŹááşáážáŻááťáŹá¸ááᯠáĄááźáąááśá áĄááşááşáá áşááŻáĄáŹá¸ ááŻááşááąáŹááşááźááşá¸á
áĄááşáááŽááąá¸áážááşá¸áĄááŻááşááŻááşáááşáĄáá˝ááşá ááťá˝ááşáŻááşáááŻáˇáááş áááŻááşááááŻáááşááąáŹááşáážáŻááŻáśá¸ááŻááŻáśá¸ááᯠá áááşáááş áááŻáĄááşáááşá áááşá¸áááŻáˇáá˛ááž áĄáážáááŻáśá¸ - áážáąáˇááŻáśá¸ áĄááşááşááźááˇáş á áááşááźááŤá ááŻáˇá
â ááąááá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáĄáá˝ááş React ááᯠá áá áşáááˇáşáá˝ááşá¸ááźááşá¸á
React áĄáááŽááąá¸áážááşá¸ááᯠrun áááşáĄáá˝ááşá áááşáááş Node.js framework áážááˇáş NPM ááᯠáááˇáşáá˝ááşááťá°ááŹááąáŤáşáá˝ááş áááˇáşáá˝ááşá¸áááşáááŻáĄááşáááşá áááşá¤áĄááŹáĄáŹá¸ááŻáśá¸áááŻáááˇáşáá˝ááşá¸ááźáŽá¸ááąáŹááşá áááąáŹááťááşáááŻááşáá˝á˛áááŻáˇ terminal áááŻáĄááŻáśá¸ááźáŻááŤá sa-frontend áĄáąáŹááşá፠command ááᯠrun ááŤá
npm install áááŻááşáá˝á˛áá˝ááş á¤áĄááááˇáşááᯠáĄááąáŹááşáĄáááşááąáŹáşááźááşá¸ááźááˇáş node_modules React áĄáááŽááąá¸áážááşá¸ááážáŽáááŻáážáŻááťáŹá¸á áááŻááşáá˝ááşááŤáážáááąáŹáážááşáááşá¸ááťáŹá¸áááŻáááşááááˇáşáááşá package.json. áá°ááŽááąáŹáááŻááşáá˝á˛áážááážáŽáááŻáĄáŹá¸ááąáŤááşá¸ááŻááşááŻááşááźáŽá¸ááąáŹááşá áĄáąáŹááşá፠command ááᯠrun ááŤá
npm start ááŤááŤáá˛á React áĄááşááşáááş áááŻáááşáááşááąááźáŽá¸ áááąáŹááşááŹááááşá
áŹáááŻáˇ áááşá¸áá˝ážááşááźááşá¸ááźááˇáş áááşááąáŹááşááźááˇáşáážáŻáááŻááşááŤáááşá localhost:3000. áá°áááŻááşáá˝ááş áá
áşááŻááŻááᯠáááşááźáąáŹááşá¸áá˛áááŻááşáááşá áááąáŹááşááŹáá˝ááş á¤ááźáąáŹááşá¸áá˛áážáŻááťáŹá¸á áĄááťááŻá¸áááşááąáŹááşáážáŻááᯠáááşááťááşááťááşá¸ááźááşáááŤáááşá modules ááťáŹá¸á "hot" ááŻááąáŤáşááąáŹáĄá
áŹá¸áááŻá¸áážáŻááźáąáŹááˇáşáááşá¸áááşááźá
áşáááŻááşáááşá áááşá¸ááźáąáŹááˇáş áážáąáˇááŻáśá¸áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáááş áááŻá¸áážááşá¸ááźáŽá¸ ááťáąáŹáşá
ááŹááąáŹááşá¸ááąáŹ áĄáá˝áąáˇáĄááźáŻáśáĄááźá
áş ááźáąáŹááşá¸áá˛áá˝áŹá¸ááŤáááşá
â ááŻááşááŻááşáááşáĄáá˝ááş React áĄááşááşááᯠááźááşáááşááźááşá¸á
React áĄááşááşááᯠáĄáážááşááááşáĄááŻáśá¸ááźáŻáááş áááşáá˝ááşááťááşáĄáá˝ááşá áááşá¸ááᯠstatic files áĄá áŻáá áşááŻáĄááźá áşáááŻáˇ ááźáąáŹááşá¸áá˛ááźáŽá¸ áááşááŹááŹááᯠáĄááŻáśá¸ááźáŻá ááŻáśá¸á á˝á˛áá°ááťáŹá¸ááś áááşááąáŹááşáážáŻááąá¸áááş áááŻáĄááşááŤáááşá
React áĄááşááşááᯠáááşááąáŹááşáááşá terminal ááᯠáĄááŻáśá¸ááźáŻá ááąáŹááşáá
áşááźáááşá áááŻááşáá˝á˛áááŻáˇ áá˝áŹá¸ááŤá sa-frontend áĄáąáŹááşá፠command ááᯠrun ááŤá
npm run build áááşá¸áááş áááąáŹááťááşáááŻááşáá˝á˛áá˝ááş áááşá¸áá˝ážááşáá
áşáᯠáááşááŽá¸ááąá¸ááááˇáşáááşá build. áááşá¸áá˝ááş React áĄáááŽááąá¸áážááşá¸ áĄááŻááşááŻááşáááşáĄáá˝ááş áááŻáĄááşááąáŹ static áááŻááşááťáŹá¸ ááŤáááşáááşááźá
áşáááşá
â Nginx ááźááˇáş áááşááźáááşááąáŹáááŻááşááťáŹá¸ááᯠáááşááąáŹááşáážáŻááąá¸ááźááşá¸
ááááŚá¸á
á˝áŹáááşáááş Nginx áááşááŹááŹáááŻáááˇáşáá˝ááşá¸ááźáŽá¸áááşáááşáááşáááŻáĄááşáááşá áááşá¸ááᯠááąáŤááşá¸ááŻááşááŻááşááźáŽá¸ áááˇáşáá˝ááşá¸ááźááşá¸áážááˇáş ááŻááşááąáŹááşááźááşá¸áĄáá˝ááş áááşá¸áá˝ážááşááťááşááťáŹá¸ááᯠáááşáážáŹáá˝áąáááŻááşáááşá áááŻáˇááąáŹááş áááŻááşáá˝á˛á áĄááźáąáŹááşá¸áĄááŹááťáŹá¸ááᯠááąáŹáşááŽáá°á¸áááş áááŻáĄááşáááşá sa-frontend/build folder áááŻáˇ [your_nginx_installation_dir]/html.
á¤ááťááşá¸áááşáážáŻááźááˇáş React áĄáááŽááąá¸áážááşá¸á á
ááşá¸ááąá¸áá˝á˛áĄáá˝ááşá¸ áááŻááşááŻááşááąá¸áááşá index.html áážáŹ ááážááááŻááşááŤáááşá [your_nginx_installation_dir]/html/index.html. áááşá¸áááş ááŻáśáážááşáĄáŹá¸ááźááˇáş Nginx ááŹááŹááž áááşá¸áááŻáááşááąáŹááşáááˇáşáĄá፠ááźáżááŹááźá
áşá
áąááąáŹáááŻááşááźá
áşáááşá ááááşáááşá¸áá
áşááŻáá˝ááş ááŹá¸ááąáŹááşáááş ááŹááŹááᯠá
áŽá
ááşáááşáážááşááŹá¸áááşá 80áááŻáˇááąáŹáş áááŻááşááᯠáááşá¸ááźááşááźááşá¸ááźááˇáş áááşáĄáááŻáážááááˇáşáĄáááŻááşá¸ áááşá¸ááᯠá
áááşááźááŻááşááźááşáááşáááŻááşáááşá [your_nginx_installation_dir]/conf/nginx.conf.
áááşááááąáŹááşááŹáááŻáá˝ááˇáşááźáŽá¸áá˝áŹá¸ááŤá localhost:80. React áĄááşááşá
áŹááťááşáážáŹááᯠáááşáá˝áąáˇáááŤáááşá

Nginx ááŹááŹááž áááşááąáŹááşáážáŻááąá¸ááąáŹ ááŻáśáˇááźááşáĄááşááş
áĄáááşá áááşáááş áááŻáĄáá˝ááşáá˝ááş áá
áşááŻááŻáááˇáşááŤá Type your sentence áááŻááşáááŻáážáááşááŤá Send - ááŹáážááźá
áşáááŹáá°á¸á ááŤááąáááˇáş console áááŻááźááˇáşáááş error messages áá˝áąááᯠáĄá˛ááŽáážáŹáá˝áąáˇáááŻááşááŤáááşá á¤áĄáážáŹá¸ááťáŹá¸ááźá
áşáá˝áŹá¸áááˇáşááąááŹááᯠáĄáááĄááťááŹá¸áááşáááşáĄáá˝ááş áĄáááŽááąá¸áážááşá¸ááŻááşááᯠáá˝á˛ááźááşá¸á
áááşááźáŹááźááˇáşááźááŤá
ááŻáˇá
â áážáąáˇááŻáśá¸áĄáááŽááąá¸áážááşá¸áááŻááşááᯠáá˝á˛ááźááşá¸á áááşááźáŹááźááşá¸á
áááŻááşáá˛áˇ ááŻááşááᯠááźááˇáşáááŻááşááŤá App.jsáááŻááşááᯠáážáááşááŹááᯠáá˝áąáˇáááŻááşáááşá Send method áááŻááąáŤáşáááşá 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. POST ááąáŹááşá¸áááŻáážáŻááźáŻááŻááşááŹá¸áááˇáş URLá á¤ááááşá áŹáááş áááŻáááŻáˇááąáŹááąáŹááşá¸áááŻáážáŻááťáŹá¸ááᯠá áąáŹááˇáşáááŻááşá¸ááąáááˇáş áĄááşááşáá áşááŻáᯠáá°áááŤáááşá
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/sentimentSpring ááᯠáĄááźáąááśá áááşáĄááşáááŽááąá¸áážááşá¸ááᯠááŻááşááąáŹááşáááş áááŻáĄááşáááşá

POST ááąáŹááşá¸áááŻááťááşááᯠáááşááśáááŻááşááąáŹ Spring application áá
áşáᯠáááŻáĄááşááŤáááşá
â Spring áááŻáĄááźáąááśá áááşáĄááşáááŽááąá¸áážááşá¸ááᯠá áá áşáááˇáşáá˝ááşá¸ááźááşá¸á
Spring áĄáááŽááąá¸áážááşá¸ááᯠáĄááŻáśá¸ááźáŻáááşáĄáá˝ááşá áááşáááş JDK8 áážááˇáş Maven áážááˇáş áážááşáááşá á˝áŹ ááźááşáááşáááşáážááşááŹá¸ááąáŹ áááşáááşá¸ááťááş ááááşá¸áážááşááťáŹá¸ áááŻáĄááşááŤáááşá á¤áĄááŹáĄáŹá¸ááŻáśá¸ááᯠáááşáááˇáşáá˝ááşá¸ááźáŽá¸ááąáŹááşá áááşáááş ááťá˝ááşáŻááşáááŻáˇááááąáŹááťááşáá˝ááş áááşáááşááŻááşááąáŹááşáááŻááşááŤáááşá
â áĄáááŽááąá¸áážááşá¸ááᯠjar áááŻááşáá áşááŻáĄááźá áş ááŻááşáááŻá¸ááźááşá¸á
terminal ááᯠáĄááŻáśá¸ááźáŻá áááŻááşáá˝á˛áááŻáˇ áááşá¸áá˝ážááşááŤá sa-webapp áĄáąáŹááşá፠command áááŻáááŻááşáááˇáşááŤá
mvn install folder áá˛áážáŹ áᎠcommand ááᯠexecute ááŻááşááźáŽá¸ááąáŹááş sa-webapp áááşá¸áá˝ážááşáááŻáááşááŽá¸ááááˇáşáááşá target. á¤ááąááŹáá˝ááş Java áĄáááŽááąá¸áážááşá¸áááş áááŻááşááźááˇáşáááŻááşá
áŹá¸ááźáŻááąáŹ jar áááŻááşáá
áşááŻáá˝ááş ááŻááşáááŻá¸ááŹá¸ááąáŹááąááŹááááşáážááááşááźá
áşáááşá sentiment-analysis-web-0.0.1-SNAPSHOT.jar.
â Java áĄáááŽááąá¸áážááşá¸ááᯠá áááşááźááşá¸á
áááŻááşáá˝á˛áááŻáˇáá˝áŹá¸á፠target áĄáąáŹááşá፠command ááźááˇáş application ááᯠrun ááŤá
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jará¤áĄááááˇáşááᯠááŻááşááąáŹááşááąá ááş áĄáážáŹá¸áĄáá˝ááşá¸áá áşáᯠááźá áşááąáŤáşááááˇáşáááşá áááşá¸áááŻá áááşááźáŻááźááşáááşáĄáá˝ááşá stack trace data áá˝ááşááźá˝ááşá¸ááťááşáĄááąá¸á áááşáĄááťááşáĄáááşááťáŹá¸áááŻáá˝á˛ááźááşá¸á áááşááźáŹáááŻááşáááş-
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. error ááźá
áşáá˝áŹá¸áááˇáşááŻááşááᯠáá˝á˛ááźááşá¸á
áááşááźáŹááźááˇáşááĄáąáŹááşá
âJava áĄáááŽááąá¸áážááşá¸ááŻááşáá˝á˛ááźááşá¸á áááşááźáŹááźááşá¸á
á¤áááşáážáŹ áĄáážáŹá¸áĄáá˝ááşá¸ááźá áşáá˝áŹá¸áááˇáş ááŻááşáĄáááŻáĄáá˝áŹááźá áşáááşá
@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();
}
}- S áá˝ááşá
entimentControlleráááşáá˝ááşá¸áá áşááŻáážááááşásaLogicApiUrl. áááşá¸ááááşáááŻá¸ááᯠáááŻááşáááŻááşáážáŻá áááşáážááşáááşása.logic.api.url. - áĄáááşá¸
saLogicApiUrláááşáááŻá¸áážááˇáş ááąáŤááşá¸á ááşáááşá/analyse/sentiment. áááşá¸áááŻáˇáááş á áŹááŹá¸áá˝á˛ááźááşá¸á áááşááźáŹáážáŻááᯠááŻááşááąáŹááşáááˇáş áááŻááşááááŻááŹá¸áá áşáááŻáˇ ááąáŤáşáááŻáááşáĄáá˝ááş ááááşá áŹáá áşááŻááᯠááąáŤááşá¸á ááşáá˝á˛áˇá ááşá¸ááŹá¸áááşá
â áá ášá ááşá¸áááşáááŻá¸ áááşáážááşááźááşá¸á
Spring áá˝ááş default source of property values ââáááş file áá
áşááŻááźá
áşáááşá application.propertiesáá˝ááşáá˝áąáˇáááŻááşááŤáááşá sa-webapp/src/main/resources. áááŻáˇááąáŹáş áááşá¸áááŻáĄááŻáśá¸ááźáŻááźááşá¸áááş áááŻááşáááŻááşáážáŻáááşáááŻá¸ááťáŹá¸ááᯠáááşáážááşáááş áá
áşááŻáááşá¸ááąáŹáááşá¸áááşá¸áááŻááşááŤá áĄáąáŹááşá፠command ááźááˇáşáááşá¸ áááşá¸ááᯠáááşááŻááşáááŻááşáááş-
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=WHAT.IS.THE.SA.LOGIC.API.URLá¤áááŻááşáááŻááşáážáŻááááşáááŻá¸áááş ááťá˝ááşáŻááşáááŻáˇá Python áĄáááŽááąá¸áážááşá¸áááááşá áŹááᯠáá˝ážááşááźáááˇáşáááşá
áááşá¸ááᯠconfiguration ááźáŻááŻááşááźááşá¸ááźááˇáşá ááťá˝ááşáŻááşáááŻáˇáááş á áŹááŹá¸áá˝á˛ááźááşá¸á áááşááźáŹáááş ááąáŹááşá¸áááŻááťááşááťáŹá¸ááᯠááŻááşááąáŹááşáááş áááŻáĄááşáááˇáşááąááŹáá˝ááş Spring áááşáĄááşááşááᯠááźáąáŹááźáááşá
ááťá˝ááşáŻááşáááŻáˇáááááťáŹá¸ááᯠááážáŻááşáá˝áąá¸á
áąáááşáĄáá˝ááş Python áĄáááŽááąá¸áážááşá¸ááᯠááážááááŻááşáááşáᯠááťá˝ááşáŻááşáááŻáˇ ááŻáśá¸ááźááşááŤáááşá localhost:5000 áĄá˛ááŤááᯠáááąáˇáááŻáˇ ááźááŻá¸á
áŹá¸ááŤá ááááşáĄááąááźááˇáş Spring áĄáááŽááąá¸áážááşá¸áááŻá
áááşáááş command áááşá¤áá˛áˇáááŻáˇááźá
áşááąááááˇáşáááşá
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=http://localhost:5000 
ááťá˝ááşáŻááşáááŻáˇáá
áá
áşáááş Python áĄáááŽááąá¸áážááşá¸áá
áşááŻááťáąáŹááşááŻáśá¸ááąááŤáááşá
áááŻááťá˝ááşáŻááşáááŻáˇáááş Python áĄááşáááŽááąá¸áážááşá¸ááᯠrun áááşááŹáááŻáĄááşááźáŽá¸ system áááşááťážáąáŹáşáááˇáşááŹá¸áááˇáşáĄáááŻááşá¸áĄááŻááşááŻááşááááˇáşáááşá
â Python áĄáááŽááąá¸áážááşá¸ááᯠá áá áşáááˇáşáá˝ááşá¸ááźááşá¸á
Python áĄáááŽááąá¸áážááşá¸ááᯠrun áááşáĄáá˝ááş áááˇáşáá˝ááş Python 3 áážááˇáş Pip ááᯠáááˇáşáá˝ááşá¸ááŹá¸ááááşááźá áşááźáŽá¸á áááˇáşáá˝ááş áááˇáşááťáąáŹáşááąáŹáááşáááşá¸ááťááş ááááşá¸áážááşááťáŹá¸ááᯠáážááşáááşá á˝áŹáááşáážááşááŹá¸áááŤáááşá
â áážáŽáááŻáážáŻááᯠáááˇáşáá˝ááşá¸ááŤá
áááąáŹááťááşáááŻááşáá˝á˛áááŻáˇáá˝áŹá¸ááŤá sa-logic/sa áĄáąáŹááşá፠command ááťáŹá¸ááᯠrun ááŤá
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/
â ááŻááşááŻááąáá
ááąáŹááşá¸áááŻááťááşááťáŹá¸áááŻáááşáááŻáˇááŻáśáˇááźááşáááşáááŻááŹá¸áááşáááş Python áĄáááŽááąá¸áážááşá¸ááŻááşáááŻááźááˇáşááźááŤá ááŻáˇá
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- áĄááŹááášáᯠáĄá
ááźáŻááźááşá¸
Flask. - áááşá¸ááśáááŻáˇ POST ááąáŹááşá¸áááŻáážáŻááťáŹá¸ ááźáŻááŻááşáááşáĄáá˝ááş ááááşá áŹááᯠáááşáážááşááźááşá¸á
- áá
ášá
ááşá¸áĽá
ášá
áŹááᯠááźááşáááşááá°ááźááşá¸á
sentenceááąáŹááşá¸áááŻáážáŻáĄáá˝á˛áˇááž - áĄáááşááá áĄááŹááášáᯠáĄá
ááźáŻááźááşá¸
TextBlobáááşáááŻá¸áááŻááá°ááŤápolarityááąáŹááşá¸áááŻááťááşááááŻááşáááşáá˝ááş áááááŻáśá¸áááşááśááážááááˇáş áĄáááŻááźáŻááťááşáĄáá˝ááş (ááťá˝ááşáŻááşáááŻáˇáááá ášá áá˝ááşá á¤áááşáážáŹ áá˝á˛ááźááşá¸á áááşááźáŹáááşáĄáá˝ááş áááşááźááąáŹ áá áşááŻáááşá¸ááąáŹáĄáááŻááźáŻááťááşááźá áşáááş)á - ááŻáśáˇááźááşáážáŻáá
áşááŻá áááşá¸áážááşá¸ááťááşáá
áŹááŹá¸ááŤáážáááąáŹáááŻááşáááşáážááˇáş áááşá¸áĄáá˝ááşáá˝ááşááťááşááŹá¸ááąáŹáá˝ážááşááźááťááş
polarity. - Flask áĄááşáááŽááąá¸áážááşá¸ááᯠá
áááşááźááşá¸áážáŹ ááážááááŻááşááŤáááşá
0.0.0.0:5000(ááąáŹááşááŻáśá áśáááşááąáŹááşáážáŻááᯠáĄááŻáśá¸ááźáŻá áááşá¸áááŻáááşáááşááąáŹááşáááŻááşáááşálocalhost:5000).
áááŻáĄá፠áĄáááŽááąá¸áážááşá¸ááᯠáááşááŽá¸áááˇáş áááŻááşááááŻáááşááąáŹááşáážáŻááťáŹá¸ ááŻááşááąáŹááşááąááŤáááşá áĄááťááşá¸ááťááşá¸ áĄááźááşáĄáážááş áááşááśáááş áááşáážááşááŹá¸ááźáááşá á¤áááşáážáŹ áĄááŻááşá á¤áĄáááˇáşáá˝ááş áĄáááŽááąá¸áážááşá¸ááŻáśááŻáśááášááŹááşááźá áşáááşá

áĄáááŽááąá¸áážááşá¸áá˝ááşááŤáááşáááˇáş microservices áĄáŹá¸ááŻáśá¸ááᯠááťááşá¸ááŹááąáŹáĄááźáąáĄááąáááŻáˇ áá°ááąáŹááşááŹááŤáááşá
áááŻááťá˝ááşáŻááşáááŻáˇáážáąáˇááááşááŽá áááąáŹááşááŹáá˝ááş React áĄááşááşáááŻáá˝ááˇáşááźáŽá¸ áááşá¸áážááˇáşá
áŹááźáąáŹááşá¸áĄááťááŻáˇááᯠáááŻááşá¸ááźáŹá¸áááşááźááŻá¸á
áŹá¸ááŤá áĄááŹáĄáŹá¸ááŻáśá¸áážááşáááşá
á˝áŹááźáŽá¸ááŤá - áááŻááşáááŻáážáááşááźáŽá¸ááąáŹááş Send á
áŹááŹá¸áĄáá˝ááşáĄáąáŹááşáá˝ááş áá˝á˛ááźááşá¸á
áááşááźáŹáážáŻááááşááᯠáááşáá˝áąáˇáááŤáááşá
ááąáŹááşáĄáááŻááşá¸áá˝ááşá Docker containers áá˝ááş ááťá˝ááşáŻááşáááŻáˇá microservices ááťáŹá¸ááᯠáááşáááŻáˇááŻááşááąáŹááşááááşááᯠáá˝áąá¸áá˝áąá¸ááŤáááşá Kubernetes áĄá áŻáĄááąá¸áá˝ááş áĄááŻááşááŻááşáááş áĄááşááşááŽááąá¸áážááşá¸ááᯠááźááşáááşáááşáĄáá˝ááş áááşá¸áááş áááŻáĄááşááŤáááşá
Docker áá˝ááşááááşááŹááťáŹá¸
áá˝ááşááááşááŹáááşááŹá¸ááąáŹ áĄáááŽááąá¸áážááşá¸ááťáŹá¸á ááźááˇáşááťááşáážáŻá áĄáááŻááşá¸áĄááŹáážááˇáş á áŽááśáááˇáşáá˝á˛ááźááşá¸áááŻáˇááᯠáĄáááŻáĄááťáąáŹááşááŻááşááąáŹááşáááˇáş á áá áşáá áşááŻááźá áşáááşá áááşá¸ááᯠ"áá˝ááşááááşááŹá áŽá ááşáá°" ááŻáááşá¸ááąáŤáşáááşá Kubernetes áááş áá˝ááşááááşááŹááťáŹá¸áážááˇáş áĄááŻááşááŻááşááŤáá á¤á áá áşááᯠáĄááŻáśá¸áááźáŻááŽá ááťá˝ááşáŻááşáááŻáˇáááş á¤áá˝ááşááááşááŹááťáŹá¸ááᯠáŚá¸á á˝áŹááá°áááş áááŻáĄááşááŤáááşá ááŤááąáááˇáş áĄáááşááŻáśá¸ áááşááᯠcontainers áá˝áąáá˛áááŻáᏠááźáąáŹááźááˇáşááĄáąáŹááşá áááşá¸áááş áĄáááşáĄááŹááźá áşáááşáá°ááąáŹ ááąá¸áá˝ááşá¸áĄáá˝ááş áĄááąáŹááşá¸ááŻáśá¸áĄááźáąááźá áşáááŻááşáááş Docker áááŻáˇ
ĐĐąŃаС кОнŃоКноŃа â ŃŃĐž НогкОвоŃĐ˝ŃĐš, авŃОнОПнŃĐš, иŃпОНнŃоПŃĐš пакоŃ, ŃОдоŃМаŃиК нокОо ĐżŃиНОМонио, кОŃĐžŃŃĐš вкНŃŃĐ°ĐľŃ Đ˛ ŃĐľĐąŃ Đ˛ŃŃ Đ˝ĐľĐžĐąŃ ĐžĐ´Đ¸ĐźĐžĐľ Đ´ĐťŃ ĐľĐłĐž СапŃŃка: кОд ĐżŃиНОМониŃ, ŃŃĐľĐ´Ń Đ¸ŃпОНнониŃ, ŃиŃŃоПнŃĐľ ŃŃодŃŃва и йийНиОŃоки, наŃŃŃОКки. ĐОнŃоКноŃиСиŃОваннŃПи ĐżŃОгŃаППаПи ПОМнО пОНŃСОваŃŃŃŃ Đ˛ ŃŃĐľĐ´Đ°Ń Linux и Windows, ĐżŃи ŃŃОП Они вŃогда ĐąŃĐ´ŃŃ ŃайОŃаŃŃ ĐžĐ´Đ¸Đ˝Đ°ĐşĐžĐ˛Đž ноСавиŃиПО ĐžŃ Đ¸Đ˝ŃŃаŃŃŃŃĐşŃŃŃŃ.
áááŻáááŻáááşáážáŹ áá˝ááşááááşááŹááťáŹá¸ááᯠááŻááşááŻááşáážáŻááŹááŹááťáŹá¸áĄááŤáĄáááş áááşáááˇáşáá˝ááşááźá°ááŹáá˝ááşáááᯠááŻááşááąáŹááşáááŻááşááźáŽá¸ áááşáááˇáşáááşáááşá¸ááťááşáá˝ááşáááᯠáááşá¸áááŻáˇáá˝ááş áááˇáşáá˝ááşá¸ááŹá¸ááąáŹ áĄáááŽááąá¸áážááşá¸ááťáŹá¸áááş áá°ááŽááąáŹáááşá¸áááşá¸ááźááˇáş áĄááŻááşááŻááşáááŻááşáááşááźá áşáááşá
áá˝ááşááááşááŹááťáŹá¸á áĄááşášááŤáááşááťáŹá¸ááᯠá á°á¸á ááşá¸ááąáˇááŹááźáŽá¸ áááşá¸áááŻáˇááᯠáĄáááŽááąá¸áážááşá¸ááťáŹá¸áá˝ááˇáşáááş áĄááźáŹá¸áááşá¸áááşá¸ááťáŹá¸áážááˇáş áážááŻááşá¸áážááşáááşá virtual machine áážááˇáş container áááŻáĄááŻáśá¸ááźáŻá React áĄááşááşááᯠáááşááąáŹááşáážáŻááąá¸áááˇáş áĽáááŹááᯠááźááˇáşááźááŤá ááŻáˇá
â virtual machine ááᯠáĄááŻáśá¸ááźáŻá React áĄáááŽááąá¸áážááşá¸áá áşááŻá áááşááźáááşáááŻááşááťáŹá¸ááᯠáááşááąáŹááşáážáŻááąá¸ááźááşá¸
virtual machines ááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻá static files ááťáŹá¸ááᯠááźáŻááźááşááááşá¸ááááşá¸áááş ááźááŻá¸áááşá¸ááŹáá˝ááş áĄáąáŹááşááŤáĄáŹá¸áááşá¸ááťááşááťáŹá¸ááᯠááźáŻáśáá˝áąáˇááááŻááşáááş-
- virtual machine áá áşááŻá áŽáááş ááźáŽá¸ááźááˇáşá áŻáśááąáŹ áááşáááşáážáŻá áá áşááźá áşááąáŹááźáąáŹááˇáş áĄáááşá¸áĄááźá áşááťáŹá¸ááᯠááááąáŹááşá á˝áŹáĄááŻáśá¸ááźáŻááźááşá¸ ááážáááąá
- ááááşááąáŹááşá¸áážáŽáááŻá áĄááťááŻáˇááąáŹááźááşáá˝ááşá¸áá˝ááşááźá°ááŹáá˝ááşáĄááŻááşááŻááşááąáŹáĄááŹáááşááŻááşááŻááşáážáŻááŹááŹááąáŤáşáá˝ááşááąáŹááşá¸á á˝áŹáĄááŻááşáááŻááşááŤá
- virtual machine solution áá áşááŻá áážáąá¸áá˝áąá¸ááźáŽá¸ áááşá¸ááźá áşáĄááźáááşáĄáááş ááťá˛áˇáá˝ááşááźááşá¸á

Nginx áááşááŹááŹáááş virtual machine áá
áşááŻáá˝ááşáááşáááşááąááąáŹáááşááźáááşáááŻááşááťáŹá¸áááŻáááşááąáŹááşáážáŻááąá¸áááşá
áĄááŹá¸áá°ááźáżááŹáááŻááźáąáážááşá¸áááş áá˝ááşááááşááŹááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻááŤáá virtual machine ááťáŹá¸áážááˇáş áážááŻááşá¸áážááşááŤá áĄáąáŹááşááŤáĄáŹá¸ááŹááťááşááťáŹá¸ááᯠáážááşááŹá¸áááŻááşáááş-
- áĄáááşá¸áĄááźá áşááťáŹá¸ááᯠááááąáŹááşá á˝áŹáĄááŻáśá¸ááźáŻááźááşá¸- Docker ááᯠáĄááŻáśá¸ááźáŻá áááşáááşáážáŻá áá áşáážááˇáş ááŻááşááąáŹááşááŤá
- ááááşááąáŹááşá¸ áá˝ááşáááşááąá¸á ááąáŹáˇááşáá˛ááąá¸ááŹá¸áá°áááş áááşá¸áááŻáˇááááŻááşáááŻááşáá˝ááşááťá°ááŹááąáŤáşáá˝ááş ááŻááşááąáŹááşáááŻááşáááˇáş áá˝ááşááááşááŹáá áşááŻáááş áááşáááˇáşááąááŹáá˝ááşáááᯠááŻááşááąáŹááşáááŻááşáááşááźá áşáááşá
- ááŻáśáĄáá˝ážáŹááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻááźááşá¸ááźááˇáş ááąáŤáˇááŤá¸á á˝áŹ ááźááˇáşááťááşááźááşá¸á

Nginx áááşááŹááŹáááş áá˝ááşááááşááŹáá
áşááŻáĄáá˝ááşá¸ áááşáááşááąááąáŹ áááşááźáááşáááŻááşááťáŹá¸ááᯠááąáŹááşáá˝ááşááąá¸áááşá
ááťá˝ááşáŻááşáááŻáˇáááş áĄááťááşáĄáááşá¸áááşáá˝ááş virtual machines áážááˇáş containers ááťáŹá¸áááŻáᏠáážááŻááşá¸áážááşááŹá¸ááąáŹáşáááşá¸ containers ááťáŹá¸á áĄáŹá¸ááŹááťááşááťáŹá¸ááᯠááśá áŹá¸áááážááááş ááŻáśááąáŹááşááŤáááşá Docker áá˝ááşááááşááŹááťáŹá¸áĄááźáąáŹááşá¸ áĄááąá¸á áááşááᯠáááşáážáŹáá˝áąáááŻááşááŤáááşá
â React áĄááşááşáĄáá˝ááş áá˝ááşááááşááŹááŻáśáá áşááŻáśááᯠáááşááąáŹááşááźááşá¸á
Docker container ááĄááźáąááśáááşááąáŹááşáážáŻááááşáááŻáˇáááşáááŻááşááźá
áşáááşá Dockerfile. á¤áááŻááşááĄá
áá˝ááşá áá˝ááşááááşááŹááĄááźáąááśááŻáśáá
áşááŻáśááᯠáážááşáááşá¸áááşááŹá¸ááźáŽá¸á áááŻáˇááąáŹááş áĄááşáááŽááąá¸áážááşá¸ááááŻáĄááşááťááşááťáŹá¸áážááˇáşáááŻááşááŽáááˇáşáá˝ááşááááşááŹáááŻáááşáááŻáˇáááşááŽá¸ááááşáááŻáá˝ážááşááźáááˇáş áá˝ážááşááźáŹá¸ááťááşááťáŹá¸ áĄáá˝á˛áááŻááşááŤáááşáááşá
ááťá˝ááşáŻááşáááŻáˇáááş áááŻááşáážááˇáş áĄááŻááşáááŻááşáᎠDockerfileNginx ááŹááŹáááŻáˇ áĄááşááŻááşáááşáááşáĄáá˝ááş React áĄáááŽááąá¸áážááşá¸á áááŻááşááťáŹá¸ááᯠááźááşáááşáááşáĄáá˝ááş ááťá˝ááşáŻááşáááŻáˇ ááŻááşááąáŹááşáá˛áˇáááşááťáŹá¸ááᯠááááááŤá
- React áĄááşááşáááşááąáˇááťáşááᯠáááşááąáŹááşááźááşá¸ (
npm run build). - Nginx ááŹááŹááᯠá áááşááąááŤáááşá
- áááşá¸áá˝ážááşáá
áşááŻá áĄááźáąáŹááşá¸áĄááŹááťáŹá¸ááᯠáá°á¸áá°ááźááşá¸á
buildáááąáŹááťááşáááŻááşáá˝á˛áážsa-frontendááŹááŹáááŻááŤáááŻáˇnginx/html.
áĄáąáŹááşáá˝ááş áá˝ááşááááşááŹáá áşáᯠáááşááŽá¸ááźááşá¸áážááˇáş á ááşáá˝ááşá¸áá˝ááşááťá°ááŹááąáŤáşáá˝ááş ááŻááşááąáŹááşáá˛áˇááąáŹ áĄáááşááąáŹáşááźá፠ááŻááşááąáŹááşááťááşááťáŹá¸áĄááźáŹá¸ áá°ááŽáážáŻááťáŹá¸ááᯠáááşáá˝áąáˇááźááşáááŻááşááŤáááşá
â SA-Frontend áĄáááŽááąá¸áážááşá¸áĄáá˝ááş Dockerfile áááŻááźááşáááşááźááşá¸á
áááˇáşáá˝ááşá¸ááááˇáş áá˝ážááşááźáŹá¸ááťááşááťáŹá¸ Dockerfile ááťážáąáŹááşáá˝ážáŹááťáŹá¸áĄáá˝ááş SA-Frontendcommand áážá
áşááŻáᏠááŤáááşááŤáááşá áĄáážááşáážáŹ Nginx áá˝áśáˇááźááŻá¸áááŻá¸áááşááąá¸áĄáá˝á˛áˇáááş áĄááźáąááśáá
áşááŻááᯠááźááşáááşááŹá¸ááźáŽá¸ááźá
áşáááşá ááťá˝ááşáŻááşáááŻáˇáááŻáśááááşáááŻáááşááąáŹááşáááş ááťá˝ááşáŻááşáááŻáˇáĄááŻáśá¸ááźáŻáááˇáş Nginx áĄáá˝ááşá á¤áá˝ááş ááťá˝ááşáŻááşáááŻáˇááąáŹáşááźáááş áááŻáĄááşááąáŹ áĄáááˇáşáážá
áşáááˇáşáážáááŤáááşá
- Nginx ááŻáśááᯠááŻááşááŻáśááĄááźáąááśáĄááźá áş áááşááźáŻááŻááşáááşáááŻáĄááşáááşá
- áááŻááşáá˝á˛ áĄááźáąáŹááşá¸áĄááŹ
sa-frontend/buildááŻáśáááŻááŤáááŻáˇáá°á¸áá°áááşáááŻáĄááşáááşánginx/html.
ááťá˝ááşáŻááşáááŻáˇáááş á¤ááąáŹáşááźááťááşááž áááŻááşáááŻáˇáá˝áŹá¸ááťážááş DockerfileáááŻáˇááąáŹááş á¤áá˛áˇáááŻáˇ ááąáŤáşááŹááááˇáşáááş-
FROM nginx
COPY build /usr/share/nginx/html áááşáá˝áąáˇááźááşááááˇáşáĄáááŻááşá¸á á¤ááąááŹáá˝ááş áĄááŹáĄáŹá¸ááŻáśá¸áááş áĄáá˝ááşáááŻá¸áážááşá¸áááşá áááŻááşááĄááźáąáŹááşá¸áĄááŹááťáŹá¸áááş áĄááąáŹáşááąá¸áááşááá˝ááşáá°ááźáŽá¸ ááŹá¸áááşáááŻááşááąáŹáĄááźá
áşáááŻáˇáááşáá˝ááşááŹááŤáááşá á¤áááŻááşáááş ááŻáśáááŻáá°áááş á
áá
áşáĄáŹá¸ ááźáąáŹááŹá¸áááşá nginx áááşá¸áá˝ááşáážáááźáŽá¸ááŹá¸áĄááŹáĄáŹá¸ááŻáśá¸áážááˇáşáĄáá°á áááşá¸áá˝ážááşááĄááźáąáŹááşá¸áĄááŹááťáŹá¸áááŻáá°á¸áá°ááŤá build áááşá¸áá˝ážááşáááŻáˇ nginx/html.
á¤ááąááŹáá˝ááş áááŻááşááťáŹá¸ááᯠáááŻááŤááž áááŻááşááťáŹá¸ááᯠáá°á¸áá°ááááˇáşááąááŹááᯠáĄáááĄááť áááááŻááşááŻáśáážááˇáş á
ááşááťááşá¸áááˇáş ááąá¸áá˝ááşá¸áá
áşáᯠáážááááŻááşááŤáááşá buildáááŻáááŻááŹá áááşá¸á áááşáááŹááŹáá˛á /usr/share/nginx/html. ááááşááąáŹáˇ ááŽáážáŹ ááŹááž ááážáŻááşáá˝áąá¸ááŤáá°á¸á áĄáážááşáážáŹ áááşáááŻááşáᏠááááşá¸áĄááťááşáĄáááşááťáŹá¸ááᯠáážáŹáá˝áąáááŻááşáááşá ááŻáśá
â ááŻáśáĄáŹá¸ á áŻá ááşá¸ááźáŽá¸ áááŻáážáąáŹááşáááşá¸áááŻáˇ áĄááşááŻááşáááşááźááşá¸á
ááťá˝ááşáŻááşáááŻáˇáááş ááźáŽá¸ááźááˇáşá áŻáśááąáŹááŻáśááźááˇáş ááŻááşááąáŹááşááźááşá¸áááźáŻááŽá áááşá¸ááᯠááŻááşááŻáśááááşá¸áááşá¸áážáŻáááŻáˇ áááşááźáááş áááŻáĄááşááŤáááşá ááŤáááŻááŻááşáááŻáˇá áĄááá˛áˇ cloud-based image hosting platform Docker Hub ááᯠááŻáśá¸ááŤáááşá á¤áĄáááˇáşáá˝ááşá áááşáááşáĄáąáŹááşááŤáĄáááŻááşá¸ááŻááşááąáŹááşáááşáááŻáĄááşáááş-
- áááˇáşáá˝ááşá¸á፠.
- Docker Hub áááŻááşáá˝ááş áážááşááŻáśáááşááŤá
- Terminal áá˝ááş áĄáąáŹááşá፠command ááᯠrun ááźááşá¸ááźááˇáş áááˇáşáĄááąáŹááˇáşáááŻáˇ áááşááąáŹááşááŤá
docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
áááŻáááşáááŻáĄááşáááşá terminal áááŻáĄááŻáśá¸ááźáŻá áááşá¸áá˝ážááşáááŻáˇáá˝áŹá¸ááŤá sa-frontend áĄáąáŹááşááąáŹáşááźá፠command ááᯠáááŻááąááŹáá˝ááş run ááŤá
docker build -f Dockerfile -t $DOCKER_USER_ID/sentiment-analysis-frontend . á¤ááąááŹáážááˇáş áĄáąáŹááşáá˝ááş áááşáá°ááąáŹ command ááťáŹá¸ $DOCKER_USER_ID Docker Hub áá˝ááş áááşááĄááŻáśá¸ááźáŻáá°áĄáááşááźááˇáş áĄá
áŹá¸áááŻá¸áááˇáşáááşá áĽáááŹáĄáŹá¸ááźááˇáşá ᤠcommand á áĄá
áááşáĄáááŻááşá¸áááş á¤áá˛áˇáááŻáˇ ááźá
áşáááŻááşááŤáááşá rinormaloku/sentiment-analysis-frontend.
á¤ááá
ášá
áá˝ááşá á¤áĄááááˇáşááᯠáááşá¸áážáááşáážáŹá¸ááźááşá¸ááźááˇáş áĄáááŻááťáŻáśá¸áááŻááşáááşá -f Dockerfileá¤áĄááááˇáşááᯠááťá˝ááşáŻááşáááŻáˇááŻááşááąáŹááşáááˇáşáááŻááşáá˝á˛áá˝ááş á¤áááŻááşáážáááźáŽá¸ááŹá¸ááźá
áşááąáŹááźáąáŹááˇáşá
repository áááŻáˇ ááźáŽá¸áá˝áŹá¸ááąáŹááŻáśááᯠááąá¸áááŻáˇáááşáĄáá˝ááşá ááťá˝ááşáŻááşáááŻáˇáááş áĄáąáŹááşá፠command ááᯠáááŻáĄááşááŤáááşá
docker push $DOCKER_USER_ID/sentiment-analysis-frontendáááşá¸ááᯠáĄááźáŽá¸áááşááźáŽá¸ááąáŹááşá ááŻáśáĄáŹá¸ cloud áááŻáážáąáŹááşáážáŻáááŻáˇ áĄáąáŹááşááźááşá á˝áŹ áá˝ááşá¸áááŻáˇááźááşá¸áážáá
â áá˝ááşááááşááŹááᯠá áááşááźááşá¸á
ááᯠáááşáá°áááᯠááąáŤááşá¸ááŻááşááŻááşá ááąáŤáşááąáŤáşááąáŹ ááŻáśááᯠáĄááŻáśá¸ááźáŻáááŻááşááŤááźáŽá $DOCKER_USER_ID/sentiment-analysis-frontend. ááŽáááŻááŻááşáááŻáˇá áĄáąáŹááşá፠command áá˝áąáá˛áˇ sequence ááᯠrun áááŻáˇáááŻáĄááşááŤáááşá
docker pull $DOCKER_USER_ID/sentiment-analysis-frontend
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend ááᯠáá˝ááşááááşááŹáááş áĄááŻááşááŻááşááąááźáŽá¸ ááťá˝ááşáŻááşáááŻáˇáááŻáĄááşááąáŹ áĄááźáŹá¸ááŻáśááťáŹá¸ááᯠáááşááŽá¸ááźááşá¸ááźááˇáş ááťá˝ááşáŻááşáááŻáˇ áááşáááşááŻááşááąáŹááşáááŻááşááŤáááşá ááŤááąáááˇáş áááşáááŻááşáááş ááŽáááŻááşá¸ááᯠááŹá¸áááşááĄáąáŹááş 80:80image ááᯠrun áááş command áá˝ááşáá˝áąáˇáážááááźáŽá¸áážáŻááşáá˝áąá¸ááŻáśááááşá
- áááááśááŤááş
80áááş host á port ááśááŤááş (áááŻáááŻáááşáážáŹ local computer) ááźá áşáááşá - ááŻáááááśááŤááş
80ááąáŹááşá¸áááŻááťááşááᯠááźááşáá˝ážááşá¸áááˇáşáááˇáş áá˝ááşááááşááŹá ááááşáááşá¸ááźá áşáááşá
áĄáąáŹááşááŤááŻáśáĽáááŹááᯠááŻáśá¸áááşááźááˇáşááŤá

Port Forwarding
á
áá
áşáááş ááááşáááşá¸ááž ááąáŹááşá¸áááŻááťááşááťáŹá¸ááᯠááąá¸áááŻáˇáááşá <hostPort> ááááşáááşá¸áááŻáˇ <containerPort>. áááŻáááŻáááşáážáŹ ááááşáááşá¸ááᯠáááşááąáŹááşááźááşá¸ ááźá
áşáááşá 80 áá˝ááşááźá°ááŹááᯠport áá
áşááŻáááŻáˇ ááźááşáá˝ážááşá¸áááşá 80 áá˝ááşááááşááŹá
ááááşáááşá¸áážáŹááááşá¸á 80 local computer áážáŹáá˝ááˇáşááŹá¸áá˛áˇ application ááᯠáᎠcomputer áážáŹáááşááąáŹááşááźááˇáşáážáŻáááŻááşááŤáááşá localhost:80. áááˇáşá
áá
áşáááş Docker ááᯠáááśáˇáááŻá¸ááŤáá áááşáááş Docker virtual machine áá
áşááŻáá˝ááş áĄáááŽááąá¸áážááşá¸ááᯠrun áááŻááşááźáŽá¸á ááááşá
áŹáážááˇáş áá°ááááˇáşáááşá <docker-machine ip>:80. Docker virtual machine á IP ááááşá
áŹáááŻáážáŹáá˝áąáááşá áááşáááş command áááŻááŻáśá¸áááŻááşáááşá docker-machine ip.
á¤áĄááťáááşáá˝ááşá áážáąáˇááŻáśá¸áĄááşááşáá˝ááşááááşááŹááᯠáĄáąáŹááşááźááşá á˝áŹ á áááşáááŻááşáááşáážááˇáşá áááşáááş áááşá¸áá áŹááťááşáážáŹááᯠáááąáŹááşááŹáá áşááŻáá˝ááş áá˝ááˇáşáááŻááşáááˇáşáááşá
â.dockerignore áááŻááş
ááťážáąáŹááşáá˝ážáŹááŻááşááŻáśáááşááąáŹááşááźááşá¸á SA-Frontendá¤ááŻááşáááşá¸á
ááşáááş áĄáá˝ááşáážáąá¸áá˝áąá¸áááşááᯠááťá˝ááşáŻááşáááŻáˇ áááááźáŻáááááŻááşáááşá áĄáááşááźáąáŹááˇáşáááŻááąáŹáş image build context ááᯠDocker daemon áááŻáˇ ááąá¸áááŻáˇáááąáŹááźáąáŹááˇáş ááźá
áşáááşá build context áááŻáááŻááşá
áŹá¸ááźáŻááąáŹ directory ááᯠcommand áĄáá˝ááşááąáŹááşááŻáśá¸áĄááźááşá¸áĄááŻáśáĄááźá
áşááąá¸áááşá docker build. ááťá˝ááşáŻááşáááŻáˇáááá
ášá
áá˝ááşá á¤áĄááááˇáşá
áŹááĄááŻáśá¸áá˝ááş áĄá
ááşáá
áşááŻáážááááşá áááşá¸áááş á
ááşá¸ááąá¸áá˝á˛áĄááźáąáŹááşá¸áĄááŹáá˝ááş áĄáąáŹááşááŤáá˝á˛áˇá
ááşá¸ááŻáśáĄáŹá¸ ááááşáĄááźá
áş ááźá
áşááąáŤáşá
áąáááş-
sa-frontend:
| .dockerignore
| Dockerfile
| package.json
| README.md
+---build
+---node_modules
+---public
---src áááŻáˇááąáŹáş á¤ááąááŹáá˝ááş áážáááąáááˇáş áááŻááşáá˝á˛ááťáŹá¸áĄáŹá¸ááŻáśá¸áá˝ááşá ááťá˝ááşáŻááşáááŻáˇáááş áááŻááŤáá
áşááŻáᏠáááŻáĄááşááŤáááşá build. áĄááźáŹá¸áááşáááˇáşáĄááŹáááŻáááᯠááąáŤááşá¸ááŻááşáá˝á˛ááźááşá¸áááş áĄááťáááşááźáŻááşá¸ááźááşá¸ááźá
áşáááşá Docker áĄáŹá¸ ááťá
áşááťá°áážáŻááááˇáş áááşá¸áá˝ážááşááťáŹá¸ááᯠááźáąáŹááźááźááşá¸ááźááˇáş áááşááąáŹááşáážáŻááᯠáĄáážáááşááźážááˇáşáááŻááşáááşá ááŤáááŻááŻááşáááŻáˇá áááŻááşáá
áşááŻáááŻáááşá .dockerignore. áááŻááşáá˛áˇ áááşá¸áážáŽá¸áááşáááŻáááş áááşááťáŹá .gitignoreá¤áááŻááşááá˝á˛áˇá
ááşá¸ááŻáśáááş áááşá¸áážáŽá¸ááąááŻáśááááşá áááşá¸áááş image build system ááťá
áşááťá°áážáŻáááŻááşááąáŹáááşá¸ááźáąáŹááşá¸ááťáŹá¸áááŻá
áŹáááşá¸ááźáŻá
áŻááŹá¸áááşá ááťá˝ááşáŻááşáááŻáˇááĄááźáąáĄááąáá˝ááşá á¤áááŻááşááĄááźáąáŹááşá¸áĄááŹááťáŹá¸áááş á¤áá˛áˇáááŻáˇááźá
áşáááş-
node_modules
src
public áááŻááş .dockerignore áááŻááşáážááˇáşáá°ááŽááąáŹáááŻááŤáá˝ááşáážáááááşá Dockerfile. ááᯠááŻáśá ááááááşáááş á
áášáááˇáşáĄáááşá¸áááş ááźáŹáááşááźá
áşáááşá
ááᯠJava áĄáááŽááąá¸áážááşá¸áĄáá˝ááş ááŻááşááŻáśáážááˇáş áááşááśááźááŤá ááŻáˇá
â Java áĄáááŽááąá¸áážááşá¸áĄáá˝ááş áá˝ááşááááşááŹááŻáśáá áşááŻáśááᯠáááşááąáŹááşááźááşá¸á
áááşááŹáááŻááááźáŽá¸ áá˝ááşááááşááŹááŻáśááťáŹá¸áááşááŽá¸áááş áááŻáĄááşáááťážááᯠáááşááąáˇááŹááźáŽá¸ááźá áşáááşá áááŻáˇááźáąáŹááˇáş á¤áĄáááŻááşá¸áááş áĄáá˝ááşáááŻááŤáááşá
áááŻááşáááŻáá˝ááˇáşááŤá DockerfileáááąáŹááťááşáááŻááşáá˝á˛áá˝ááşáážáááąáŹá sa-webapp. á¤áááŻááşá á
áŹááŹá¸ááᯠáááşáááşááŤáá áááşá¸áá˝ááş ááąáŹáˇááťááşá
áŹááŻáśá¸ááťáŹá¸ááźááˇáş á
áááşáááˇáş áááşááąáŹááşáážáŻáĄáá
áşáážá
áşááŻáᏠáá˝áąáˇáááŤáááşá ENV и EXPOSE:
ENV SA_LOGIC_API_URL http://localhost:5000
âŚ
EXPOSE 8080 ááąáŹáˇááťááşá
áŹááŻáśá¸ ENV Docker containers áĄáá˝ááşá¸áážá áááşáááşá¸ááťááş ááźáąáŹááşá¸áá˛áááŻááşááąáŹ ááźáąáŹááşá¸áá˛áážáŻááťáŹá¸ááᯠááźáąááźáŹáááŻááşá
áąááŤáááşá áĄáá°á¸áááźááˇáşá ááťá˝ááşáŻááşáááŻáˇááĄááźáąáĄááąáá˝ááşá áááşá¸áááş á
áŹááŹá¸áááŻááşá¸ááźáŹá¸á
áááşááźáŹáážáŻááᯠááŻááşááąáŹááşáááˇáş áĄáááŽááąá¸áážááşá¸á API ááᯠáááşááąáŹááşááźááˇáşáážáŻáááş URL áá
áşááŻááᯠáááşáážááşáá˝ááˇáşááźáŻáááşá
ááąáŹáˇááťááşá
áŹááŻáśá¸ EXPOSE Docker ááᯠááááşáááşá¸áá
áşááŻáá˝ááˇáşáááş áááˇáşáĄáŹá¸ ááźáąáŹáá˝ááˇáşááźáŻáááşá ááťá˝ááşáŻááşáááŻáˇáááş áĄáááŽááąá¸áážááşá¸áážááˇáşáĄááŻááşááŻááşááąáŹááźáąáŹááˇáş ᤠport áááŻáĄááŻáśá¸ááźáŻááŤáááşá á¤ááąááŹáá˝ááş áááşááźááşáááŻááşáááşá Dockerfile ááťážáąáŹááşáá˝ážáŹááťáŹá¸áĄáá˝ááş SA-Frontend áááŻáá˛áˇáááŻáˇ áĄááááˇáşááážáááŤá áááşá¸áááş á
áŹáá˝ááşá
áŹáááşá¸ááá
ášá
áĄáá˝ááşááŹááźá
áşááźáŽá¸ áá
áşáááşá¸áĄáŹá¸ááźááˇáş á¤áááşááąáŹááşáážáŻáááş á
áŹáááşáá°áĄáá˝ááşááźá
áşáááşá Dockerfile.
ááŻáśáááŻáááşááąáŹááşááźáŽá¸ repository áááŻáˇáá˝ááşá¸ááťááźááşá¸áááş ááááşáĽáááŹáážááˇáşáá°áááşá áááˇáşáĄáááşáĄááťááşá¸ááᯠáĄáá˝ááşááŻáśááźááşáážáŻááážáááąá¸ááŤáá áááşáááŻááşáᏠcommand ááťáŹá¸ááᯠáááŻááşáá˝ááş áá˝áąáˇáááŻááşááŤáááşá README.md áááŻááşáá˝á˛áá˛áážáŹ sa-webapp.
â Python áĄáááŽááąá¸áážááşá¸áĄáá˝ááş áá˝ááşááááşááŹááŻáśáá áşááŻáśááᯠáááşááąáŹááşááźááşá¸á
áááŻááşáá˛áˇ áĄááźáąáŹááşá¸áĄááŹáá˝áąááᯠááąáˇááŹááźááˇáşáááş Dockerfile áááŻááşáá˝á˛áá˛áážáŹ sa-logicáĄá˛ááŽáážáŹ ááŹááž áĄáá
áşááá˝áąáˇáá°á¸á ááŻáśáááŻáááşááąáŹááşááźáŽá¸ repository áááŻáˇáá˝ááşá¸áááŻáˇááźááşá¸áĄáá˝ááş command ááťáŹá¸áááş áááˇáşáĄáá˝ááşáááşá¸áážáŽá¸ááźáŽá¸ááŹá¸ááźá
áşáááˇáşááźáŽá¸ááźá
áşááąáŹáşáááşá¸á ááťá˝ááşáŻááşáááŻáˇááĄááźáŹá¸áĄáááŽááąá¸áážááşá¸ááťáŹá¸áá˝ááşáá˛áˇáááŻáˇáááşá¸áááŻáˇáááŻáááŻááşáá˛áá˝ááşáá˝áąáˇáááŻááşáááşá README.md áááŻááşáá˝á˛áá˛áážáŹ sa-logic.
â áá˝ááşááááşááŹáááşááŹá¸ááąáŹ áĄáááŽááąá¸áážááşá¸ááťáŹá¸ááᯠá ááşá¸áááşááźááşá¸á
áááşáá ááşá¸áááşáááąá¸ááąáŹ áĄááŹáá áşááŻááᯠáááşááŻáśááźááşáááŻááşááŤáááŹá¸á ááááşáááá°á¸á ááťá˝ááşáŻááşáááŻáˇá áá˝ááşááááşááŹááťáŹá¸ááᯠá ááşá¸áááşááźááˇáşááĄáąáŹááşá
- áĄáááŽááąá¸áážááşá¸áá˝ááşááááşááŹááᯠá
áááŻááşááĄáąáŹááş
sa-logicááááşáááşá¸áá áşááŻáá˝ááş ááŹá¸ááąáŹááşáááş áááşá¸ááᯠá áŽá ááşáááşáážááşááŤá5050:docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic - áĄáááŽááąá¸áážááşá¸áá˝ááşááááşááŹááᯠá
áááŻááşááĄáąáŹááş
sa-webappááááşáááşá¸áá áşááŻáá˝ááş ááŹá¸ááąáŹááşáááş áááşá¸ááᯠá áŽá ááşáááşáážááşááŤá8080. áááŻáˇáĄááźááşá Python áĄáááŽááąá¸áážááşá¸áááş Java áĄáááŽááąá¸áážááşá¸ááž ááąáŹááşá¸áááŻááťááşááťáŹá¸ááᯠááŹá¸ááąáŹááşáááˇáş ááááşáááşá¸ááᯠáááşáááşá¸ááťááş ááźáąáŹááşá¸áá˛áááşáážááşááąá¸ááźááşá¸ááźááˇáş áááşáážááşáááş áááŻáĄááşáááşá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
áá˝ááşááááşááŹáá áşáᯠáááŻáˇáááŻááş Docker VM á IP ááááşá áŹááᯠáááážááááş áááŻááşááᯠáááŻá¸ááŹá¸ááŤá .
áĄáááŽááąá¸áážááşá¸áá˝ááşááááşááŹááᯠá
áááŻááşááĄáąáŹááş sa-frontend:
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend ááᯠbrowser áá˝ááş ááááşá
áŹáááŻáˇ áá˝áŹá¸áááşáĄáá˝ááş áĄááŹáĄáŹá¸ááŻáśá¸ áĄáááşáááˇáşááźá
áşááŤááźáŽá localhost:80 áážááˇáş app áááŻá
ááşá¸áááşá
ááťáąá¸áá°á¸ááźáŻá áááşáááş port áááŻááźáąáŹááşá¸ááťážááşáááááźáŻááŤá sa-webappáááŻáˇáááŻááş áááşáááş Docker VM ááᯠáĄááŻáśá¸ááźáŻááąááŤá áááŻááşááᯠáááşá¸ááźááşáááş áááŻáĄááşáááşááźá
áşáááşá App.js áááŻááşáá˝á˛áá
áşááŻááž sa-frontendáááşá¸áááşá¸áážá IP ááááşá
ᏠáááŻáˇáááŻááş áááŻáˇááşááśááŤááşááᯠááźáąáŹááşá¸áá˛ááźááşá¸ááźááˇáş analyzeSentence()áĄááŻáśá¸áááźáŻááąáŹáˇááąáŹ ááąááŹáĄá
áŹá¸ áááşáážááĄááťááşáĄáááşááᯠáĄá
áŹá¸áááŻá¸ááźááşá¸ááźááˇáşá áĄá˛ááŽááąáŹááşáážáŹááąáŹáˇ ááŻáśááᯠááźááşáááşá
áŻá
ááşá¸ááźáŽá¸ áĄááŻáśá¸ááźáŻááážáŹ ááźá
áşááŤáááşá
á¤áááşáážáŹ ááťá˝ááşáŻááşáááŻáˇá áĄáááŽááąá¸áážááşá¸ááŻáśááášááŹááşáááş áááŻááŻáśá áśááźá áşáááşá

Microservices ááťáŹá¸áááş áá˝ááşááááşááŹááťáŹá¸áá˝ááş áĄááŻááşááŻááşááŤáááşá
áĄáážá áşááťáŻááş- áĄáááşááźáąáŹááˇáş Kubernetes áĄá áŻáĄááąá¸ááᯠáááŻáĄááşááááşá¸á
ááťá˝ááşáŻááşáááŻáˇáááş áááŻááşááťáŹá¸ááᯠááźááşáááşááŻáśá¸áááşáá˛áˇáááşá DockerfileááŻáśááťáŹá¸áááşááąáŹááşááŻáśáážááˇáş Docker repository áááŻáˇ áá˝ááşá¸áááŻáˇááŻáśáĄááźáąáŹááşá¸ áá˝áąá¸áá˝áąá¸áá˛áˇáááşá áááŻáˇáĄááźááşá áááŻááşáááŻáĄááŻáśá¸ááźáŻá ááŻáśááťáŹá¸á
áŻá
ááşá¸áážáŻááᯠáĄáážáááşááźážááˇáşáááşá¸ááᯠááąáˇááŹáá˛áˇáááşá .dockerignore. ááááşáĄááąááźááˇáşá ááťá˝ááşáŻááşáááŻáˇá áááŻááşááááŻáááşááąáŹááşáážáŻááťáŹá¸áááş ááᯠDocker áá˝ááşááááşááŹááťáŹá¸áá˝ááş ááŻááşááąáŹááşááąááŤáááşá á¤ááąááŹáá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş Kubernetes ááᯠáĄáááşááźáąáŹááˇáş áááŻáĄááşáááşáážááˇáş áááşáááşá ááŻáśá¸á ááťážáááąáŹ ááąá¸áá˝ááşá¸áá
áşáᯠáážááááŻááşááŤáááşá á¤ááąá¸áá˝ááşá¸áĄáá˝ááş áĄááźáąááᯠá¤áĄááźáąáŹááşá¸áĄááŹá ááŻááááĄáááŻááşá¸áá˝ááş áĄáŹááŻáśá
ááŻááşááŤáááşá á¤áĄááąáŹáĄáá˝ááşá¸ áĄáąáŹááşááŤááąá¸áá˝ááşá¸ááᯠááŻáśá¸áááşááŤá
ááťá˝ááşáŻááşáááŻáˇá á
áŹááŹá¸áá˝á˛ááźááşá¸á
áááşááźáŹáážáŻ áááşáĄááşáááŽááąá¸áážááşá¸áááş ááášááŹáá
áşáážááşá¸áá˝ááş ááąáááşá¸á
áŹá¸ááŹáááşáᯠáá°áááźááŤá
ááŻáˇá áááşá¸áá˛áˇááťáŽáá˛áˇ ááąáŹááşá¸áááŻáážáŻáá˝áąáᏠáááá
áşáááŻááşá¸ áá°áˇááŽááąáŹááşááŹáááşá áááŻáááŻáááşáážáŹ microservices ááźá
áşáááşá sa-webapp и sa-logic ááźáŽá¸ááŹá¸ááąáŹáááĄáŹá¸áĄáąáŹááşáá˝ááşáážáááááˇáşáááşá áááŻááşááááŻáááşááąáŹááşáážáŻááťáŹá¸ ááŻááşááąáŹááşáááˇáş áá˝ááşááááşááŹááťáŹá¸ááᯠáááşáá˛áˇáááŻáˇ á
ááąá¸ááťáááŻááşáááşáááşá¸á
source: www.habr.com
