ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ Π²ΠΎΠ΄ΠΈΡ‡, Π΄Π΅ΠΎ 1: ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, микроуслугС ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ

На наш Π·Π°Ρ…Ρ‚Π΅Π², Π₯Π°Π±Ρ€ јС Π½Π°ΠΏΡ€Π°Π²ΠΈΠΎ Ρ‡Π²ΠΎΡ€ΠΈΡˆΡ‚Π΅ ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ ΠΈ са задовољством стављамо Ρƒ њСга ΠΏΡ€Π²Ρƒ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ. ΠŸΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΠΈ сС!

ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ јС Π»Π°ΠΊ. Π—Π°ΡˆΡ‚ΠΎ ΠΌΠΈ Π±Π°Π½ΠΊΠ΅ ΠΏΠ»Π°Ρ›Π°Ρ˜Ρƒ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²Ρ†Π° Π΄Π° Ρ€Π°Π΄ΠΈΠΌ Ρƒ овој области, Π° свако ΠΌΠΎΠΆΠ΅ Π΄Π° савлада ΠΎΠ²Ρƒ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡ˜Ρƒ Π·Π° само Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ сати?

ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ Π²ΠΎΠ΄ΠΈΡ‡, Π΄Π΅ΠΎ 1: ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, микроуслугС ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ

Ако ΡΡƒΠΌΡšΠ°Ρ‚Π΅ Π΄Π° сС ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ ΠΌΠΎΠΆΠ΅ Π½Π°ΡƒΡ‡ΠΈΡ‚ΠΈ Ρ‚Π°ΠΊΠΎ Π±Ρ€Π·ΠΎ, ΠΏΡ€Π΅Π΄Π»Π°ΠΆΠ΅ΠΌ Π΄Π° испробатС сами. НаимС, савладавши овај ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π», ΠΌΠΎΡ›ΠΈ Ρ›Π΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅Ρ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ засновану Π½Π° микросСрвисима Ρƒ ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ кластСру. Π’ΠΎ ΠΌΠΎΠ³Ρƒ Π΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΡƒΡ˜Π΅ΠΌ, ΠΏΠΎΡˆΡ‚ΠΎ јС ΡƒΠΏΡ€Π°Π²ΠΎ иста ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡ˜Π° која сС ΠΎΠ²Π΄Π΅ користи ΠΈ којом ΡƒΡ‡ΠΈΠΌ нашС ΠΊΠ»ΠΈΡ˜Π΅Π½Ρ‚Π΅ Π΄Π° Ρ€Π°Π΄Π΅ са ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ-ΠΎΠΌ. По Ρ‡Π΅ΠΌΡƒ сС овај Π²ΠΎΠ΄ΠΈΡ‡ Ρ€Π°Π·Π»ΠΈΠΊΡƒΡ˜Π΅ ΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΡ…? Π£ ствари, ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ствари. Π”Π°ΠΊΠ»Π΅, Π²Π΅Ρ›ΠΈΠ½Π° ΠΎΠ²ΠΈΡ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π»Π° ΠΏΠΎΡ‡ΠΈΡšΠ΅ објашњСњСм Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΈΡ… ствари - ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚Π° ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅ΡΠ° ΠΈ карактСристика ΠΊΡƒΠ±Π΅Ρ†Ρ‚Π» ΠΊΠΎΠΌΠ°Π½Π΄Π΅. Аутори ΠΎΠ²ΠΈΡ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π»Π° ΠΏΡ€Π΅Ρ‚ΠΏΠΎΡΡ‚Π°Π²Ρ™Π°Ρ˜Ρƒ Π΄Π° су ΡšΠΈΡ…ΠΎΠ²ΠΈ Ρ‡ΠΈΡ‚Π°ΠΎΡ†ΠΈ ΡƒΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ са Ρ€Π°Π·Π²ΠΎΡ˜Π΅ΠΌ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, микросСрвисима ΠΈ Π”ΠΎΡ†ΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΠΌΠ°. Π˜Ρ›ΠΈ Ρ›Π΅ΠΌΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡƒΡ‚Π΅ΠΌ. ΠŸΡ€Π²ΠΎ Ρ›Π΅ΠΌΠΎ ΠΏΡ€ΠΈΡ‡Π°Ρ‚ΠΈ ΠΎ Ρ‚ΠΎΠΌΠ΅ ΠΊΠ°ΠΊΠΎ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ засновану Π½Π° микросСрвисима Π½Π° Ρ€Π°Ρ‡ΡƒΠ½Π°Ρ€Ρƒ. Π—Π°Ρ‚ΠΈΠΌ Ρ›Π΅ΠΌΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π°Ρ‚ΠΈ ΠΈΠ·Π³Ρ€Π°Π΄ΡšΡƒ слика ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° Π·Π° сваки микросСрвис. А Π½Π°ΠΊΠΎΠ½ Ρ‚ΠΎΠ³Π° Ρ›Π΅ΠΌΠΎ сС ΡƒΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ са ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ-ΠΎΠΌ ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π°Ρ‚ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Ρƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ заснованС Π½Π° микросСрвисима Ρƒ кластСру којим ΡƒΠΏΡ€Π°Π²Ρ™Π° ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ.

Овај приступ, са постСпСним приступом ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅ΡΡƒ, Π΄Π°Ρ›Π΅ Π΄ΡƒΠ±ΠΈΠ½Ρƒ Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡšΠ° ΠΎΠ½ΠΎΠ³Π° ΡˆΡ‚ΠΎ сС дСшава ΡˆΡ‚ΠΎ јС Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ просСчном Ρ‡ΠΎΠ²Π΅ΠΊΡƒ Π΄Π° Π±ΠΈ Ρ€Π°Π·ΡƒΠΌΠ΅ΠΎ ΠΊΠ°ΠΊΠΎ Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ свС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡˆΠ΅ Ρƒ ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅ΡΡƒ. ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ јС свакако Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½Π° Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡ˜Π°, ΠΏΠΎΠ΄ условом Π΄Π° ΠΎΠ½ΠΈ који ΠΆΠ΅Π»Π΅ Π΄Π° јС Π½Π°ΡƒΡ‡Π΅ Π·Π½Π°Ρ˜Ρƒ Π³Π΄Π΅ ΠΈ ΠΊΠ°ΠΊΠΎ сС користи.

Π‘Π°Π΄Π°, Π±Π΅Π· Π΄Π°Ρ™Π΅Π³ одлагања, Ρ…Π°Ρ˜Π΄Π΅ Π΄Π° ΠΏΠΎΡ‡Π½Π΅ΠΌΠΎ ΠΈ Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€Π°ΠΌΠΎ ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜ΠΈ са којом Ρ›Π΅ΠΌΠΎ Ρ€Π°Π΄ΠΈΡ‚ΠΈ.

ЕкспСримСнтална ΠΏΡ€ΠΈΠΌΠ΅Π½Π°

Наша Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Ρ›Π΅ ΠΎΠ±Π°Π²Ρ™Π°Ρ‚ΠΈ само Ρ˜Π΅Π΄Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Ρƒ. Као ΡƒΠ»Π°Π· ΡƒΠ·ΠΈΠΌΠ° Ρ˜Π΅Π΄Π½Ρƒ Ρ€Π΅Ρ‡Π΅Π½ΠΈΡ†Ρƒ, Π½Π°ΠΊΠΎΠ½ Ρ‡Π΅Π³Π°, користСћи Π°Π»Π°Ρ‚Π΅ Π·Π° Π°Π½Π°Π»ΠΈΠ·Ρƒ тСкста, Π²Ρ€ΡˆΠΈ Π°Π½Π°Π»ΠΈΠ·Ρƒ сСнтимСнта ΠΎΠ²Π΅ Ρ€Π΅Ρ‡Π΅Π½ΠΈΡ†Π΅, Π΄ΠΎΠ±ΠΈΡ˜Π°Ρ˜ΡƒΡ›ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π½Ρƒ Π΅ΠΌΠΎΡ‚ΠΈΠ²Π½ΠΎΠ³ односа Π°ΡƒΡ‚ΠΎΡ€Π° Ρ€Π΅Ρ‡Π΅Π½ΠΈΡ†Π΅ ΠΏΡ€Π΅ΠΌΠ° ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½ΠΎΠΌ ΠΎΠ±Ρ˜Π΅ΠΊΡ‚Ρƒ.

Овако ΠΈΠ·Π³Π»Π΅Π΄Π° Π³Π»Π°Π²Π½ΠΈ ΠΏΡ€ΠΎΠ·ΠΎΡ€ ΠΎΠ²Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅.

ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ Π²ΠΎΠ΄ΠΈΡ‡, Π΄Π΅ΠΎ 1: ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, микроуслугС ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ
Π’Π΅Π± Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π·Π° Π°Π½Π°Π»ΠΈΠ·Ρƒ сСнтимСнта тСкстова

Π‘Π° Ρ‚Π΅Ρ…Π½ΠΈΡ‡ΠΊΠ΅ Ρ‚Π°Ρ‡ΠΊΠ΅ Π³Π»Π΅Π΄ΠΈΡˆΡ‚Π°, Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° сС ΡΠ°ΡΡ‚ΠΎΡ˜ΠΈ ΠΎΠ΄ Ρ‚Ρ€ΠΈ микросСрвиса, ΠΎΠ΄ ΠΊΠΎΡ˜ΠΈΡ… свака Ρ€Π΅ΡˆΠ°Π²Π° ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½ΠΈ скуп Π·Π°Π΄Π°Ρ‚Π°ΠΊΠ°:

  • БА-Π€Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ јС Нгинк Π²Π΅Π± сСрвСр који ΠΎΠΏΡΠ»ΡƒΠΆΡƒΡ˜Π΅ статичкС Π Π΅Π°Ρ†Ρ‚ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅.
  • БА-ВСбАпп јС Π²Π΅Π± Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° написана Π½Π° Јави која ΠΎΠ±Ρ€Π°Ρ’ΡƒΡ˜Π΅ Π·Π°Ρ…Ρ‚Π΅Π²Π΅ са Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π°.
  • БА-Π›ΠΎΠ³ΠΈΡ† јС ΠŸΠΈΡ‚Ρ…ΠΎΠ½ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° која Π²Ρ€ΡˆΠΈ Π°Π½Π°Π»ΠΈΠ·Ρƒ сСнтимСнта Π½Π° тСксту.

