á áĽáŤááŤá˝á áá°á¨áľ ááĽá ááá¨á áá á¨
áŠáŁááŤáśá˝ áĽá á¨ááááŞáŤáá áĽáľá á áĽáą ááľáĽ á ááľááἠá°áľá°áá˝ áá. á°áĽáľááŤáἠáŤáľáá!
Kubernetes ááá áá. ááááľá áá áŁááŽá˝ á áá á áŤáŁá˘ áááľáŤáľ áĽá áááἠá¨áá¨ááá, ááá á°á áá á á´áááá á áĽááľ á°ááłáľ ááľáĽ áááŁá á áá˝áá?
áŠá áááľáľ á ááĽááľ ááá áĽáá°ááťá á¨á°á áŤá አáĽáŤáľá áááľá¨á áĽáá˛ááአáĽáááááłááᢠáá¸áá áá
áá ááłááľ á ááᣠá¨á°ááááą á áá á áŠá áááľáľ áááľá°á ááľáĽ áŁá áááᎠá áááááśá˝ áá á¨á°áá á¨á° áá°áá áŞáŤá áááľ áá˝ááᢠááá
ááľáľá ááľá áľ áĽá˝ááá, ááááŤáąá á°áá ááťá˝á á¨áŠá áááľáľ áá áĽáá´áľ áĽáá°áá አáááľá°áá áĽáá
á¨áá ááá áľ á°ááłáłá áá´ áá. áá
áááŞáŤ á¨ááá˝ á¨ááá¨á áááľá áá? á áĽáááą, áĽá áááŽá˝. áľááá
, á áĽááááš áĽááá
ááłááśá˝ ááá áŤá áááŽá˝á á ááĽáŤáŤáľ ááááŤá - ᨠKubernetes á˝áá°-ááłáŚá˝ áĽá ᨠkubectl áľááá áŁá
áŞáŤáľ. á¨áĽááá
á˝ááá˝ á°áŤá˛áá˝ á ááŁá˘áŤá¸á á¨áá°áá áŞáŤ áááľá, áááᎠá°ááŞáľ áĽá á¨áśá¨á áŽáá´áááŽá˝á áĽáá°ááŤáá
ááááłá. á áá ááááľ áĽáááłáá. á ááááŞáŤáŁ á áŽáááŠá°á áá áŁá áááᎠá°ááŞáľ áá á¨á°áá°á¨á° áá°áá áŞáŤá áĽáá´áľ ááľáŹáľ áĽááłááĽá áĽáááááᢠá¨ááŤá ááĽáŤááłááą áááᎠá áááááľ á¨áĽá ááŤá ááľáá˝á áĽáááá¨áłáá. áĽá á¨á፠á áá á¨áŠá áááľáľ áá áĽáá°ááááá áĽá á áŠá áááľáľ á áá°áłá°á¨á áááľá°á ááľáĽ á áááᎠá°ááŞáľ áá á áááľá¨áľ á¨áá°áá áŞáŤáá áááááľ áĽááá¨ááŤáá á˘
áá á ááŤá¨áĽ áá° áŠá áááľáľ ááľ á ááľ á ááŤá¨áĽ ᣠááá ááá á áŠá áááľáľ ááľáĽ áĽáá´áľ á ááá áĽáá°á°ááá ááá¨áłáľ á°áŤ á°á á¨ááŤáľáááá áá áĽá¨áá áŤááá áĽáá áááᤠáá°áŁáᢠáŠá áááľáľ á áĽááἠááá á´áááá ááᣠááá ááŤáá á¨áááá á¨áľ áĽá áĽáá´áľ áĽá á áá áĽáá°ááá áĽáľáŤáá áľá¨áľá˘
á ááᣠáĽá áłáá¨áá ᣠáá° áĽáŤ áĽáááŁá áľáááá áŤá áá°áá áŞáŤ áĽáááááá˘
á¨áá¨áŤ áá°áá áŞáŤ
á¨áĽá áá°áá áŞáŤ á ááľ á°ááŁá áĽáť áá°áŤáᢠáĽáá° ááĽá áľ á ááľ áá¨áá° ááá áááľáłá ᣠá¨á፠á áá ᣠá¨á˝áá áľááłá ááłáŞáŤáá˝á á áá áá ᣠá¨áá á áá¨áá° ááá áľááľ áľáá°á áŤáŤááłá ᣠá¨á á¨áá° áááŠá á°áŤá˛ áá°áá°á ááá áŤááá áľááłá á áááŤá¨áľ ááááááá˘
á¨áá áá°áá áŞáŤ áá ááľáŽáľ áá á áááľááá˘
áľááľ áľáá°á á¨áľá áá°áá áŞáŤ
á¨á´áááŤá áĽááł á ááá ᣠá áááŹá˝á áśáľáľ áĽáá á á áááááśá˝á áŤáá áá ᣠáĽáŤááłááąá á¨á°áá°á á°ááŁáŤáľá áááłá á˘
- SA-Frontend React static áááá˝á á¨ááŤáááá á¨Nginx áľá á áááá ááá˘
- SA-WebApp á á፠á¨á°áá á¨áááŁá á¨áá á¨á áĽáŤááá˝á á¨ááŤáľá°áááľ á¨áľá áá°áá áŞáŤ ááá˘
- SA-Logic á¨á˝áá áľááľá áľáá°á á¨ááŤá¨ááá á¨áááá áá°áá áŞáŤ ááá˘
áááᎠá°ááŞáľ á á°ááĽá á ááááŠá áἠáááľ áŤáľáááá. "á¨áľáŤáá˝ áááŤá¨áľ" á¨áááá ááłáĽ á°ááŁáŤá áŤá°ááá, áá á á°ááłáłá áá áĽááľ á ááľ áááŁáŁáľ áŤáľáááá¸áá.
ááἠá áá°áá áŞáŤá ááľáĽ áááľáłá
á¨áá áŁáá áĽáá ááľáĽ á áá°áá áŞáŤá ááľáĽ áŤááá á¨ááἠáá°áśá˝ á ááłá¨áľ á¨áľáááąá ááĽá áŤáá¸áá á°á¨ááá˝ áá¨áľ áá˝áá. áĽáá¨áááá¸ááĄ-
- á áłáš á¨á áááአááá áá ááá
index.html
(áá á á á°áŤá á¨React áá°áá áŞáŤ áĽá áá áááá)ᢠ- á°á ááá á¨áá°áá áŞáŤá áá áááááᣠáá á áá°á áá áľ áá á¨á°áá°á¨á° á¨áľá áá°áá áŞáŤ áĽáŞ áŤá°áááá˘
- á¨áľá¨-áá˝ á áááŹá˝á á˝ááá áá° Python áá°áá áŞáŤ ááá°áá°á áĽáŤááá áŤáľá°ááááá˘
- á¨áááá á áááŹá˝á á¨á˝ááá áľááľ á°ááľá áá¤áąá ááĽáŤáá ááá˝ ááááłáá˘
- á¨áľááŞáá á áááŹá˝á ááá˝ ááá°á á ááá˝ áááŤá (áá á á á°áŤá á¨á°á°áá°ááá á˝áá áá¤áľ áá°á ááá áŤáłáŤá)á˘
á¨áĽááá
áá áá°áá áŞáŤáá˝ áŽáľ ááá áá˝áá
á á á¨áŁá˘ áá˝á áá á áááᎠá°ááŞáľ áá á¨á°áá°á¨á° áá°áá áŞáŤá á áááľ áá
á áááŹá˝á áĽáá˛á°áŤ áśáľáąáá áááᎠá°ááŞáľ áááá á ááĽáᢠá¨áĽááą á áŁá ááá áĽáááá - á¨ááľ-áá¨á¨áť áá°áá áŞáŤá˘
âáá áŤáŁá˘ áááľ React áááá
á¨áŹááľ á áááŹá˝á áááᾠᨠNode.js ááŹá áĽá NPM á áŽáááá°áá áá ááŤá á ááŚáľá˘ áá
áá áá á¨áŤá á áá, á°ááááá á áá áá áá° á¨ááŽáááľ á áá áááą sa-frontend
áĽá á¨áá¨á°ááá áľááá áŤááą:
npm install
áá
áá áľááá á á ááá ááľáĽ á ááľáá¸á node_modules
ᨠReact áá°áá áŞáŤ áĽáááá˝ ááŤáá, ááááŚáš á ááá ááľáĽ áááá package.json
. á á°ááłáłá á áá ááľáĽ áŤááľá áĽááá˝ áŤáá¨áą á áá á¨áá¨á°ááá áľááá áŤááą:
npm start
ááźá áá. React áá°áá áŞáŤ á áá áĽá¨á°áŤ áá áĽá áá° á áłáš á áľáŤáť á áá°áľ ááááľ ááťááᢠlocalhost:3000
. á áĽáą áŽáľ ááľáĽ á¨áá ááá áááἠáá˝ááᢠá á áłáš ááľáĽ á¨áĽááá
áááŚá˝ á°á˝áĽá áá˛áŤáá áŤáŤá. áá
ááá á¨áťáá á¨áááá˝ ááľá "áá
" á°áĽá ááá áŤá ááľáá áá. ááá
á ááľáá áááŁáá á¨ááľ áááľ áááľ áá° ááá áĽá á áľá°áłá˝ á°ááᎠááá¨áŤáá˘
â áááᾠᨠReact áá°áá áŞáŤá á áááááľ áá
á¨React áá°áá áŞáŤá á áľááá ááá áá ááá áá° á¨áááááłááą áááá˝ áľáĽáľáĽ áááἠáĽá á¨áľá á ááááá á áá áá áá°áá áá˝ ááááá á ááĽáá˘
React áá°áá áŞáŤá áááááŁáľ áĽáá°áá á°ááááá á áá áá áá° á ááá áááą sa-frontend
áĽá á¨áá¨á°ááá áľááá áŤááą:
npm run build
áá
á ááŽáááľ á áá ááľáĽ áá፠áááĽáŤá build
. React áá°áá áŞáŤ áĽáá˛á°áŤ á¨ááŤáľááááľá áááá á¨áááááłááą áááá˝ ááááá˘
âáľáłá˛á áááá˝á á Nginx ááááá
ááááŞáŤ ᨠNginx áľá á ááááá ááŤá áĽá áááľ áŤáľáááááłáᢠsa-frontend/build
áá° á áá [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
- ááá á áááá. ááá áá, áŽááśáá á¨á°ááá¨áą, áĽá፠á¨áľá
á°áľ áááááśá˝á áá¨áľ áá˝áá. áĽááá
áľá
á°áśá˝ á¨áľ áĽáá°áá¨á°áą á áľááá ááá¨áłáľ á¨áá°áá áŞáŤáá áŽáľ áĽáááááá˘
âá¨ááľ-áá¨á¨áť áá°áá áŞáŤ áŽáľ áľáá°á
á¨áááá áŽáľ á áááá¨áľ áá 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. á¨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
á áľááŞáá áá á¨á°áá á¨á° á¨áľá áá°áá áŞáŤá áááľ á ááĽáá˘
á¨POST áĽáŤáá ááá á á¨áá˝á á¨áľááŞáá áá°áá áŞáŤ áĽáááááá
âá áá°á áá áľ áá á áááľá¨áľ á¨áľá áá°áá áŞáŤá áááá
á¨áľááŞáá áá°áá áŞáŤá ááá°ááŤáľ JDK8 áĽá Maven áĽá á áľááá á¨á°ááአá¨á áŤáŁá˘ á°ááááŽá˝ áŤáľáááááłáᢠáá áá áá á¨áŤá á áá á ááŽáááłá˝á áá ááľáŤáąá ááá á áá˝áá.
âáá°áá áŞáŤáá áá° áá ááá á áá¸á áá
á°ááááá á áá áá áá° á ááá áŤáľáą sa-webapp
áĽá á¨áá¨á°ááá áľááá á áľááŁ:
mvn install
áá
áá áľááá á á ááá ááľáĽ á¨áá¸á á áá sa-webapp
áá፠ááá áŤáᢠtarget
. á¨á፠á áááŹá˝á á¨áááá áľ áŚáł ááᣠââá áá ááá ááľáĽ á¨áłá¸áᣠá ááá ááá¨áá sentiment-analysis-web-0.0.1-SNAPSHOT.jar
.
âá¨á፠áá°áá áŞáŤá ááľááá
áá° á áá áááą target
áĽá áá°áá áŞáŤáá á áá¨á°áá áľááá áŤááą:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar
áá á áľááá á ááľáá¸á áá áľá á°áľ áá¨á°áłáᢠáĽáąá áá áá áááááᣠáአá¨áááľá ááááŽá˝ á á°á¨áᨠá¨ááľáľá ááἠááľáĽ áá°áá°á áĽáá˝ááááĄ-
Error creating bean with name 'sentimentController': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'sa.logic.api.url' in value "${sa.logic.api.url}"
ááĽá, áĽáá
á áŁá á áľáááá ááá áľáááá ááá˝ áááľá¨á á¨áááťá áááá ááĽááľ áá sa.logic.api.url
. áľá
á°áą á¨áá¨á°áľá áľá áŽáľ áĽááááá.
âá¨á፠áá°áá áŞáŤ áŽáľ áľáá°á
áľá á°áą á¨áá¨á°áľá áľ áŽáľ á ááἠáĽáá á áá˘
@CrossOrigin(origins = "*")
@RestController
public class SentimentController {
@Value("${sa.logic.api.url}") // #1
private String saLogicApiUrl;
@PostMapping("/sentiment")
public SentimentDto sentimentAnalysis(
@RequestBody SentenceDto sentenceDto)
{
RestTemplate restTemplate = new RestTemplate();
return restTemplate.postForEntity(
saLogicApiUrl + "/analyse/sentiment", // #2
sentenceDto, SentimentDto.class)
.getBody();
}
}
- á á¤áľ
entimentController
ááľá á áá˘saLogicApiUrl
. ááá á ááĽá¨áą á°ááá áˇása.logic.api.url
. - ááľáá
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
á¨áá ááĽá¨áľ áá áá° Python áá°áá áŞáŤá˝á á áľáŤáť áá áá á áá áľá˘
áĽáąá á áááá áSááŞáá áľá áá°áá áŞáŤ á¨á˝áá áá°áá°á áĽáŤááá˝á á¨áľ áááľ áĽááłáá áľ áĽáááá¨áááá˘
á
áááłá˝áá áĽááłáááłáľáĽáŁ ᨠPython áá°áá áŞáŤ á áá áĽáá°ááá áĽáááľáááᢠlocalhost:5000
áĽá áľááĽáą áááááłáľ ááááŠ. á áá
ááááŤáľ á¨áá°á á áááŹá˝áá ááááá áľáĽáá áá
áá áááľááá˘
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=http://localhost:5000
áľáááłá˝á á¨áááá á áááŹá˝á áááľáá
á áá ᨠPython áá°áá áŞáŤá áĽáť ááľáŹáľ á ááĽá áĽá áľáááą áĽáá°á°á á áá áá°áŤáá˘
â Python áá°áá áŞáŤá á áááááľ áá
á¨áááá á áááŹá˝á áááľáŹáľ Python 3 áĽá Pip ááŤá á ááŚáľ áĽá á°áá˘áá á¨á áŤáŁá˘ á°ááááŽá˝ á áľááá áááááľ á ááĽááľá˘
âáĽáááá˝á áŤá
áá° á¨ááŽáááľ á áá áááą 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/
âá¨áŽáľ áĽááľ
ááĽáŤááá˝ áĽáá´áľ ááá˝ áĽáá°áá°áĽ ááá¨áłáľ ᨠ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
. - á¨áááľá á áááŹá˝áá á ááľááá ááᣠáá
á á áá ááááá˘
0.0.0.0:5000
(áĽáá˛áá á¨á ášá áááŁáł á áá áá áá°ááąá áľ áá˝áálocalhost:5000
).
á áá á áááŹá˝áá áŤáŤá°áą áááᎠá°ááŞáľ áĽá¨á°áŠ ááᢠáĽááľ á ááľ áĽáá˛ááá á°ááá á°áá. á áá á¨áĽáŤ á°á¨á áá á¨áá°áá áŞáŤá ááľá áá áĽáá°áááľá áĽáá.
á áááŹá˝áá áŤáŤá°áą ááá áááᎠá áááááśá˝ áá° á¤áá áááł áŤááŁá
á ááᣠá¨ááá áá˝á á ááľáŁ React áá°áá áŞáŤá á á áłá˝ ááľáĽ ááááą áĽá á¨á°áá°á á á¨áá° áááá á áĽáą áá ááá°áá°á ááááŠá˘ ááá ááá á áľááá á¨á°á°áŤ - á ááŤáŠá á¨á°áŤá á áá Send
á¨áľááłá áá¤áąá á¨á˝áá áłáĽá á áłá˝ áŤáŤáá˘
á áááĽáá ááá áááᎠá áááááśáťá˝áá á Docker áŽáá´áááŽá˝ ááľáĽ áĽáá´áľ áĽáá°áá°áŤ áĽáááááŤáá ᢠá Kubernetes áááľá°á ááľáĽ ááááľ áááá¨áťáá ááááááľ áá á áľááá áá.
á¨áśá¨á ááŤáŁáá˝
á¨áĽá ááŤá˘áŤ ááľá ááá ááĽá°áľ áŤááᣠáŤáąá á¨áťáᣠá°ááťáááľ áŤáá ááŹá ááᣠáĽáąá áááľáŹáľ á áľááá á¨áááľá áá á¨ááŤáŤáľáľáĄ á¨áá°áá áŞáŤ áŽáľáŁ á¨áŠáŤ áá á áŤáŁá˘áŁ á¨áľáááľ ááłáŞáŤáá˝ áĽá á¤á°-ááťáááľáŁ ááźáśá˝á˘ á áŽáá´ááá á¨á°áŤá ááŽááŤáá˝ á áááąá ááááľ áĽá áááśááľ á á¨áŁá˘áá˝ áĽá á áá ááá áá˝áá áĽá áá á¨á° áááą ááá ááá áá áááá á°ááłáłá áá°áŤáá˘
áá áááľ áŽáá´áááŽá˝ á¨ááá¨áť á ááááŽá˝á á¨áᎠá ááááá áŽáááŠá°á áá áá°áŠ áá˝áá, áĽá á ááááá á áŤáŁá˘, á ááľáŁá¸á á¨á°áŤá°áąáľ á áááŹá˝áá˝ á á°ááłáłá ááááľ áá°áŤá.
á¨ááŤáŁáá˝á áá áłáá˝ áááłá°áľ áĽá á áááŹá˝áá˝á áááľáŹáľ á¨ááá˝ ááááśá˝ áá ááááááᣠá¨áášáá áá˝á áĽá áŽáá´áá á áá áá á¨áŹááľ á áááŹá˝á á¨áááááá ááłá áĽáááá¨áľá˘
âá¨áá˝áá áá˝áá á áá áá á¨React áá°áá áŞáŤ á¨áááááłááą áááá˝á ááááá
áááŁá áá˝áá˝á á áá áá á¨áááááłááą áááá˝á áĽáá ááá°áŤááľ á ááá¨á á¨áá¨á°ááľá ááłáśá˝ áŤááĽááá á˘
- áĽáŤááłááą á¨áášáá áá˝á á¨á°áá áŚááŹá˛áá á˛áľá°á áľááá áá¤áłá áŤááá á¨ááĽáľ á á áááá˘
- á¨ááľá¨á áĽááááľá˘ á á ááłááľ á¨ááá ááľáĽ áŽáááŠá°áŽá˝ áá á¨áá°áŤá á áááľ á áááá áá ááá°áŤ áá˝ááá˘
- á¨á¨áášáá áá˝á áááľá áááá áĽá ááĽá áśá˝ á¨á°á áá¨á¨ ááŹáľá˘
á áááŁá áá˝á ááľáĽ á¨áá°áŠ á¨áááááłááą áááá˝á á¨ááŤáááá Nginx áľá á áááá
áŽáá´áááŽá˝ á°ááłáłá á˝áá ááááłáľ áĽá á áá á¨ááá á¨áá, á¨á¨áášáá áá˝áá˝ áá á˛ááťá¸á, á¨áá¨á°ááľ áĽááŤáŹáá˝ ááłáá áá˝áá.
- á¨ááĽáľ á á ááááĄ- áśá¨áá á áá áá á¨áľááá° áááá áá ááľáŤáľá˘
- á¨ááľá¨á ááááľá˘ á ááľ ááᢠá áŤáą áŽáááŠá°á á¨áá°áŤá áľ áŽáá´ááá á¨áľá áá°áŤáá˘
- á¨ááľá ááĽááĽáŽá˝á á áá áá ááá ááĽá°áľ áá°ááŤáľá˘
á áŽáá´ááá ááľáĽ á¨áá°áŠ á¨áááááłááą áááá˝á á¨ááŤáááá Nginx áľá á áááá
á¨áášáá áá˝áá˝á áĽá áŽáá´áááŽá˝á á áĽááľ ááĽáŚá˝ áá áĽáť á ááťá˝á¨áááŁááá áá ፠áĽááłá ááŽáá´áááŽá˝ áĽááŤáŹ áľááľ á á ááá˘
âáReact áá°áá áŞáŤ á¨ááŤáŁ ááľá á ááááŁáľ áá
á¨áśá¨á áŽáá´ááá áá°á¨áłá á¨áááŁáł ááłááľ ááá áá Dockerfile
. á áá
ááá ááááŞáŤ áá á¨ááŤáŁá áá°á¨áłá ááľá áááááŁá, á¨ááŤá á¨áááá¨áťáá ááááśá˝ á¨ááŤáá ááŤáŁ áĽáá´áľ áĽáá°ááá á á¨áá áá á°á¨áłáłá áááŞáŤáá˝ á°áŤáľá°áá.
á¨ááá áá ááľáŤáľ á¨ááááŤá˝á á ááľ Dockerfile
áá° Nginx á áááá áááľáá á¨React áá°áá áŞáŤ áááá˝á ááááááľ áŤá°á¨áááá áŤáľáłááąáĄ-
- React áá°áá áŞáŤ áĽá
á ááááŁáľ (
npm run build
). - ᨠNginx á ááááá á áááá ááá˘
- á¨áááŤáá áááśá˝ áá
áłáľ
build
á¨ááŽáááľ á áása-frontend
áá° á¨á áááá á áánginx/html
.
á¨áá á áłá˝ ááŤáŁá á ááá á áĽá á á áŤáŁá˘áŤá áŽáááŠá°á áá á á°á¨ááááľ á¨áá á á°á ááąáľ á°á¨ááá˝ ááŤá¨á áŤááá á°ááłáłáááľ áá¨áľ áá˝áá.
â áSA-Frontent áá°áá áŞáŤ á¨áśá ááá á áááááľ áá
ááľáĽ á¨ááŤá°áą áááŞáŤáá˝ Dockerfile
ááááá¨áť SA-Frontend
, áááľ áĄáľáá˝á áĽáť áŤáá áá. áĽáááłá áá ᨠ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
. áĽáá° áĽáááą á¨áá, áĽáá
á ááá á¨á°ááłá°á ááá á¨áá. áĽáááłá áá á ááŁáĽááľ áŤáá áá¨á á ááľáĽ ááá áá˝áá
âááľáá á áá°áŁá°áĽ áá° áá¨ááťá ááľáá
á¨á°á ááá ááľá áá á¨ááľáŤáłá˝á á ááľ, áá° á¨ááľá áá¨ááťá ááľááŁáľ á ááĽá. áá áá áááľá¨áᣠáááá á á°áá áá á¨á°áá°á¨á° ááľá ááľá°ááá ááľá¨á Docker Hubá áĽáá ááááᢠá áá á¨áĽáŤ á°á¨á, á¨áá¨á°ááľá ááľá¨á á ááĽááľ:
- ááŤá
Docker . - á Docker Hub áŁá˘áŤá áá áááááĄá˘
- á á°áááá ááľáĽ á¨áá¨á°ááá áľááá á áááľ áá° áááŤá áááĄá˘
docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
á áá áŤáľáááááłá, á°ááááá á áá áá, áá° áááŤá áááą sa-frontend
áĽá á¨áá¨á°ááá áľááá áĽá፠áŤááą:
docker build -f Dockerfile -t $DOCKER_USER_ID/sentiment-analysis-frontend .
áĽáá
áĽá á¨áłá˝ á á°ááłáłá áľáááá˝ $DOCKER_USER_ID
á Docker Hub áá áŁáá á¨á°á áá áľáá
áá°áŤáľ á áá áľá˘ áááłáᣠáá
á¨áľáĽáá ááá áá
á áááľá áá˝áááĄ- rinormaloku/sentiment-analysis-frontend
.
á áá
á ááŁá áá
áľáĽáá á¨áĽáą á ááľáááľ ááłá á ááťáá -f Dockerfile
, áá
á áľááá á¨áááá˝áá áľ á áá á áľááľá áá
ááá áľááá.
á¨á°á ááááá ááľá áá° áá¨ááťá áááá á¨áá¨á°ááá áľááá áĽááááááá˘
docker push $DOCKER_USER_ID/sentiment-analysis-frontend
á¨á¨á¨áą á áá ááľá á á°áłáŤ áááł áá° á¨á°áá áá¨ááť ááŤáá ááá¨áľ á Docker Hub áá áŤááľá á¨áá¨á áá¨ááťáá˝ áááá áááá¨áąá˘
â áá ááľááá
á áá ááááá á°á á ááŁá á¨ááłáááá ááľá ááá¨áľ áĽá áááľ áá˝áá $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
áĽáŤáá ááá áŤáá áľ á¨ááŤáŁá áá°áĽ ááá˘
á¨áá¨á°ááá ááłá á°ááá¨áľá˘
áá°áĽ ááľá°ááá
áľáááą á¨áá°áĄ á¨ááᥠáĽáŤááá˝á áŤáľá°áááá <hostPort>
áá° áá°áĽ <containerPort>
. áá°áĽ ááľá¨áľ áááľ ááᢠ80
áŽáááŠá°áŠ áá° áá°áĽ ááááŤáᢠ80
ááŤáŁ.
áá°áĽ ááᎠ80
á á áŤáŁá˘á áŽáááŠá°á áá á¨á°á¨áá° áá°áá áŞáŤá á¨áá
áŽáááá°á á áá ááááľ áá˝ááᢠlocalhost:80
. áľáááľá áśá¨áá á¨ááá°áá á¨ááᣠá áááŹá˝áá á Docker á¨áášáá áá˝á áá ááľáŹáľ áá˝ááᣠá áľáŤáťáá áá
á áááľááᢠ<docker-machine ip>:80
. á¨áśá¨á áááŁá áá˝áá á¨á áá á áľáŤáť áááá
áľáááá áá áá áá˝ááᢠdocker-machine ip
.
á áá ááᣠá áá´ á¨ááľ-áá¨á¨áť áá°áá áŞáŤ ááŤáŁ á á°áłáŤ áááł á¨á°ááá¨áŁ áášá á á áłá˝ ááľáĽ ááááľ ááťá á ááĽááľá˘
â.dockerignore ááá
á¨áá°áá áŞáŤáá ááľá ááááŁáľ SA-Frontend
, áá
áá°áľ áĽá
á á áŁá áááá áááá áááľá°áá áĽáá˝ááá. áá
á¨ááá áľ ááááŤáľ á¨ááľá áááŁáł á ááľ áá° áśá¨á á´áá ááá á áá áľá˘ á¨áááŁáł á ááľ á¨ááááá áá፠ááľáĽáá á¨áá¨á¨áť áá¨áŤá¨áŞáŤ áá á°á°áĽáˇáᢠdocker build
. á áĽá áááł, á áá
áľááá áá¨á¨áť áá á ááľ ááĽáĽ á á. áá
á¨áá¨á°áá ááá
á á áľáĽá°áŁ á ááľ ááľáĽ áĽáá˛áŤá°áľ áŤá°ááááĄ-
sa-frontend:
| .dockerignore
| Dockerfile
| package.json
| README.md
+---build
+---node_modules
+---public
---src
áá áĽáá
á¨ááááľ ááá á áááá˝ ááľáĽ, á áá áĽáť áŤáľááááá build
. áá áááááá ááá ááá¨áľ áá ááŁá¨á ááᢠá¨áľáášá áááŤáá˝ á˝á áĽáá°áá ááśá¨á á áááá áááŁáłáá ááá á áá˝ááᢠáá
áá áááľá¨á, ááá áŤáľááááá .dockerignore
. áĽááľáᣠáááá á¨ááłáááľ á¨áá .gitignore
, á¨áá
ááá ááá
á ááááŁáľ á¨áłáá áááľáá. á¨ááľá áááŁáł áľáááą á˝á ááá¸á á¨áá˝ááľá áááŤáá˝ ááá¨ááŤáᢠá áĽá áááłáŁ á¨áá
ááá áááľ áá
á áááľáááĄ-
node_modules
src
public
ááá .dockerignore
á¨ááá áá á á°ááłáłá á áá ááľáĽ ááá á áá áľ Dockerfile
. á áá á¨ááľá áľáĽáľáĽ áĽááľ á°á¨ááśá˝ áááľáłá.
á áá áá፠áá°áá áŞáŤ ááľáá áĽááá˘
âáá፠á áááŹá˝á á¨ááŤáŁ ááľá ááááŁáľ
áá áĽáá°áá áłáááá ᣠáĽá á¨ááŤáŁ ááľáá˝á áááá á á¨ááŤáľáááááľá áá á áľááľáá á°áá¨ááᢠááá áá áá ááá á áŁá á áá áááá.
áááá ááááą Dockerfile
, áá
á á ááŽáááľ á áá ááľáĽ áááá sa-webapp
. á¨áá
á ááá á˝áá áŤáá áĄ, á áĽáą ááľáĽ á ááá áááľ á¨áááአáááľ á áłá˛áľ áááŁáłáá˝á áĽáť áŤááá ENV
и EXPOSE
:
ENV SA_LOGIC_API_URL http://localhost:5000
âŚ
EXPOSE 8080
ááá áá ENV
á Docker áŽáá´áááŽá˝ ááľáĽ á¨á áŤáŁá˘ á°ááááŽá˝á áĽáá˛áŤáá áŤáľá˝áááłáᢠá á°ááá, á áĽá áááł, á¨á˝áá áľááłáá á¨ááŤá¨ááá á¨áá°áá áŞáŤáá á¤áá á áááľá¨áľ áŠá áá¤á áĽáá˛áŤááá ááá
áľáááłá.
ááá áá EXPOSE
áśá¨á áá°áĽ áĽáá˛á¨ááľ áĽáá˛ááአáŤáľá˝áááłáᢠá¨áá°áá áŞáŤá áá áľáá°áŤ áá
áá áá°áĽ ááá áá ááᢠáĽáá
ááľáĽ áŤáá áá¨áľ áá˝áá Dockerfile
ááááá¨áť SA-Frontend
áĽáá°áá
áŤá áľáĽáá á¨áá. áá
áá°ááľ ááááá˝ áĽáť áá, á áá á áááá, áá
áááŁáł áá ááŁá˘ áá Dockerfile
.
ááľáá ááááŁáľ áĽá áá° áá áŤáááŤá ááááľ áá áĽáá° ááłáá ááłá áááľáá. á á˝ááłá áá áá á áŁá áĽááá á áŤááá á°ááłá áľáááá˝ á ááá ááľáĽ ááá áá˝áá README.md
á á áá ááľáĽ sa-webapp
.
á Python áá°áá áŞáŤ á¨ááŤáŁ ááľá ááááŁáľ
á¨áááá áááľ á¨á°ááá¨áą Dockerfile
á á áá ááľáĽ sa-logic
áĽá፠á á˛áľ ááá á áłáááᢠááľáá áááááŁáľ áĽá áá° áá¨ááťá á¨ááááľ áľáááá˝ ááľááá ááĽááľá á¨á°áááą ááá á ááŁá¸á ᣠáá áĽáá° ááá˝ á áááŹá˝ááťá˝á ᣠáĽááą á ááá ááľáĽ ááá áá˝áá ᢠREADME.md
á á áá ááľáĽ sa-logic
.
âá áŽáá´ááá á¨á°áŤá áá°áá áŞáŤáá˝á ááá¨á
áŤááá¨áá¨á ááá ááá áľá˝ááá ? áĽáá á áá˝ááᢠáĽáááťá˝áá áĽáááľá˝á˘
- á¨áááá¨áťáá ááŤáŁ áĽáááá
sa-logic
áĽá áá°áĽ áá áááłáἠáŤáá áŠáľ5050
:docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
- á¨áááá¨áťáá ááŤáŁ áĽáááá
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
á¨áŽáá´ááá ááá á¨áśá¨á áŞá¤á á áá á áľáŤáťá áĽáá´áľ ááááľ áĽáá°áá˝á áááá
áááá áááá¨áą
á¨áááá¨áťáá ááŤáŁ áĽáááá sa-frontend
:
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend
á áá ááá ááá á á áłáš ááľáĽ áá° á áľáŤáťá ááá°áľ ááá áá localhost:80
áĽá áá°áá áŞáŤáá ááááŠáľá˘
áĽáŁááá áá°áĄá á¨áá¨áŠ á sa-webapp
, ááá Docker VM áĽáŤááą á¨áá áááá áááľá áŤáľáááááłá App.js
á¨á áá sa-frontend
á áľááą ááľáĽ á¨á áá á áľáŤáťáá ááá á¨áá°áĽ ááĽáá á ááá¨á analyzeSentence()
áá áŤááá áľ áá¨áá áłááá á¨á ááá áá¨á á áá°áŤáľ. á¨á፠á áá ááľáá áĽáá°áá áá°áĽá°áĽ áĽá áá áá áŤáľáááááłá.
á áá á¨á á áááŹá˝á áĽááá ááá፠áá á áááľááá˘
áááᎠá°ááŞáľ á ááŤáŁáá˝ ááľáĽ áá°áŤá
áá áááŤáĄ ááá á¨áŠá áááľáľ áááľá°á áŤáľááááá?
á áá áááášá ááááááᢠDockerfile
ááľáá˝á áĽáá´áľ áĽáá°áááᥠáĽá áá° Docker áá¨ááť áĽáá´áľ áĽáá°ááá á°áááŻáᢠá á°á¨ááŞá, áááá á áá áá ááľáá˝á áĽáá´áľ ááá á áĽáá°ááťá á°áá¨áá .dockerignore
. á áá
ááááŤáľ á¨áĽá áááᎠá°ááŞáľ á áá á áśá¨á áŽáá´áááŽá˝ ááľáĽ áĽá¨á°áŠ áá¸áᢠáĽáá
áŠá áááľáľ ááá áĽáá°ááááá áá á áá áľáááá áĽáŤá áááááľ áá˝ááᢠá¨áá
áĽáŤá áááľ á áá
ááłááľ ááá°á ááá áá ááá°áá. áĽáľá¨ááŤá áľá¨áľ á¨áá¨á°ááá áĽáŤá á áľáĽá áľáĄ-
á¨á á¨á˝áá áľáá°á áἠá áááŹá˝á á á áá á áá á°á¨á áłáá ááá áĽáá áĽááľáĽá˘ á á¨á°ááá á áááŽá á¨ááá አáĽáŤááá˝ áá° áĽáą áááŁáᢠáá
áááľ áááᎠá°ááŞáľ áááľ áá sa-webapp
и sa-logic
á á¨áá°á ááááľ ááľáĽ áááá. áááᎠá áááááśá˝á á¨ááŤáŤááą ááŤáŁáá˝á áĽáá´áľ áááá ááťáá?
ááá: hab.com