áá»áœááºá¯ááºááá¯á·ááá±á¬ááºážááá¯áá»ááºá¡á Habr ááẠáááá¯áá»ááºáá áºáá¯áááºáá®ážáá²á·áááºá
Kubernetes ááŒá®ážáá±á¬á· ááááá¯á¶áž áá¯ááºáá±áá¬ááᯠáá»á±áááºáá«áááºá á á¬áááºážááœááºážáá«á
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 á¡ááá®áá±ážááŸááºážáá¶ááá¯á· áá¯á¶á·ááŒááºááŸá¯áá áºáᯠáá±ážááá¯á·ááẠ(ááá¯á·áá±á¬ááºá áááºážááẠááœá²ááŒááºážá áááºááŒá¬áá¬ážáá±á¬ á á¬áá¬ážáááááºááᯠá¡áá¯á¶ážááŒá¯áá°áᶠááŒááááº)á
á€á¡ááá®áá±ážááŸááºážá¡á¬ážáá¯á¶ážá¡ááœáẠáá¯ááºááᯠááœá±á·ááá¯ááºáááºá
á ááºááœááºážááŸá ááá¯ááºáááá¯áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá¡ááŒá±áá¶á á¡ááºááºáá áºáá¯á¡á¬áž áá¯ááºáá±á¬ááºááŒááºážá
á¡ááºááá®áá±ážááŸááºážá¡áá¯ááºáá¯ááºáááºá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠááá¯ááºáááá¯áááºáá±á¬ááºááŸá¯áá¯á¶ážáá¯áá¯á¶ážááᯠá áááºááẠááá¯á¡ááºáááºá áááºážááá¯á·áá²á០á¡ááŸááá¯á¶áž - ááŸá±á·áá¯á¶áž á¡ááºááºááŒáá·áº á áááºááŒáá«á áá¯á·á
â áá±áááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡ááœáẠ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/sentiment
Spring ááᯠá¡ááŒá±áá¶á áááºá¡ááºááá®áá±ážááŸááºážááᯠáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáááºá
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 ááœááºááááºáá¬áá»á¬áž
ááœááºááááºáá¬áá¯á¶ááẠáá±á«á·áá«ážáá±á¬á ááá¯ááºááá¯ááºáá«ááŸááá±á¬á áá¯ááºáá±á¬ááºááá¯ááºáá±á¬ áááºáá±á·áá»áºáá áºáá¯ááŒá áºááŒá®áž áááºážááá¯áááºáááºááẠááá¯á¡ááºááá·áºá¡áá¬á¡á¬ážáá¯á¶ážáá«áááºáááº- á¡ááºááºáá¯ááºá á¡áá¯ááºáá¯ááºáá»áááºáááºáááºážáá»ááºá á áá áºáááááá¬áá»á¬ážááŸáá·áº áá áºáá»á áºááá¯ááºáá»á¬ážá áááºáááºáá»á¬ážáá«áááºáááºá Containerized áááá¯ááááºáá»á¬ážááᯠ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 áá»á¬ážá á¡á¬ážáá¬áá»ááºáá»á¬ážááᯠáá¶á
á¬ážááááŸáááẠáá¯á¶áá±á¬ááºáá«áááºá
â React á¡ááºááºá¡ááœáẠááœááºááááºáá¬áá¯á¶áá áºáá¯á¶ááᯠáááºáá±á¬ááºááŒááºážá
Docker container áá¡ááŒá±áá¶áááºáá±á¬ááºááŸá¯ááááºááá¯á·áááºááá¯ááºááŒá
áºáááºá Dockerfile
. á€ááá¯ááºáá¡á
ááœááºá ááœááºááááºáá¬áá¡ááŒá±áá¶áá¯á¶áá
áºáá¯á¶ááᯠááŸááºáááºážáááºáá¬ážááŒá®ážá ááá¯á·áá±á¬áẠá¡ááºááá®áá±ážááŸááºážáááá¯á¡ááºáá»ááºáá»á¬ážááŸáá·áºááá¯ááºáá®ááá·áºááœááºááááºáá¬ááá¯áááºááá¯á·áááºáá®ážááááºááá¯ááœáŸááºááŒááá·áº ááœáŸááºááŒá¬ážáá»ááºáá»á¬áž á¡ááœá²ááá¯ááºáá«áááºáááºá
áá»áœááºá¯ááºááá¯á·ááẠááá¯ááºááŸáá·áº á¡áá¯ááºááá¯ááºáá® Dockerfile
Nginx áá¬áá¬ááá¯á· á¡ááºáá¯ááºáááºáááºá¡ááœáẠReact á¡ááá®áá±ážááŸááºážá ááá¯ááºáá»á¬ážááᯠááŒááºáááºáááºá¡ááœáẠáá»áœááºá¯ááºááá¯á· áá¯ááºáá±á¬ááºáá²á·áááºáá»á¬ážááᯠáááááá«á
- React á¡ááºááºáááºáá±á·áá»áºááᯠáááºáá±á¬ááºááŒááºáž (
npm run build
). - Nginx áá¬áá¬ááᯠá áááºáá±áá«áááºá
- áááºážááœáŸááºáá
áºáá¯á á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠáá°ážáá°ááŒááºážá
build
ááá±á¬áá»ááºááá¯ááºááœá²ááŸsa-frontend
áá¬áá¬ááá¯áá«ááá¯á·nginx/html
.
á¡á±á¬ááºááœáẠááœááºááááºáá¬áá áºáᯠáááºáá®ážááŒááºážááŸáá·áº á ááºááœááºážááœááºáá»á°áá¬áá±á«áºááœáẠáá¯ááºáá±á¬ááºáá²á·áá±á¬ á¡áááºáá±á¬áºááŒáá« áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá¡ááŒá¬áž áá°áá®ááŸá¯áá»á¬ážááᯠáááºááœá±á·ááŒááºááá¯ááºáá«áááºá
â SA-Frontend á¡ááá®áá±ážááŸááºážá¡ááœáẠDockerfile ááá¯ááŒááºáááºááŒááºážá
ááá·áºááœááºážáááá·áº ááœáŸááºááŒá¬ážáá»ááºáá»á¬áž Dockerfile
áá»áŸá±á¬ááºááœáŸá¬áá»á¬ážá¡ááœáẠSA-Frontend
command ááŸá
áºáá¯áᬠáá«áááºáá«áááºá á¡ááŸááºááŸá¬ 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 . - 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:80
image ááᯠ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