Π’Π°ΠΆΠ½ΠΎ јС Π½Π°ΠΏΠΎΠΌΠ΅Π½ΡƒΡ‚ΠΈ Π΄Π° микросСрвис Π½Π΅ ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΈΠ·ΠΎΠ»ΠΎΠ²Π°Π½ΠΎ. Они спроводС ΠΈΠ΄Π΅Ρ˜Ρƒ β€žΡ€Π°Π·Π΄Π²Π°Ρ˜Π°ΡšΠ° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π½ΠΎΡΡ‚ΠΈβ€œ, Π°Π»ΠΈ Ρƒ исто Π²Ρ€Π΅ΠΌΠ΅ ΠΌΠΎΡ€Π°Ρ˜Ρƒ Π΄Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€Π°Ρ˜Ρƒ јСдни са Π΄Ρ€ΡƒΠ³ΠΈΠΌΠ°.

ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ Π²ΠΎΠ΄ΠΈΡ‡, Π΄Π΅ΠΎ 1: ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, микроуслугС ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ
Π’ΠΎΠΊΠΎΠ²ΠΈ ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ° Ρƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜ΠΈ

На Π΄ΠΈΡ˜Π°Π³Ρ€Π°ΠΌΡƒ ΠΈΠ·Π½Π°Π΄, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΠΈ нумСрисанС Ρ„Π°Π·Π΅ систСма, ΠΈΠ»ΡƒΡΡ‚Ρ€ΡƒΡ˜ΡƒΡ›ΠΈ Ρ‚ΠΎΠΊΠΎΠ²Π΅ ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ° Ρƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜ΠΈ. ПоглСдајмо ΠΈΡ…:

  1. ΠŸΡ€Π΅Ρ‚Ρ€Π°ΠΆΠΈΠ²Π°Ρ‡ Π·Π°Ρ…Ρ‚Π΅Π²Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ ΠΎΠ΄ сСрвСра index.html (који, Π·Π°ΡƒΠ·Π²Ρ€Π°Ρ‚, ΠΏΡ€Π΅ΡƒΠ·ΠΈΠΌΠ° Π Π΅Π°Ρ†Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅).
  2. ΠšΠΎΡ€ΠΈΡΠ½ΠΈΠΊ ступа Ρƒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΡ˜Ρƒ са Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜ΠΎΠΌ, ΡˆΡ‚ΠΎ ΡƒΠ·Ρ€ΠΎΠΊΡƒΡ˜Π΅ ΠΏΠΎΠ·ΠΈΠ² Π²Π΅Π± Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜ΠΈ заснованој Π½Π° Π‘ΠΏΡ€ΠΈΠ½Π³Ρƒ.
  3. Π’Π΅Π± Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΡ€ΠΎΡΠ»Π΅Ρ’ΡƒΡ˜Π΅ Π·Π°Ρ…Ρ‚Π΅Π² Π·Π° Π°Π½Π°Π»ΠΈΠ·Ρƒ тСкста Ρƒ ΠŸΠΈΡ‚Ρ…ΠΎΠ½ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ.
  4. ΠŸΠΈΡ‚Ρ…ΠΎΠ½ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π²Ρ€ΡˆΠΈ Π°Π½Π°Π»ΠΈΠ·Ρƒ сСнтимСнта тСкста ΠΈ Π²Ρ€Π°Ρ›Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΊΠ°ΠΎ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ Π½Π° Π·Π°Ρ…Ρ‚Π΅Π².
  5. Π‘ΠΏΡ€ΠΈΠ½Π³ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΡˆΠ°Ρ™Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ Π Π΅Π°Ρ†Ρ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜ΠΈ (која, Π·Π°ΡƒΠ·Π²Ρ€Π°Ρ‚, кориснику ΠΏΡ€ΠΈΠΊΠ°Π·ΡƒΡ˜Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π°Π½Π°Π»ΠΈΠ·Π΅ тСкста).

Код Π·Π° свС ΠΎΠ²Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ сС ΠΌΠΎΠΆΠ΅ ΠΏΡ€ΠΎΠ½Π°Ρ›ΠΈ ΠΎΠ²Π΄Π΅. ΠŸΡ€Π΅ΠΏΠΎΡ€ΡƒΡ‡ΡƒΡ˜Π΅ΠΌ Π²Π°ΠΌ Π΄Π° ΠΎΠ΄ΠΌΠ°Ρ… ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ ΠΎΠ²ΠΎ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π΅ Π·Π° сСбС, ΠΏΠΎΡˆΡ‚ΠΎ јС ΠΏΡ€Π΅Π΄ Π½Π°ΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°Π½ΠΈΠΌΡ™ΠΈΠ²ΠΈΡ… СкспСримСната са њим.

ΠŸΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ заснованС Π½Π° микросСрвисима Π½Π° вашој локалној машини

Π”Π° Π±ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Ρ€Π°Π΄ΠΈΠ»Π°, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ јС Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅ΠΌΠΎ сва Ρ‚Ρ€ΠΈ микросСрвиса. ΠŸΠΎΡ‡Π½ΠΈΠΌΠΎ са Π½Π°Ρ˜ΡΠ»Π°Ρ’ΠΎΠΌ ΠΎΠ΄ свих - ΠΏΡ€Π΅Π΄ΡšΠΎΠΌ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜ΠΎΠΌ.

β–ΠŸΠΎΠ΄Π΅ΡΠΈΡ‚Π΅ Π Π΅Π°Ρ†Ρ‚ Π·Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ Ρ€Π°Π·Π²ΠΎΡ˜

Π”Π° бистС ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΠ»ΠΈ Π Π΅Π°Ρ†Ρ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ јС Π΄Π° инсталиратС НодС.јс ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ ΠΈ НПМ Π½Π° свој Ρ€Π°Ρ‡ΡƒΠ½Π°Ρ€. Када свС ΠΎΠ²ΠΎ инсталиратС, користитС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» Π·Π° Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΡ˜Ρƒ Π΄ΠΎ фасциклС вашСг ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π° sa-frontend ΠΈ ΠΏΠΎΠΊΡ€Π΅Π½ΠΈΡ‚Π΅ слСдСћу ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

npm install

ΠŸΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ΠΌ ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Ρƒ фасцикли node_modules Π±ΠΈΡ›Π΅ ΡƒΡ‡ΠΈΡ‚Π°Π½Π΅ зависности Π Π΅Π°Ρ†Ρ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, Ρ‡ΠΈΡ˜ΠΈ сС записи Π½Π°Π»Π°Π·Π΅ Ρƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ†ΠΈ package.json. Када сС зависности ΠΏΡ€Π΅ΡƒΠ·ΠΌΡƒ Ρƒ исту фасциклу, ΠΏΠΎΠΊΡ€Π΅Π½ΠΈΡ‚Π΅ слСдСћу ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

npm start

Π’ΠΎ јС свС. Π‘Π°Π΄Π° јС Π Π΅Π°Ρ†Ρ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ јој приступити Ρ‚Π°ΠΊΠΎ ΡˆΡ‚ΠΎ Ρ›Π΅Ρ‚Π΅ ΠΎΡ‚ΠΈΡ›ΠΈ Π½Π° слСдСћу адрСсу Ρƒ вашСм ΠΏΡ€Π΅Ρ‚Ρ€Π°ΠΆΠΈΠ²Π°Ρ‡Ρƒ: localhost:3000. ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚ΠΈ Π½Π΅ΡˆΡ‚ΠΎ Ρƒ њСговом ΠΊΠΎΠ΄Ρƒ. ΠžΠ΄ΠΌΠ°Ρ… Ρ›Π΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΠΈ Π΅Ρ„Π΅ΠΊΠ°Ρ‚ ΠΎΠ²ΠΈΡ… ΠΏΡ€ΠΎΠΌΠ΅Π½Π° Ρƒ ΠΏΡ€Π΅Ρ‚Ρ€Π°ΠΆΠΈΠ²Π°Ρ‡Ρƒ. Ово јС ΠΌΠΎΠ³ΡƒΡ›Π΅ Π·Π°Ρ…Π²Π°Ρ™ΡƒΡ˜ΡƒΡ›ΠΈ Ρ‚Π°ΠΊΠΎΠ·Π²Π°Π½ΠΎΡ˜ β€žΠ²Ρ€ΡƒΡ›ΠΎΡ˜β€œ Π·Π°ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π°. Ово Ρ‡ΠΈΠ½ΠΈ Ρ„Ρ€ΠΎΠ½Ρ‚-Π΅Π½Π΄ Ρ€Π°Π·Π²ΠΎΡ˜ Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΈΠΌ ΠΈ ΠΏΡ€ΠΈΡ˜Π°Ρ‚Π½ΠΈΠΌ искуством.

β–ΠŸΡ€ΠΈΠΏΡ€Π΅ΠΌΠ° Π Π΅Π°Ρ†Ρ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ Π·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡšΡƒ

Π£ сврху стварног ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ° Π Π΅Π°Ρ†Ρ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ јС Π΄Π° јС ΠΏΡ€Π΅Ρ‚Π²ΠΎΡ€ΠΈΠΌΠΎ Ρƒ скуп статичких Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΈ Π΄Π° ΠΈΡ… послуТимо ΠΊΠ»ΠΈΡ˜Π΅Π½Ρ‚ΠΈΠΌΠ° који користС Π²Π΅Π± сСрвСр.

Π”Π° бистС Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ Π Π΅Π°Ρ†Ρ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ, ΠΏΠΎΠ½ΠΎΠ²ΠΎ користСћи Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», ΠΈΠ΄ΠΈΡ‚Π΅ Π΄ΠΎ фасциклС sa-frontend ΠΈ ΠΏΠΎΠΊΡ€Π΅Π½ΠΈΡ‚Π΅ слСдСћу ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

npm run build

Ово Ρ›Π΅ ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌ Ρƒ фасцикли ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π° build. Π‘Π°Π΄Ρ€ΠΆΠ°Ρ›Π΅ свС статичкС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½Π΅ Π·Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡΠ°ΡšΠ΅ Π Π΅Π°Ρ†Ρ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅.

β–ΠŸΠΎΡΠ»ΡƒΠΆΠΈΠ²Π°ΡšΠ΅ статичких Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎΠΌΠΎΡ›Ρƒ Нгинк-Π°

ΠŸΡ€Π²ΠΎ ΠΌΠΎΡ€Π°Ρ‚Π΅ Π΄Π° инсталиратС ΠΈ ΠΏΠΎΠΊΡ€Π΅Π½Π΅Ρ‚Π΅ Нгинк Π²Π΅Π± сСрвСр. ОвдС ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π³Π° ΠΏΡ€Π΅ΡƒΠ·Π΅Ρ‚ΠΈ ΠΈ ΠΏΡ€ΠΎΠ½Π°Ρ›ΠΈ упутства ΠΎ Ρ‚ΠΎΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° Π³Π° инсталиратС ΠΈ ΠΏΠΎΠΊΡ€Π΅Π½Π΅Ρ‚Π΅. Π—Π°Ρ‚ΠΈΠΌ ΠΌΠΎΡ€Π°Ρ‚Π΅ ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚ΠΈ ΡΠ°Π΄Ρ€ΠΆΠ°Ρ˜ фасциклС sa-frontend/build Ρƒ фасциклу [your_nginx_installation_dir]/html.

Π‘Π° ΠΎΠ²ΠΈΠΌ приступом, Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° гСнСрисана Ρ‚ΠΎΠΊΠΎΠΌ процСса ΠΈΠ·Π³Ρ€Π°Π΄ΡšΠ΅ Π Π΅Π°Ρ†Ρ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ index.html Π±ΠΈΡ›Π΅ доступан Π½Π° [your_nginx_installation_dir]/html/index.html. Ово јС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΊΠΎΡ˜Ρƒ Нгинк сСрвСр ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈ ΠΊΠ°Π΄Π° јој приступа. Π‘Π΅Ρ€Π²Π΅Ρ€ јС конфигурисан Π΄Π° ΡΠ»ΡƒΡˆΠ° Π½Π° ΠΏΠΎΡ€Ρ‚Ρƒ 80, Π°Π»ΠΈ сС ΠΌΠΎΠΆΠ΅ ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΠ΄ΠΈΡ‚ΠΈ ΠΎΠ½Π°ΠΊΠΎ ΠΊΠ°ΠΊΠΎ Π²Π°ΠΌ јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ ΡƒΡ€Π΅Ρ’ΠΈΠ²Π°ΡšΠ΅ΠΌ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ [your_nginx_installation_dir]/conf/nginx.conf.

Π‘Π°Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ ΠΏΡ€Π΅Ρ‚Ρ€Π°ΠΆΠΈΠ²Π°Ρ‡ ΠΈ ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π° localhost:80. Π’ΠΈΠ΄Π΅Ρ›Π΅Ρ‚Π΅ страницу Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ Π Π΅Π°Ρ†Ρ‚.

ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ Π²ΠΎΠ΄ΠΈΡ‡, Π΄Π΅ΠΎ 1: ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, микроуслугС ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ
Π Π΅Π°Ρ†Ρ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΊΠΎΡ˜Ρƒ ΠΎΠΏΡΠ»ΡƒΠΆΡƒΡ˜Π΅ Нгинк сСрвСр

Ако сада унСсСтС Π½Π΅ΡˆΡ‚ΠΎ Ρƒ ΠΏΠΎΡ™Π΅ 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. Π£Π Π› адрСса Π½Π° ΠΊΠΎΡ˜Ρƒ сС ΡˆΠ°Ρ™Π΅ ПОБВ Π·Π°Ρ…Ρ‚Π΅Π². ΠŸΡ€Π΅Ρ‚ΠΏΠΎΡΡ‚Π°Π²Ρ™Π° сС Π΄Π° Π½Π° овој адрСси ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° која ΠΎΡ‡Π΅ΠΊΡƒΡ˜Π΅ ΠΎΠ²Π°ΠΊΠ²Π΅ Π·Π°Ρ…Ρ‚Π΅Π²Π΅.

2.Π’Π΅Π»ΠΎ Π·Π°Ρ…Ρ‚Π΅Π²Π° послато Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜ΠΈ. Π•Π²ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ‚Π΅Π»Π° Π·Π°Ρ…Ρ‚Π΅Π²Π°:

{
    sentence: "I like yogobella!"
}

3.Када сС ΠΏΡ€ΠΈΠΌΠΈ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ Π½Π° Π·Π°Ρ…Ρ‚Π΅Π², ΡΡ‚Π°ΡšΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ сС Π°ΠΆΡƒΡ€ΠΈΡ€Π°. Ово ΡƒΠ·Ρ€ΠΎΠΊΡƒΡ˜Π΅ Π΄Π° сС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ΅. Ако ΠΏΡ€ΠΈΠΌΠΈΠΌΠΎ ΠΏΠΎΠ΄Π°Ρ‚ΠΊΠ΅ (Ρ‚Ρ˜. ЈБОН ΠΎΠ±Ρ˜Π΅ΠΊΠ°Ρ‚ који садрТи ΡƒΠ»Π°Π·Π½Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΊΠ΅ ΠΈ ΠΈΠ·Ρ€Π°Ρ‡ΡƒΠ½Π°Ρ‚ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ тСкста), ΠΈΠ·Π±Π°Ρ†ΠΈΡ›Π΅ΠΌΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ Polarity, ΠΏΠΎΡˆΡ‚ΠΎ Ρ›Π΅ Π±ΠΈΡ‚ΠΈ ΠΈΡΠΏΡƒΡšΠ΅Π½ΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Ρ˜ΡƒΡ›ΠΈ услови. Овако ΠΎΠΏΠΈΡΡƒΡ˜Π΅ΠΌΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ:

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

Π§ΠΈΠ½ΠΈ сС Π΄Π° ΠΊΠΎΠ΄ Ρ€Π°Π΄ΠΈ ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ Π΄ΠΎΠ±Ρ€ΠΎ. Π¨Ρ‚Π° нијС Ρƒ Ρ€Π΅Π΄Ρƒ са ΠΎΠ²ΠΈΠΌ? Ако прСтпоставитС Π΄Π° Π½Π° адрСси Π½Π° ΠΊΠΎΡ˜Ρƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠΊΡƒΡˆΠ°Π²Π° Π΄Π° ΠΏΠΎΡˆΠ°Ρ™Π΅ ПОБВ Π·Π°Ρ…Ρ‚Π΅Π² још Π½Π΅ ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ Π½ΠΈΡˆΡ‚Π° ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΈΡ…Π²Π°Ρ‚ΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π΄ΠΈ овај Π·Π°Ρ…Ρ‚Π΅Π², ΠΎΠ½Π΄Π° Ρ›Π΅Ρ‚Π΅ Π±ΠΈΡ‚ΠΈ ΠΏΠΎΡ‚ΠΏΡƒΠ½ΠΎ Ρƒ ΠΏΡ€Π°Π²Ρƒ. НаимС, Π·Π° ΠΎΠ±Ρ€Π°Π΄Ρƒ Π·Π°Ρ…Ρ‚Π΅Π²Π° ΠΏΡ€ΠΈΠΌΡ™Π΅Π½ΠΈΡ… Π½Π° http://localhost:8080/sentiment, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ јС Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅ΠΌΠΎ Π²Π΅Π± Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ засновану Π½Π° Π‘ΠΏΡ€ΠΈΠ½Π³Ρƒ.

ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ Π²ΠΎΠ΄ΠΈΡ‡, Π΄Π΅ΠΎ 1: ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, микроуслугС ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ
ΠŸΠΎΡ‚Ρ€Π΅Π±Π½Π° Π½Π°ΠΌ јС Π‘ΠΏΡ€ΠΈΠ½Π³ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° која ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΈΡ…Π²Π°Ρ‚ΠΈ ПОБВ Π·Π°Ρ…Ρ‚Π΅Π²

β–ΠŸΠΎΠ΄Π΅ΡˆΠ°Π²Π°ΡšΠ΅ Π²Π΅Π± Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ заснованС Π½Π° Π‘ΠΏΡ€ΠΈΠ½Π³

Π”Π° бистС ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈ Π‘ΠΏΡ€ΠΈΠ½Π³ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ, Π±ΠΈΡ›Π΅ Π²Π°ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ ΠˆΠ”Πš8 ΠΈ МавСн ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ конфигурисанС ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ°. Када свС ΠΎΠ²ΠΎ инсталиратС, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ наставити са Ρ€Π°Π΄ΠΎΠΌ Π½Π° нашСм ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Ρƒ.

β–ΠŸΠ°ΠΊΠΎΠ²Π°ΡšΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ Ρƒ Ρ˜Π°Ρ€ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ

Π˜Π΄ΠΈΡ‚Π΅, користСћи Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», Π΄ΠΎ фасциклС sa-webapp ΠΈ унСситС слСдСћу ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

mvn install

Након ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ° ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Ρƒ фасцикли sa-webapp Π±ΠΈΡ›Π΅ ΠΊΡ€Π΅ΠΈΡ€Π°Π½ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌ target. ОвдС Ρ›Π΅ сС Π½Π°Π»Π°Π·ΠΈΡ‚ΠΈ Јава Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Π° Ρƒ Ρ˜Π°Ρ€ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ, ΠΊΠΎΡ˜Ρƒ прСдставља Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

β–ΠŸΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ Јава Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅

Π˜Π΄ΠΈΡ‚Π΅ Ρƒ фасциклу target ΠΈ ΠΏΠΎΠΊΡ€Π΅Π½ΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ слСдСћом ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΌ:

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

Π”ΠΎΡ›ΠΈ Ρ›Π΅ Π΄ΠΎ Π³Ρ€Π΅ΡˆΠΊΠ΅ ΠΏΡ€ΠΈΠ»ΠΈΠΊΠΎΠΌ ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°ΡšΠ° ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅. Π”Π° бисмо ΠΏΠΎΡ‡Π΅Π»ΠΈ Π΄Π° Π³Π° ΠΏΠΎΠΏΡ€Π°Π²Ρ™Π°ΠΌΠΎ, ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ΠΈ Π΄Π΅Ρ‚Π°Ρ™Π΅ ΠΈΠ·ΡƒΠ·Π΅Ρ‚Π°ΠΊΠ° Ρƒ ΠΏΠΎΠ΄Π°Ρ†ΠΈΠΌΠ° ΠΏΡ€Π°Ρ›Π΅ΡšΠ° стСка:

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

Π—Π° нас јС ΠΎΠ²Π΄Π΅ најваТнијС помињањС нСмогућности Ρ€Π°Π·Ρ˜Π°ΡˆΡšΠ΅ΡšΠ° Π·Π½Π°Ρ‡Π΅ΡšΠ° sa.logic.api.url. Π₯ајдС Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠΎ ΠΊΠΎΠ΄ Ρƒ ΠΊΠΎΠΌΠ΅ сС Π³Ρ€Π΅ΡˆΠΊΠ° Ρ˜Π°Π²Ρ™Π°.

▍ Анализа ΠΊΠΎΠ΄Π° Јава Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅

Π•Π²ΠΎ исСчка ΠΊΠΎΠ΄Π° Π³Π΄Π΅ јС дошло Π΄ΠΎ Π³Ρ€Π΅ΡˆΠΊΠ΅.

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

  1. Π£ Π‘entimentController ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΏΠΎΡ™Π΅ saLogicApiUrl. ЊСгова врСдност јС ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½Π° ΡΠ²ΠΎΡ˜ΡΡ‚Π²ΠΎΠΌ sa.logic.api.url.
  2. Π›ΠΈΠ½ΠΈΡ˜Π° saLogicApiUrl спаја сС са Π²Ρ€Π΅Π΄Π½ΠΎΡˆΡ›Ρƒ /analyse/sentiment. Π—Π°Ρ˜Π΅Π΄Π½ΠΎ Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Ρ˜Ρƒ адрСсу Π·Π° позивањС микросСрвиса који Π²Ρ€ΡˆΠΈ Π°Π½Π°Π»ΠΈΠ·Ρƒ тСкста.

β–ΠŸΠΎΠ΄Π΅ΡΠΈΡ‚Π΅ врСдност ΡΠ²ΠΎΡ˜ΡΡ‚Π²Π°

Π£ ΠΏΡ€ΠΎΠ»Π΅Ρ›Π΅, стандардни ΠΈΠ·Π²ΠΎΡ€ врСдности ΡΠ²ΠΎΡ˜ΡΡ‚Π²Π° јС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° application.properties, који сС ΠΌΠΎΠΆΠ΅ Π½Π°Ρ›ΠΈ Π½Π° sa-webapp/src/main/resources. Али њСгова ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° нијС јСдини Π½Π°Ρ‡ΠΈΠ½ Π·Π° ΠΏΠΎΡΡ‚Π°Π²Ρ™Π°ΡšΠ΅ врСдности ΡΠ²ΠΎΡ˜ΡΡ‚Π°Π²Π°. Ово сС Ρ‚Π°ΠΊΠΎΡ’Π΅ ΠΌΠΎΠΆΠ΅ ΡƒΡ€Π°Π΄ΠΈΡ‚ΠΈ ΠΏΠΎΠΌΠΎΡ›Ρƒ слСдСћС ΠΊΠΎΠΌΠ°Π½Π΄Π΅:

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

ВрСдност ΠΎΠ²ΠΎΠ³ ΡΠ²ΠΎΡ˜ΡΡ‚Π²Π° Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΡƒΠΊΠ°Π·ΡƒΡ˜Π΅ Π½Π° адрСсу нашС ΠŸΠΈΡ‚Ρ…ΠΎΠ½ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡΠ°ΡšΠ΅ΠΌ, ΠΌΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌΠΎ Π‘ΠΏΡ€ΠΈΠ½Π³ Π²Π΅Π± Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜ΠΈ Π³Π΄Π΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΈΠ΄Π΅ Π΄Π° Π±ΠΈ ΠΈΠ·Π²Ρ€ΡˆΠΈΠ»Π° Π·Π°Ρ…Ρ‚Π΅Π²Π΅ Π·Π° Π°Π½Π°Π»ΠΈΠ·Ρƒ тСкста.

Како Π½Π΅ бисмо ΠΊΠΎΠΌΠΏΠ»ΠΈΠΊΠΎΠ²Π°Π»ΠΈ ΠΆΠΈΠ²ΠΎΡ‚, ΠΎΠ΄Π»ΡƒΡ‡ΠΈΡ›Π΅ΠΌΠΎ Π΄Π° ΠŸΠΈΡ‚Ρ…ΠΎΠ½ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π±ΡƒΠ΄Π΅ доступна Π½Π° адрСси localhost:5000 ΠΈ ΠΏΠΎΡ‚Ρ€ΡƒΠ΄ΠΈΠΌΠΎ сС Π΄Π° Ρ‚ΠΎ Π½Π΅ Π·Π°Π±ΠΎΡ€Π°Π²ΠΈΠΌΠΎ. Као Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Ρ‚ΠΎΠ³Π°, ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ Π‘ΠΏΡ€ΠΈΠ½Π³ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ Ρ›Π΅ ΠΈΠ·Π³Π»Π΅Π΄Π°Ρ‚ΠΈ ΠΎΠ²Π°ΠΊΠΎ:

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

ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ Π²ΠΎΠ΄ΠΈΡ‡, Π΄Π΅ΠΎ 1: ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, микроуслугС ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ
НашСм систСму Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ˜Π΅ ΠŸΠΈΡ‚Ρ…ΠΎΠ½ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°

Π‘Π°Π΄Π° свС ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΡƒΡ€Π°Π΄ΠΈΠΌΠΎ јС Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅ΠΌΠΎ ΠŸΠΈΡ‚Ρ…ΠΎΠ½ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ ΠΈ систСм Ρ›Π΅ Ρ€Π°Π΄ΠΈΡ‚ΠΈ ΠΊΠ°ΠΊΠΎ сС ΠΎΡ‡Π΅ΠΊΡƒΡ˜Π΅.

β–ΠŸΠΎΠ΄Π΅ΡˆΠ°Π²Π°ΡšΠ΅ ΠŸΠΈΡ‚Ρ…ΠΎΠ½ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅

Π”Π° бистС ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΠ»ΠΈ ΠŸΠΈΡ‚Ρ…ΠΎΠ½ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ, ΠΌΠΎΡ€Π°Ρ‚Π΅ ΠΈΠΌΠ°Ρ‚ΠΈ инсталиранС ΠŸΠΈΡ‚Ρ…ΠΎΠ½ 3 ΠΈ Пип, Π° ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Ρ˜ΡƒΡ›Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ° ΠΌΠΎΡ€Π°Ρ˜Ρƒ Π±ΠΈΡ‚ΠΈ исправно подСшСнС.

β–Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ зависности

Π˜Π΄ΠΈΡ‚Π΅ Ρƒ фасциклу свог ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π° sa-logic/sa ΠΈ ΠΏΠΎΠΊΡ€Π΅Π½ΠΈΡ‚Π΅ слСдСћС ΠΊΠΎΠΌΠ°Π½Π΄Π΅:

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

β–ΠŸΠΎΠΊΡ€Π΅Π½ΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ

Након ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ° зависности, спрСмни смо Π·Π° ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅:

python sentiment_analysis.py

Након ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ° ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅, Π±ΠΈΡ›Π΅ Π½Π°ΠΌ Ρ€Π΅Ρ‡Π΅Π½ΠΎ слСдСћС:

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

Π’ΠΎ Π·Π½Π°Ρ‡ΠΈ Π΄Π° јС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚Π° ΠΈ Π΄Π° Ρ‡Π΅ΠΊΠ° Π½Π° Π·Π°Ρ…Ρ‚Π΅Π²Π΅ Π½Π° localhost:5000/

▍ Π˜ΡΡ‚Ρ€Π°ΠΆΠΈΠ²Π°ΡšΠ΅ ΠΊΠΎΠ΄Π°

Π₯ајдС Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π°ΠΌΠΎ ΠΊΠΎΠ΄ ΠŸΠΈΡ‚Ρ…ΠΎΠ½ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ Π΄Π° бисмо Ρ€Π°Π·ΡƒΠΌΠ΅Π»ΠΈ ΠΊΠ°ΠΊΠΎ ΠΎΠ½ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π° Π½Π° Π·Π°Ρ…Ρ‚Π΅Π²Π΅:

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

  1. Π˜Π½ΠΈΡ†ΠΈΡ˜Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° ΠΎΠ±Ρ˜Π΅ΠΊΡ‚Π° Flask.
  2. ΠžΠ΄Ρ€Π΅Ρ’ΠΈΠ²Π°ΡšΠ΅ адрСсС Π·Π° ΠΎΠ±Π°Π²Ρ™Π°ΡšΠ΅ ПОБВ Π·Π°Ρ…Ρ‚Π΅Π²Π° ΠΏΡ€Π΅ΠΌΠ° њој.
  3. ΠŸΡ€Π΅ΡƒΠ·ΠΈΠΌΠ°ΡšΠ΅ ΡΠ²ΠΎΡ˜ΡΡ‚Π²Π° sentence ΠΎΠ΄ ΠΎΡ€Π³Π°Π½Π° Π·Π°Ρ…Ρ‚Π΅Π²Π°.
  4. Π˜Π½ΠΈΡ†ΠΈΡ˜Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ ΠΎΠ±Ρ˜Π΅ΠΊΡ‚Π° TextBlob ΠΈ добијањС врСдности polarity Π·Π° ΠΏΡ€Π²Ρƒ Ρ€Π΅Ρ‡Π΅Π½ΠΈΡ†Ρƒ ΠΏΡ€ΠΈΠΌΡ™Π΅Π½Ρƒ Ρƒ Ρ‚Π΅Π»Ρƒ Π·Π°Ρ…Ρ‚Π΅Π²Π° (Ρƒ нашСм ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ ΠΎΠ²ΠΎ јС јСдина Ρ€Π΅Ρ‡Π΅Π½ΠΈΡ†Π° послата Π½Π° Π°Π½Π°Π»ΠΈΠ·Ρƒ).
  5. Π’Ρ€Π°Ρ›Π°ΡšΠ΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π° Ρ‡ΠΈΡ˜Π΅ Ρ‚Π΅Π»ΠΎ садрТи тСкст Ρ€Π΅Ρ‡Π΅Π½ΠΈΡ†Π΅ ΠΈ ΠΈΠ·Ρ€Π°Ρ‡ΡƒΠ½Π°Ρ‚ΠΈ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π·Π° ΡšΡƒ polarity.
  6. ΠŸΠΎΠΊΡ€Π΅Π½ΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ Ѐласк, која Ρ›Π΅ Π±ΠΈΡ‚ΠΈ доступна Π½Π° 0.0.0.0:5000 (ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΡƒ приступити ΠΈ ΠΏΠΎΠΌΠΎΡ›Ρƒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ˜Π΅ обрасца localhost:5000).

ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΠ΅ којС Ρ‡ΠΈΠ½Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ сада Ρ€Π°Π΄Π΅. Они су подСшСни Π΄Π° мСђусобно ΠΊΠΎΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€Π°Ρ˜Ρƒ. Овако ΠΈΠ·Π³Π»Π΅Π΄Π° Π΄ΠΈΡ˜Π°Π³Ρ€Π°ΠΌ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ Ρƒ овој Ρ„Π°Π·ΠΈ Ρ€Π°Π΄Π°.

ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ Π²ΠΎΠ΄ΠΈΡ‡, Π΄Π΅ΠΎ 1: ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, микроуслугС ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ
Π‘Π²ΠΈ микросСрвиси који Ρ‡ΠΈΠ½Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ су Π΄ΠΎΠ²Π΅Π΄Π΅Π½ΠΈ Ρƒ Ρ€Π°Π΄Π½ΠΎ ΡΡ‚Π°ΡšΠ΅

Π‘Π°Π΄Π°, ΠΏΡ€Π΅ Π½Π΅Π³ΠΎ ΡˆΡ‚ΠΎ наставитС, ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ ΡΠ²ΠΎΡ˜Ρƒ Π Π΅Π°Ρ†Ρ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ Ρƒ ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°Ρ‡Ρƒ ΠΈ ΠΏΠΎΠΊΡƒΡˆΠ°Ρ˜Ρ‚Π΅ Π΄Π° Ρ€Π°ΡˆΡ‡Π»Π°Π½ΠΈΡ‚Π΅ Π½Π΅ΠΊΡƒ Ρ€Π΅Ρ‡Π΅Π½ΠΈΡ†Ρƒ са њом. Ако јС свС ΡƒΡ€Π°Ρ’Π΅Π½ΠΎ исправно - Π½Π°ΠΊΠΎΠ½ притиска Π½Π° Π΄ΡƒΠ³ΠΌΠ΅ Send Π²ΠΈΠ΄Π΅Ρ›Π΅Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π΅ Π°Π½Π°Π»ΠΈΠ·Π΅ испод тСкстуалног ΠΏΠΎΡ™Π°.

Π£ слСдСћСм ΠΎΠ΄Π΅Ρ™ΠΊΡƒ Ρ›Π΅ΠΌΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΠΈ ΠΎ Ρ‚ΠΎΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅ΠΌΠΎ нашС микросСрвисС Ρƒ Π”ΠΎΡ†ΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΠΌΠ°. Ово јС Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ Π΄Π° Π±ΠΈ сС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΡ€ΠΈΠΏΡ€Π΅ΠΌΠΈΠ»Π° Π·Π° Ρ€Π°Π΄ Π½Π° ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ кластСру.

Π”ΠΎΡ†ΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ

ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ јС систСм Π·Π° Π°ΡƒΡ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡ˜Ρƒ ΠΏΠΎΡΡ‚Π°Π²Ρ™Π°ΡšΠ°, ΡΠΊΠ°Π»ΠΈΡ€Π°ΡšΠ° ΠΈ ΡƒΠΏΡ€Π°Π²Ρ™Π°ΡšΠ° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΡΠΊΠΈΠΌ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°ΠΌΠ°. Π’Π°ΠΊΠΎΡ’Π΅ сС Π½Π°Π·ΠΈΠ²Π° β€žΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΡΠΊΠΈ ΠΎΡ€ΠΊΠ΅ΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€β€œ. Ако ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ Ρ€Π°Π΄ΠΈ са ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΠΌΠ°, ΠΎΠ½Π΄Π° ΠΏΡ€Π΅ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ° ΠΎΠ²ΠΎΠ³ систСма ΠΌΠΎΡ€Π°ΠΌΠΎ ΠΏΡ€Π²ΠΎ Π΄Π° Π½Π°Π±Π°Π²ΠΈΠΌΠΎ ΠΎΠ²Π΅ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π΅. Али ΠΏΡ€Π²ΠΎ, Ρ…Π°Ρ˜Π΄Π΅ Π΄Π° ΠΏΡ€ΠΈΡ‡Π°ΠΌΠΎ ΠΎ Ρ‚ΠΎΠΌΠ΅ ΡˆΡ‚Π° су ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ. МоТда Π½Π°Ρ˜Π±ΠΎΡ™ΠΈ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ Π½Π° ΠΏΠΈΡ‚Π°ΡšΠ΅ ΡˆΡ‚Π° јС Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ сС Π½Π°Ρ›ΠΈ Ρƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π·Π° Π”ΠΎΡ†ΠΊΠ΅Ρ€:

Π‘Π»ΠΈΠΊΠ° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° јС Π»Π°Π³Π°Π½, самосталан, ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ који садрТи Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ, која ΡƒΠΊΡ™ΡƒΡ‡ΡƒΡ˜Π΅ свС ΡˆΡ‚ΠΎ јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ Π·Π° њСно ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅: ΠΊΠΎΠ΄ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ΅ Π·Π° ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°ΡšΠ΅, систСмскС Π°Π»Π°Ρ‚Π΅ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, подСшавања. ΠšΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΡΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ сС ΠΌΠΎΠ³Ρƒ користити Ρƒ Π›ΠΈΠ½ΡƒΠΊ ΠΈ Виндовс ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠΈΠΌΠ° ΠΈ ΡƒΠ²Π΅ΠΊ Ρ›Π΅ Ρ€Π°Π΄ΠΈΡ‚ΠΈ исто Π±Π΅Π· ΠΎΠ±Π·ΠΈΡ€Π° Π½Π° инфраструктуру.

Π’ΠΎ Π·Π½Π°Ρ‡ΠΈ Π΄Π° сС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ Π½Π° Π±ΠΈΠ»ΠΎ ΠΊΠΎΠΌ Ρ€Π°Ρ‡ΡƒΠ½Π°Ρ€Ρƒ, ΡƒΠΊΡ™ΡƒΡ‡ΡƒΡ˜ΡƒΡ›ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π΅ сСрвСрС, Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ којС сС Π½Π°Π»Π°Π·Π΅ Ρƒ њима Ρ›Π΅ Ρ€Π°Π΄ΠΈΡ‚ΠΈ исто Ρƒ Π±ΠΈΠ»ΠΎ ΠΊΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΡƒ.

Π”Π° бисмо истраТили карактСристикС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° ΠΈ ΡƒΠΏΠΎΡ€Π΅Π΄ΠΈΠ»ΠΈ ΠΈΡ… са Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π½Π°Ρ‡ΠΈΠ½ΠΈΠΌΠ° ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, поглСдајмо ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΡΠ»ΡƒΠΆΠΈΠ²Π°ΡšΠ° Π Π΅Π°Ρ†Ρ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ ΠΏΠΎΠΌΠΎΡ›Ρƒ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π΅ машинС ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°.

β–ΠŸΠΎΡΠ»ΡƒΠΆΠΈΠ²Π°ΡšΠ΅ статичких Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π Π΅Π°Ρ†Ρ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ ΠΏΠΎΠΌΠΎΡ›Ρƒ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π΅ машинС

ΠŸΠΎΠΊΡƒΡˆΠ°Π²Π°Ρ˜ΡƒΡ›ΠΈ Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΡ˜Π΅ΠΌΠΎ услугу статичких Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° користСћи Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π΅ машинС, Π½Π°ΠΈΡ›ΠΈ Ρ›Π΅ΠΌΠΎ Π½Π° слСдСћС нСдостаткС:

  1. НССфикасно ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ рСсурса, ΠΏΠΎΡˆΡ‚ΠΎ јС свака Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° машина ΠΏΡƒΠ½ΠΎΠΏΡ€Π°Π²Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΈ систСм.
  2. Зависност ΠΎΠ΄ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅. Оно ΡˆΡ‚ΠΎ Ρ€Π°Π΄ΠΈ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎΠΌ Ρ€Π°Ρ‡ΡƒΠ½Π°Ρ€Ρƒ ΠΌΠΎΠΆΠ΄Π° Π½Π΅Ρ›Π΅ Ρ€Π°Π΄ΠΈΡ‚ΠΈ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ сСрвСру.
  3. Π‘ΠΏΠΎΡ€ΠΎ ΠΈ рСсурсно ΠΈΠ½Ρ‚Π΅Π½Π·ΠΈΠ²Π½ΠΎ ΡΠΊΠ°Π»ΠΈΡ€Π°ΡšΠ΅ Ρ€Π΅ΡˆΠ΅ΡšΠ° заснованог Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½ΠΎΡ˜ машини.

ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ Π²ΠΎΠ΄ΠΈΡ‡, Π΄Π΅ΠΎ 1: ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, микроуслугС ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ
Нгинк Π²Π΅Π± сСрвСр који ΠΎΠΏΡΠ»ΡƒΠΆΡƒΡ˜Π΅ статичкС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ којС Ρ€Π°Π΄Π΅ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½ΠΎΡ˜ машини

Ако сС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ користС Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ΅ сличног ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΎΠ½Π΄Π° сС, Ρƒ ΠΏΠΎΡ€Π΅Ρ’Π΅ΡšΡƒ са Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½ΠΈΠΌ машинама, ΠΌΠΎΠ³Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ΠΈΡ‚ΠΈ слСдСћС прСдности:

  1. Ефикасно ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ рСсурса: Ρ€Π°Π΄ са ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΈΠΌ систСмом користСћи Π”ΠΎΡ†ΠΊΠ΅Ρ€.
  2. НСзависно ΠΎΠ΄ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅. ΠšΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ који ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅ Π½Π° свом Ρ€Π°Ρ‡ΡƒΠ½Π°Ρ€Ρƒ Ρ›Π΅ Ρ€Π°Π΄ΠΈΡ‚ΠΈ Π±ΠΈΠ»ΠΎ Π³Π΄Π΅.
  3. Π›Π°Π³Π°Π½ΠΎ ΠΏΠΎΡΡ‚Π°Π²Ρ™Π°ΡšΠ΅ ΠΊΡ€ΠΎΠ· ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Ρƒ слојСва сликС.

ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ Π²ΠΎΠ΄ΠΈΡ‡, Π΄Π΅ΠΎ 1: ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, микроуслугС ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ
Нгинк Π²Π΅Π± сСрвСр који ΠΎΠΏΡΠ»ΡƒΠΆΡƒΡ˜Π΅ статичкС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ којС Ρ€Π°Π΄Π΅ Ρƒ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Ρƒ

Π£ΠΏΠΎΡ€Π΅Π΄ΠΈΠ»ΠΈ смо Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π΅ машинС ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π΅ само Ρƒ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Ρ‚Π°Ρ‡Π°ΠΊΠ°, Π°Π»ΠΈ ΠΈ ΠΎΠ²ΠΎ јС Π΄ΠΎΠ²ΠΎΡ™Π½ΠΎ Π΄Π° стСкнСмо утисак ΠΎ прСдностима ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°. ОвдС ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ½Π°Ρ›ΠΈ Π΄Π΅Ρ‚Π°Ρ™Π΅ ΠΎ Π”ΠΎΡ†ΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΠΌΠ°.

β–Π˜Π·Ρ€Π°Π΄Π° сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° Π·Π° Π Π΅Π°Ρ†Ρ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ

Основни Π³Ρ€Π°Π΄ΠΈΠ²Π½ΠΈ Π±Π»ΠΎΠΊ Π”ΠΎΡ†ΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° јС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Dockerfile. На ΠΏΠΎΡ‡Π΅Ρ‚ΠΊΡƒ ΠΎΠ²ΠΎΠ³ Ρ„Π°Ρ˜Π»Π° сС ΠΏΡ€Π°Π²ΠΈ запис основнС сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°, Π·Π°Ρ‚ΠΈΠΌ слСди Π½ΠΈΠ· ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ˜Π° којС ΠΏΠΎΠΊΠ°Π·ΡƒΡ˜Ρƒ ΠΊΠ°ΠΊΠΎ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ који Ρ›Π΅ Π·Π°Π΄ΠΎΠ²ΠΎΡ™ΠΈΡ‚ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π΅ ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅.

ΠŸΡ€Π΅ Π½Π΅Π³ΠΎ ΡˆΡ‚ΠΎ ΠΏΠΎΡ‡Π½Π΅ΠΌΠΎ Π΄Π° Ρ€Π°Π΄ΠΈΠΌΠΎ са Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΎΠΌ Dockerfile, подсСтимо сС ΡˆΡ‚Π° смо ΡƒΡ€Π°Π΄ΠΈΠ»ΠΈ Π΄Π° ΠΏΡ€ΠΈΠΏΡ€Π΅ΠΌΠΈΠΌΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ Π Π΅Π°Ρ†Ρ‚ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ Π·Π° ΠΎΡ‚ΠΏΡ€Π΅ΠΌΠ°ΡšΠ΅ Π½Π° Нгинк сСрвСр:

  1. ΠŸΡ€Π°Π²Ρ™Π΅ΡšΠ΅ Π Π΅Π°Ρ†Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° (npm run build).
  2. ΠŸΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ Нгинк сСрвСра.
  3. ΠšΠΎΠΏΠΈΡ€Π°ΡšΠ΅ ΡΠ°Π΄Ρ€ΠΆΠ°Ρ˜Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΠ° build ΠΈΠ· фасциклС ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π° sa-frontend Ρƒ фасциклу сСрвСра nginx/html.

Испод ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΠΈ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π΅ ΠΈΠ·ΠΌΠ΅Ρ’Ρƒ ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° ΠΈ Π³ΠΎΡ€ΡšΠΈΡ… ΠΊΠΎΡ€Π°ΠΊΠ° који сС ΠΎΠ±Π°Π²Ρ™Π°Ρ˜Ρƒ Π½Π° вашСм Π»ΠΎΠΊΠ°Π»Π½ΠΎΠΌ Ρ€Π°Ρ‡ΡƒΠ½Π°Ρ€Ρƒ.

β–ΠŸΡ€ΠΈΠΏΡ€Π΅ΠΌΠ° Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅-Π° Π·Π° БА-Π€Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ

Упутства која Ρ›Π΅ Π±ΠΈΡ‚ΠΈ садрТана Ρƒ Dockerfile Π·Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Ρƒ SA-Frontend, Ρ‡ΠΈΠ½Π΅ само Π΄Π²Π° Ρ‚ΠΈΠΌΠ°. Π§ΠΈΡšΠ΅Π½ΠΈΡ†Π° јС Π΄Π° јС Ρ€Π°Π·Π²ΠΎΡ˜Π½ΠΈ Ρ‚ΠΈΠΌ Нгинк-Π° ΠΏΡ€ΠΈΠΏΡ€Π΅ΠΌΠΈΠΎ основну ΠΈΠΌΠ°Π³Π΅ Π·Π° Нгинк, који Ρ›Π΅ΠΌΠΎ користити Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ нашС сликС. Ово су Π΄Π²Π° ΠΊΠΎΡ€Π°ΠΊΠ° која Ρ‚Ρ€Π΅Π±Π° Π΄Π° опишСмо:

  1. Основа сликС Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π±ΡƒΠ΄Π΅ Нгинк слика.
  2. Π€ΠΎΠ»Π΄Π΅Ρ€ ЦонтСнтс sa-frontend/build Ρ‚Ρ€Π΅Π±Π° ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚ΠΈ Ρƒ фасциклу са сликама nginx/html.

Ако ΠΏΡ€Π΅Ρ’Π΅Ρ‚Π΅ са ΠΎΠ²ΠΎΠ³ описа Π½Π° Ρ„Π°Ρ˜Π» Dockerfile, ΠΎΠ½Π΄Π° Ρ›Π΅ ΠΈΠ·Π³Π»Π΅Π΄Π°Ρ‚ΠΈ ΠΎΠ²Π°ΠΊΠΎ:

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

Као ΡˆΡ‚ΠΎ Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΎΠ²Π΄Π΅ јС свС Π²Ρ€Π»ΠΎ Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ, Π° ΡΠ°Π΄Ρ€ΠΆΠ°Ρ˜ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ сС Ρ‡Π°ΠΊ испоставило Π΄Π° јС ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ Ρ‡ΠΈΡ‚Ρ™ΠΈΠ² ΠΈ Ρ€Π°Π·ΡƒΠΌΡ™ΠΈΠ². Ова Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π³ΠΎΠ²ΠΎΡ€ΠΈ систСму Π΄Π° сними слику nginx са свимС ΡˆΡ‚ΠΎ сС Π²Π΅Ρ› Π½Π°Π»Π°Π·ΠΈ Ρƒ ΡšΠ΅ΠΌΡƒ ΠΈ ΠΊΠΎΠΏΠΈΡ€Π°Ρ˜Ρ‚Π΅ ΡΠ°Π΄Ρ€ΠΆΠ°Ρ˜ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΠ° build Ρƒ ΠΈΠΌΠ΅Π½ΠΈΠΊ nginx/html.

ОвдС ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠΌΠ°Ρ‚ΠΈ ΠΏΠΈΡ‚Π°ΡšΠ΅ ΠΎ Ρ‚ΠΎΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π·Π½Π°ΠΌ Π³Π΄Π΅ Ρ‚Π°Ρ‡Π½ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ ΠΈΠ· фасциклС build, односно ΠΎΠ΄Π°ΠΊΠ»Π΅ јС ΠΏΡƒΡ‚ дошао /usr/share/nginx/html. Π£ ствари, Π½ΠΈ ΠΎΠ²Π΄Π΅ Π½Π΅ΠΌΠ° Π½ΠΈΡˆΡ‚Π° ΠΊΠΎΠΌΠΏΠ»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ. Π§ΠΈΡšΠ΅Π½ΠΈΡ†Π° јС Π΄Π° сС Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π΅ ΠΌΠΎΠ³Ρƒ Π½Π°Ρ›ΠΈ Ρƒ Опис слика.

β–Π˜Π·Ρ€Π°Π΄Π° сликС ΠΈ ΠΎΡ‚ΠΏΡ€Π΅ΠΌΠ°ΡšΠ΅ Ρƒ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π΅

ΠŸΡ€Π΅ Π½Π΅Π³ΠΎ ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° Ρ€Π°Π΄ΠΈΠΌΠΎ са Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΌ сликом, ΠΌΠΎΡ€Π°ΠΌΠΎ Π΄Π° јС Π³ΡƒΡ€Π½Π΅ΠΌΠΎ Ρƒ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ слика. Π”Π° бисмо Ρ‚ΠΎ ΡƒΡ€Π°Π΄ΠΈΠ»ΠΈ, користићСмо бСсплатну ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Π·Π° Ρ…ΠΎΡΡ‚ΠΎΠ²Π°ΡšΠ΅ слика Ρƒ ΠΎΠ±Π»Π°ΠΊΡƒ Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π₯ΡƒΠ±. Π£ овој Ρ„Π°Π·ΠΈ Ρ€Π°Π΄Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ јС Π΄Π° ΡƒΡ€Π°Π΄ΠΈΡ‚Π΅ слСдСћС:

  1. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜ Π»ΡƒΡ‡ΠΊΠΈ Ρ€Π°Π΄Π½ΠΈΠΊ.
  2. Π Π΅Π³ΠΈΡΡ‚Ρ€ΡƒΡ˜Ρ‚Π΅ сС Π½Π° Π²Π΅Π± Π»ΠΎΠΊΠ°Ρ†ΠΈΡ˜ΠΈ Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π₯ΡƒΠ±.
  3. ΠŸΡ€ΠΈΡ˜Π°Π²ΠΈΡ‚Π΅ сС Π½Π° свој Π½Π°Π»ΠΎΠ³ Ρ‚Π°ΠΊΠΎ ΡˆΡ‚ΠΎ Ρ›Π΅Ρ‚Π΅ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ слСдСћу ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Ρƒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρƒ:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Π‘Π°Π΄Π° ΠΌΠΎΡ€Π°Ρ‚Π΅ Π΄Π° користитС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» Π΄Π° бистС ΠΎΡ‚ΠΈΡˆΠ»ΠΈ ​​у Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌ sa-frontend ΠΈ Ρ‚Π°ΠΌΠΎ ΠΏΠΎΠΊΡ€Π΅Π½ΠΈΡ‚Π΅ слСдСћу ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

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

ОвдС ΠΈ Π΄Π°Ρ™Π΅ Ρƒ сличним ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠ° $DOCKER_USER_ID Ρ‚Ρ€Π΅Π±Π° Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΠΈ вашим Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π₯ΡƒΠ± корисничким ΠΈΠΌΠ΅Π½ΠΎΠΌ. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, овај Π΄Π΅ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΌΠΎΠΆΠ΅ ΠΈΠ·Π³Π»Π΅Π΄Π°Ρ‚ΠΈ ΠΎΠ²Π°ΠΊΠΎ: rinormaloku/sentiment-analysis-frontend.

Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ, ΠΎΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° сС ΠΌΠΎΠΆΠ΅ скратити ΡƒΠΊΠ»Π°ΡšΠ°ΡšΠ΅ΠΌ ΠΈΠ· њС -f Dockerfile, ΠΏΠΎΡˆΡ‚ΠΎ ΠΎΠ²Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π²Π΅Ρ› ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ Ρƒ фасцикли Ρƒ којој ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°ΠΌΠΎ ΠΎΠ²Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ.

Π”Π° бисмо Π³ΠΎΡ‚ΠΎΠ²Ρƒ слику послали Ρƒ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π΅, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° Π½Π°ΠΌ јС слСдСћа ΠΊΠΎΠΌΠ°Π½Π΄Π°:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Након ΡˆΡ‚ΠΎ Π³Π° Π·Π°Π²Ρ€ΡˆΠΈΡ‚Π΅, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ листу ΡΠ²ΠΎΡ˜ΠΈΡ… ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π° Π½Π° Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π₯ΡƒΠ±-Ρƒ Π΄Π° бистС Ρ€Π°Π·ΡƒΠΌΠ΅Π»ΠΈ Π΄Π° Π»ΠΈ јС ΠΎΡ‚ΠΏΡ€Π΅ΠΌΠ°ΡšΠ΅ сликС Ρƒ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ Ρƒ ΠΎΠ±Π»Π°ΠΊΡƒ Π±ΠΈΠ»ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

β–ΠŸΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°

Π‘Π°Π΄Π° свако ΠΌΠΎΠΆΠ΅ ΠΏΡ€Π΅ΡƒΠ·Π΅Ρ‚ΠΈ ΠΈ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ слику, ΠΏΠΎΠ·Π½Π°Ρ‚Ρƒ ΠΊΠ°ΠΎ $DOCKER_USER_ID/sentiment-analysis-frontend. Π”Π° бистС Ρ‚ΠΎ ΡƒΡ€Π°Π΄ΠΈΠ»ΠΈ, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ јС Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅Ρ‚Π΅ слСдСћи Π½ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ:

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

Π‘Π°Π΄Π° јС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚, ΠΌΠΎΠΆΠ΅ΠΌΠΎ наставити са Ρ€Π°Π΄ΠΎΠΌ ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΡ… слика којС су Π½Π°ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π΅. Али ΠΏΡ€Π΅ Π½Π΅Π³ΠΎ ΡˆΡ‚ΠΎ наставимо, Ρ…Π°Ρ˜Π΄Π΅ Π΄Π° Ρ€Π°Π·ΡƒΠΌΠ΅ΠΌΠΎ дизајн 80:80, који сС ΠΏΠΎΡ˜Π°Π²Ρ™ΡƒΡ˜Π΅ Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ сликС ΠΈ ΠΌΠΎΠΆΠ΅ ΠΈΠ·Π³Π»Π΅Π΄Π°Ρ‚ΠΈ Π·Π±ΡƒΡšΡƒΡ˜ΡƒΡ›Π΅.

  • ΠŸΡ€Π²ΠΈ Π±Ρ€ΠΎΡ˜ 80 β€” ΠΎΠ²ΠΎ јС Π±Ρ€ΠΎΡ˜ ΠΏΠΎΡ€Ρ‚Π° хоста (односно, Π»ΠΎΠΊΠ°Π»Π½ΠΈ Ρ€Π°Ρ‡ΡƒΠ½Π°Ρ€).
  • Π”Ρ€ΡƒΠ³ΠΈ Π±Ρ€ΠΎΡ˜ 80 јС Π»ΡƒΠΊΠ° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° Π½Π° ΠΊΠΎΡ˜Ρƒ Ρ‚Ρ€Π΅Π±Π° прослСдити Π·Π°Ρ…Ρ‚Π΅Π².

Π Π°Π·ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ слСдСћу ΠΈΠ»ΡƒΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Ρƒ.

ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ Π²ΠΎΠ΄ΠΈΡ‡, Π΄Π΅ΠΎ 1: ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, микроуслугС ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ
ΠŸΠΎΡ€Ρ‚ Π€ΠΎΡ€Π²Π°Ρ€Π΄ΠΈΠ½Π³

БистСм прСусмСрава Π·Π°Ρ…Ρ‚Π΅Π²Π΅ са ΠΏΠΎΡ€Ρ‚Π° <hostPort> ΠΏΠΎ Π»ΡƒΡ†ΠΈ <containerPort>. Односно, приступ Π»ΡƒΡ†ΠΈ 80 Ρ€Π°Ρ‡ΡƒΠ½Π°Ρ€ сС прСусмСрава Π½Π° ΠΏΠΎΡ€Ρ‚ 80 ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€.

ΠŸΠΎΡˆΡ‚ΠΎ јС ΠΏΡ€ΠΈΡΡ‚Π°Π½ΠΈΡˆΡ‚Π΅ 80 ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎΠΌ Ρ€Π°Ρ‡ΡƒΠ½Π°Ρ€Ρƒ, Ρ‚Π°Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ приступити Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜ΠΈ са ΠΎΠ²ΠΎΠ³ Ρ€Π°Ρ‡ΡƒΠ½Π°Ρ€Π° Π½Π° адрСси localhost:80. Ако ваш систСм Π½Π΅ ΠΏΠΎΠ΄Ρ€ΠΆΠ°Π²Π° Π”ΠΎΡ†ΠΊΠ΅Ρ€, Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° сС ΠΌΠΎΠΆΠ΅ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ Π½Π° Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½ΠΎΡ˜ машини, Ρ‡ΠΈΡ˜Π° Ρ›Π΅ адрСса ΠΈΠ·Π³Π»Π΅Π΄Π°Ρ‚ΠΈ ΠΊΠ°ΠΎ <docker-machine ip>:80. Π”Π° бистС сазнали ИП адрСсу Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π΅ машинС, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ користити ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker-machine ip.

Π£ ΠΎΠ²ΠΎΠΌ Ρ‚Ρ€Π΅Π½ΡƒΡ‚ΠΊΡƒ, Π½Π°ΠΊΠΎΠ½ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ° Ρ„Ρ€ΠΎΠ½Ρ‚-Π΅Π½Π΄ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, Ρ‚Ρ€Π΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρƒ могућности Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ ΡšΠ΅Π³ΠΎΠ²Ρƒ страницу Ρƒ ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°Ρ‡Ρƒ.

▍ДатотСка .Π΄ΠΎΡ†ΠΊΠ΅Ρ€ΠΈΠ³Π½ΠΎΡ€Π΅

ΠŸΡ€ΠΈΠΊΡƒΠΏΡ™Π°ΡšΠ΅ сликС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ 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. Π‘Π°Π΄Π° Ρ›Π΅ ΠΈΠ·Π³Ρ€Π°Π΄ΡšΠ° сликС Ρ‚Ρ€Π°Ρ˜Π°Ρ‚ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ сСкунди.

Π₯ајдС Π΄Π° сада Ρ€Π°Π΄ΠΈΠΌΠΎ Π½Π° слици Π·Π° Јава Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ.

β–Π˜Π·Ρ€Π°Π΄Π° сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° Π·Π° Јава Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ

Π—Π½Π°Ρ‚Π΅ ΡˆΡ‚Π°, Π²Π΅Ρ› стС Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈ свС ΡˆΡ‚ΠΎ Π²Π°ΠΌ јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ Π΄Π° бистС ΠΊΡ€Π΅ΠΈΡ€Π°Π»ΠΈ сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°. Π—Π°Ρ‚ΠΎ Ρ›Π΅ овај ΠΎΠ΄Π΅Ρ™Π°ΠΊ Π±ΠΈΡ‚ΠΈ Π²Π΅ΠΎΠΌΠ° ΠΊΡ€Π°Ρ‚Π°ΠΊ.

Otvorite datoteku Dockerfileкоји сС Π½Π°Π»Π°Π·ΠΈ Ρƒ фасцикли ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π° sa-webapp. Ако ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚Π΅ тСкст ΠΎΠ²Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅, Π²ΠΈΠ΄Π΅Ρ›Π΅Ρ‚Π΅ само Π΄Π²Π΅ Π½ΠΎΠ²Π΅ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ˜Π΅ Ρƒ њој, ΠΏΠΎΡ‡Π΅Π²ΡˆΠΈ ΠΎΠ΄ ΠΊΡ™ΡƒΡ‡Π½ΠΈΡ… Ρ€Π΅Ρ‡ΠΈ ENV ΠΈ EXPOSE:

ENV SA_LOGIC_API_URL http://localhost:5000
…
EXPOSE 8080

ΠšΡ™ΡƒΡ‡Π½Π° Ρ€Π΅Ρ‡ ENV ΠžΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π²Π°ΠΌ Π΄Π° Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ° ΡƒΠ½ΡƒΡ‚Π°Ρ€ Π”ΠΎΡ†ΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ, Ρƒ нашСм ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π΄Π° Π½Π°Π²Π΅Π΄Π΅Ρ‚Π΅ Π£Π Π› Π·Π° приступ АПИ-Ρ˜Ρƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ која Π²Ρ€ΡˆΠΈ Π°Π½Π°Π»ΠΈΠ·Ρƒ тСкста.

ΠšΡ™ΡƒΡ‡Π½Π° Ρ€Π΅Ρ‡ EXPOSE ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π²Π°ΠΌ Π΄Π° ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π”ΠΎΡ†ΠΊΠ΅Ρ€-Ρƒ Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈ ΠΏΠΎΡ€Ρ‚. ΠšΠΎΡ€ΠΈΡΡ‚ΠΈΡ›Π΅ΠΌΠΎ овај ΠΏΠΎΡ€Ρ‚ Π΄ΠΎΠΊ ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ΠΌΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ. ОвдС ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ΠΈΡ‚ΠΈ Π΄Π° Ρƒ Dockerfile Π·Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Ρƒ SA-Frontend Π½Π΅ΠΌΠ° Ρ‚Π°ΠΊΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅. Ово јС само Π·Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅, Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ€Π΅Ρ‡ΠΈΠΌΠ°, ΠΎΠ²Π° ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ˜Π° јС намСњСна ΠΎΠ½ΠΎΠΌΠ΅ ΠΊΠΎ Ρ›Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΠΈ Dockerfile.

Π˜Π·Π³Ρ€Π°Π΄ΡšΠ° сликС ΠΈ њСно Π³ΡƒΡ€Π°ΡšΠ΅ Ρƒ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π΅ ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΏΠΎΡ‚ΠΏΡƒΠ½ΠΎ исто ΠΊΠ°ΠΎ Ρƒ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ. Ако још нистС сигурни Ρƒ својС способности, ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Ρ˜ΡƒΡ›Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ сС ΠΌΠΎΠ³Ρƒ Π½Π°Ρ›ΠΈ Ρƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ†ΠΈ README.md Ρƒ Ρ„ΠΎΠ»Π΄Π΅Ρ€Ρƒ sa-webapp.

β–Π˜Π·Ρ€Π°Π΄Π° сликС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° Π·Π° ΠŸΠΈΡ‚Ρ…ΠΎΠ½ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ

Ако ΠΏΠΎΠ³Π»Π΅Π΄Π°Ρ‚Π΅ ΡΠ°Π΄Ρ€ΠΆΠ°Ρ˜ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ Dockerfile Ρƒ Ρ„ΠΎΠ»Π΄Π΅Ρ€Ρƒ sa-logic, ΠΎΠ½Π΄Π° Ρ‚Π°ΠΌΠΎ Π½Π΅Ρ›Π΅Ρ‚Π΅ Π½Π°Ρ›ΠΈ Π½ΠΈΡˆΡ‚Π° Π½ΠΎΠ²ΠΎ Π·Π° сСбС. КомандС Π·Π° ΠΏΡ€Π°Π²Ρ™Π΅ΡšΠ΅ сликС ΠΈ слањС Ρƒ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π΅ Ρ‚Π°ΠΊΠΎΡ’Π΅ Π±ΠΈ Ρ‚Ρ€Π΅Π±Π°Π»ΠΎ Π΄Π° Π²Π°ΠΌ Π±ΡƒΠ΄Ρƒ ΠΏΠΎΠ·Π½Π°Ρ‚Π΅, Π°Π»ΠΈ, ΠΊΠ°ΠΎ ΠΈ ΠΊΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π½Π°ΡˆΠΈΡ… Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, ΠΌΠΎΠ³Ρƒ сС Π½Π°Ρ›ΠΈ Ρƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ†ΠΈ README.md Ρƒ Ρ„ΠΎΠ»Π΄Π΅Ρ€Ρƒ sa-logic.

β–Π’Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΡΠΊΠΈΡ… Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ˜Π΅Ρ€ΠΎΠ²Π°Ρ‚ΠΈ Π½Π΅Ρ‡Π΅ΠΌΡƒ ΡˆΡ‚ΠΎ нистС тСстирали? НС ΠΌΠΎΠ³Ρƒ Π½ΠΈ ја. Π₯ајдС Π΄Π° тСстирамо нашС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π΅.

  1. Π₯ајдС Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅ΠΌΠΎ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ sa-logic ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡˆΠΈΡ‚Π΅ Π³Π° Π΄Π° ΡΠ»ΡƒΡˆΠ° Π½Π° ΠΏΠΎΡ€Ρ‚Ρƒ 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Π₯ајдС Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅ΠΌΠΎ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ sa-webapp ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡˆΠΈΡ‚Π΅ Π³Π° Π΄Π° ΡΠ»ΡƒΡˆΠ° Π½Π° ΠΏΠΎΡ€Ρ‚Ρƒ 8080. ΠŸΠΎΡ€Π΅Π΄ Ρ‚ΠΎΠ³Π°, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ јС Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡˆΠ΅ΠΌΠΎ ΠΏΠΎΡ€Ρ‚ Π½Π° којСм Ρ›Π΅ ΠŸΠΈΡ‚Ρ…ΠΎΠ½ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΡΠ»ΡƒΡˆΠ°Ρ‚ΠΈ Π·Π°Ρ…Ρ‚Π΅Π²Π΅ ΠΈΠ· Јава Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ Ρ‚Π°ΠΊΠΎ ΡˆΡ‚ΠΎ Ρ›Π΅ΠΌΠΎ ΠΏΠΎΠ½ΠΎΠ²ΠΎ Π΄ΠΎΠ΄Π΅Π»ΠΈΡ‚ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Ρƒ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ° SA_LOGIC_API_URL:
    $ docker run -d -p 8080:8080 -e SA_LOGIC_API_URL='http://<container_ip or docker machine ip>:5000' $DOCKER_USER_ID/sentiment-analysis-web-app

Π”Π° бистС сазнали ΠΊΠ°ΠΊΠΎ Π΄Π° сазнатС ИП адрСсу Π”ΠΎΡ†ΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° ΠΈΠ»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π΅ машинС, ΠΏΠΎΠ³Π»Π΅Π΄Π°Ρ˜Ρ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ Π Π•ΠΠ”ΠœΠ•.

Π₯ајдС Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅ΠΌΠΎ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ sa-frontend:

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

Π‘Π°Π΄Π° јС свС спрСмно Π·Π° ΠΎΠ΄Π»Π°Π·Π°ΠΊ Π½Π° адрСсу Ρƒ ΠΏΡ€Π΅Ρ‚Ρ€Π°ΠΆΠΈΠ²Π°Ρ‡Ρƒ localhost:80 ΠΈ ΠΈΡΠΏΡ€ΠΎΠ±Π°Ρ˜Ρ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ.

Π˜ΠΌΠ°Ρ˜Ρ‚Π΅ Π½Π° ΡƒΠΌΡƒ Π΄Π° Π°ΠΊΠΎ стС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΏΠΎΡ€Ρ‚ Π·Π° sa-webapp, ΠΈΠ»ΠΈ Π°ΠΊΠΎ користитС Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Ρƒ ΠΌΠ°ΡˆΠΈΠ½Ρƒ, ΠΌΠΎΡ€Π°Ρ›Π΅Ρ‚Π΅ Π΄Π° ΡƒΡ€Π΅Π΄ΠΈΡ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ App.js ΠΈΠ· фасциклС sa-frontendΠΏΡ€ΠΎΠΌΠ΅Π½ΠΎΠΌ ИП адрСсС ΠΈΠ»ΠΈ Π±Ρ€ΠΎΡ˜Π° ΠΏΠΎΡ€Ρ‚Π° Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ analyzeSentence(), Π·Π°ΠΌΠ΅ΡšΡƒΡ˜ΡƒΡ›ΠΈ Π°ΠΊΡ‚ΡƒΠ΅Π»Π½Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π΅ умСсто застарСлих ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ°. Након Ρ‚ΠΎΠ³Π°, ΠΌΠΎΡ€Π°Ρ‚Π΅ ΠΏΠΎΠ½ΠΎΠ²ΠΎ саставити слику ΠΈ користити јС.

Овако сада ΠΈΠ·Π³Π»Π΅Π΄Π° наш Π΄ΠΈΡ˜Π°Π³Ρ€Π°ΠΌ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅.

ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ Π²ΠΎΠ΄ΠΈΡ‡, Π΄Π΅ΠΎ 1: ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, микроуслугС ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ
ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΠ΅ Ρ€Π°Π΄Π΅ Ρƒ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΠΌΠ°

Π Π΅Π·ΠΈΠΌΠ΅: Π·Π°ΡˆΡ‚ΠΎ Π½Π°ΠΌ јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Π½ ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ кластСр?

Π£ΠΏΡ€Π°Π²ΠΎ смо ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°Π»ΠΈ Ρ„Π°Ρ˜Π»ΠΎΠ²Π΅ Dockerfile, Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ Ρ‚ΠΎΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΠΈ сликС ΠΈ Π³ΡƒΡ€Π½ΡƒΡ‚ΠΈ ΠΈΡ… Ρƒ Π”ΠΎΡ†ΠΊΠ΅Ρ€ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π΅. ΠŸΠΎΡ€Π΅Π΄ Ρ‚ΠΎΠ³Π°, Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈ смо ΠΊΠ°ΠΊΠΎ Π΄Π° ΡƒΠ±Ρ€Π·Π°ΠΌΠΎ ΡΠ°ΡΡ‚Π°Π²Ρ™Π°ΡšΠ΅ сликС ΠΏΠΎΠΌΠΎΡ›Ρƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ .dockerignore. Као Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Ρ‚ΠΎΠ³Π°, нашС микросСрвисС сада Ρ€Π°Π΄Π΅ Ρƒ Π”ΠΎΡ†ΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΠΌΠ°. ОвдС Ρ›Π΅Ρ‚Π΅ ΠΌΠΎΠΆΠ΄Π° ΠΈΠΌΠ°Ρ‚ΠΈ сасвим ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ ΠΏΠΈΡ‚Π°ΡšΠ΅ Π·Π°ΡˆΡ‚ΠΎ Π½Π°ΠΌ јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Π½ ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ. Π”Ρ€ΡƒΠ³ΠΈ Π΄Π΅ΠΎ ΠΎΠ²ΠΎΠ³ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π»Π° Π±ΠΈΡ›Π΅ посвСћСн ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Ρƒ Π½Π° ΠΎΠ²ΠΎ ΠΏΠΈΡ‚Π°ΡšΠ΅. Π£ ΠΌΠ΅Ρ’ΡƒΠ²Ρ€Π΅ΠΌΠ΅Π½Ρƒ, Ρ€Π°Π·ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ слСдСћС ΠΏΠΈΡ‚Π°ΡšΠ΅:
ΠŸΡ€Π΅Ρ‚ΠΏΠΎΡΡ‚Π°Π²ΠΈΠΌΠΎ Π΄Π° јС наша Π²Π΅Π± Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π·Π° Π°Π½Π°Π»ΠΈΠ·Ρƒ тСкста постала ΠΏΠΎΠΏΡƒΠ»Π°Ρ€Π½Π° ΡˆΠΈΡ€ΠΎΠΌ свСта. Π‘Π²Π°ΠΊΠΎΠ³ ΠΌΠΈΠ½ΡƒΡ‚Π° ΠΌΡƒ стиТу ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ Π·Π°Ρ…Ρ‚Π΅Π²Π°. Π’ΠΎ Π·Π½Π°Ρ‡ΠΈ Π΄Π° микросСрвис sa-webapp ΠΈ sa-logic Π±ΠΈΡ›Π΅ ΠΏΠΎΠ΄ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΈΠΌ ΠΎΠΏΡ‚Π΅Ρ€Π΅Ρ›Π΅ΡšΠ΅ΠΌ. Како скалирати ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π΅ који ΠΏΠΎΠΊΡ€Π΅Ρ›Ρƒ микросСрвисС?

ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ Π²ΠΎΠ΄ΠΈΡ‡, Π΄Π΅ΠΎ 1: ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, микроуслугС ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ

Π˜Π·Π²ΠΎΡ€: Π²Π²Π².Ρ…Π°Π±Ρ€.Ρ†ΠΎΠΌ

Π”ΠΎΠ΄Π°Ρ˜ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€