Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Kubernetes, част 1: прилоТСния, микросСрвизи ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ

По наша ΠΌΠΎΠ»Π±Π° Π₯Π°Π±Ρ€ създадС Ρ…ΡŠΠ± Kubernetes ΠΈ Π½ΠΈ Π΅ приятно Π΄Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ ΠΏΡŠΡ€Π²Π° статия Π² Π½Π΅Π³ΠΎ. АбонирайтС сС!

Kubernetes Π΅ просто. Π—Π°Ρ‰ΠΎ Ρ‚ΠΎΠ³Π°Π²Π° Π±Π°Π½ΠΊΠΈΡ‚Π΅ ΠΌΠΈ ΠΏΠ»Π°Ρ‰Π°Ρ‚ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΠ°Ρ€ΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ‚Π°Π·ΠΈ сфСра, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ всСки ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ²Π»Π°Π΄Π΅Π΅ Ρ‚Π°Π·ΠΈ тСхнология Π±ΡƒΠΊΠ²Π°Π»Π½ΠΎ Π·Π° няколко часа?

Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Kubernetes, част 1: прилоТСния, микросСрвизи ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ

Ако сС ΡΡŠΠΌΠ½ΡΠ²Π°Ρ‚Π΅, Ρ‡Π΅ Kubernetes ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΡƒΡ‡ΠΈ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π±ΡŠΡ€Π·ΠΎ β€” ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΠΌ Π²ΠΈ Π΄Π° ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ сами. А ΠΈΠΌΠ΅Π½Π½ΠΎ, усвоявайки Ρ‚ΠΎΠ·ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° стартиратС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, основано Π½Π° микросСрвизи, Π² кластСра Π½Π° Kubernetes. Мога Π΄Π° Π³ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°ΠΌ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ Ρ‚Π°ΠΊΠ°Π²Π° мСтодология, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° Ρ‚ΡƒΠΊ, ΠΎΠ±ΡƒΡ‡Π°Π²Π°ΠΌ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ Π΄Π° работят с Kubernetes. Какво ΠΎΡ‚Π»ΠΈΡ‡Π°Π²Π° Ρ‚ΠΎΠ²Π° Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅? Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ β€” ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Ρ‰Π°. Π’Π°ΠΊΠ°, ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈ Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ с обяснСния Π½Π° основни Π½Π΅Ρ‰Π° β€” ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π½Π° Kubernetes ΠΈ особСноститС Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° kubectl. АвторитС Π½Π° Ρ‚Π΅Π·ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈ смятат, Ρ‡Π΅ читатСлят ΠΈΠΌ Π΅ Π·Π°ΠΏΠΎΠ·Π½Π°Ρ‚ с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° прилоТСния, с микросСрвизи ΠΈ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ Docker. НиС ΠΎΠ±Π°Ρ‡Π΅ Ρ‰Π΅ ΠΏΠΎΠ΅ΠΌΠ΅ΠΌ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ ΠΏΡŠΡ‚. ΠŸΡŠΡ€Π²ΠΎ Ρ‰Π΅ Ρ€Π°Π·ΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° стартирамС Π½Π° ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, основано Π½Π° микросСрвизи. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Π·Π° всСки микросСрвиз. А слСд Ρ‚ΠΎΠ²Π° Ρ‰Π΅ сС Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ΠΌ с Kubernetes ΠΈ Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, основано Π½Π° микросСрвизи, Π² кластСр, управляван ΠΎΡ‚ Kubernetes.

Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, с постСпСнСн ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ към Kubernetes, Ρ‰Π΅ Π΄Π°Π΄Π΅ Π΄ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π° Π½Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° процСса, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π½Π° обикновСния Ρ‡ΠΎΠ²Π΅ΠΊ, Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ ΠΊΠΎΠ»ΠΊΠΎ просто всичко Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ Π² Kubernetes. Kubernetes Π΅, бСзспорно, проста тСхнология, ΠΏΡ€ΠΈ условиС Ρ‡Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ, ΠΊΠΎΠΉΡ‚ΠΎ иска Π΄Π° я ΠΎΠ²Π»Π°Π΄Π΅Π΅, Π΅ извСстно къдС ΠΈ ΠΊΠ°ΠΊ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°.

Π‘Π΅Π³Π°, Π±Π΅Π· излишни ΠΏΡ€ΠΈΠΊΠ°Π·ΠΊΠΈ, Π½Π΅ΠΊΠ° Π΄Π° сС Π·Π°Ρ…Π²Π°Π½Π΅ΠΌ с Ρ€Π°Π±ΠΎΡ‚Π° ΠΈ Π΄Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, с ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ.

ЕкспСримСнтално ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

ΠΠ°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‰Π΅ изпълнява само Π΅Π΄Π½Π° функция. Π’ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ°, ΠΊΠ°Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΈΠ·Ρ€Π΅Ρ‡Π΅Π½ΠΈΠ΅, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ инструмСнти Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° тСкст, ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° тоналността (sentiment analysis) Π½Π° Ρ‚ΠΎΠ²Π° ΠΈΠ·Ρ€Π΅Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΉΠΊΠΈ ΠΎΡ†Π΅Π½ΠΊΠ° Π½Π° Π΅ΠΌΠΎΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΎΡ‚ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Π°Π²Ρ‚ΠΎΡ€Π° Π½Π° ΠΈΠ·Ρ€Π΅Ρ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ към ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΎΠ±Π΅ΠΊΡ‚.

Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° главният ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ† Π½Π° Ρ‚ΠΎΠ²Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Kubernetes, част 1: прилоТСния, микросСрвизи ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ
Π£Π΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° тоналността Π½Π° тСкстовС

ΠžΡ‚ тСхничСска Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Ρ‚Ρ€ΠΈ микросСрвиза, всСки ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ Ρ€Π΅ΡˆΠ°Π²Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ:

  • SA-Frontend β€” ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€ Nginx, ΠΊΠΎΠΉΡ‚ΠΎ обслуТва статични Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ React.
  • SA-WebApp β€” ΡƒΠ΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, написано Π½Π° Java, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° заявки ΠΎΡ‚ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π°.
  • SA-Logic β€” Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° тоналността Π½Π° тСкста.

Π’Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ микросСрвиситС Π½Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ Π² изолация. Π’Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ идСята Π·Π° β€žΡ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°Π΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΡΡ‚Π°β€œ, Π½ΠΎ ΠΏΡ€ΠΈ Ρ‚ΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° взаимодСйстват ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си.

Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Kubernetes, част 1: прилоТСния, микросСрвизи ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ
ΠŸΠΎΡ‚ΠΎΠΊΡŠΡ‚ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ

На Π³ΠΎΡ€Π½Π°Ρ‚Π° схСма ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€ΠΈΡ€Π°Π½ΠΈ Π΅Ρ‚Π°ΠΏΠΈ ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° систСмата, ΠΈΠ»ΡŽΡΡ‚Ρ€ΠΈΡ€Π°Ρ‰ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. НСка Π³ΠΈ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅:

  1. Π‘Ρ€Π°ΡƒΠ·Π΅Ρ€ΡŠΡ‚ отправя заявка към ΡΡŠΡ€Π²ΡŠΡ€Π° Π·Π° Ρ„Π°ΠΉΠ» index.html (ΠΊΠΎΠΉΡ‚ΠΎ, ΠΎΡ‚ своя страна, ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° React ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅).
  2. ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡΡ‚ Π²Π·Π°ΠΈΠΌΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ към ΡƒΠ΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π±Π°Π·ΠΈΡ€Π°Π½ΠΎ Π½Π° Spring.
  3. Π£Π΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ прСнасочва заявката Π·Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° тСкста към Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.
  4. Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° тоналността Π½Π° тСкста ΠΈ Π²Ρ€ΡŠΡ‰Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΊΠ°Ρ‚ΠΎ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π½Π° заявката.
  5. Spring ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π° към React ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ (Π° Ρ‚ΠΎ, ΠΎΡ‚ своя страна, ΠΏΠΎΠΊΠ°Π·Π²Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° тСкста Π½Π° потрСбитСля).

ΠšΠΎΠ΄ΡŠΡ‚ Π·Π° всички Ρ‚Π΅Π·ΠΈ прилоТСния ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Ρ‚ΡƒΠΊ.. ΠŸΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌ Π²ΠΈ Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€Π΅Π΄ прСдстоят ΠΌΠ½ΠΎΠ³ΠΎ интСрСсни СкспСримСнти с Π½Π΅Π³ΠΎ.

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, основано Π½Π° микросСрвизи, Π½Π° Π»ΠΎΠΊΠ°Π»Π΅Π½ ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€

Π—Π° Π΄Π° Π·Π°Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, трябва Π΄Π° стартирамС всички Ρ‚Ρ€ΠΈ микросСрвиза. НСка Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с Π½Π°ΠΉ-приятния ΠΎΡ‚ тях β€” Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

▍Настройка Π½Π° React Π·Π° Π»ΠΎΠΊΠ°Π»Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

Π—Π° Π΄Π° стартиратС 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 ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Kubernetes, част 1: прилоТСния, микросСрвизи ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ
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. URL, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° POST заявка. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π° сС, Ρ‡Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ адрСс ΠΈΠΌΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΡ‡Π°ΠΊΠ²Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ заявки.

2.Вялото Π½Π° заявката, ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΎ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π•Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° тялото Π½Π° заявката:

{
 Β Β Β sentence: "I like yogobella!"
}

3.ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π½Π° заявката, ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° сС обновява. Π’ΠΎΠ²Π° ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Ако ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π΄Π°Π½Π½ΠΈ (Ρ‚.Π΅. JSON ΠΎΠ±Π΅ΠΊΡ‚, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ входящитС Π΄Π°Π½Π½ΠΈ ΠΈ изчислСната ΠΎΡ†Π΅Π½ΠΊΠ° Π½Π° тСкста), Ρ‰Π΅ ΠΈΠ·Π²Π΅Π΄Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠŸΠΎΠ»ΡΡ€Π½ΠΎΡΡ‚, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ спазСни ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ условия. Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ описвамС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:

const polarityComponent = this.state.polarity !== undefined ?
 Β Β Β  :
 Β Β Β null;

ΠšΠΎΠ΄ΡŠΡ‚ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° напълно работоспособСн. Какво Π½Π΅ Π΅ Π½Π°Ρ€Π΅Π΄? Ако ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅, Ρ‡Π΅ Π½Π° адрСса, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ POST заявката, всС ΠΎΡ‰Π΅ няма Π½ΠΈΡ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈ заявката, Ρ‰Π΅ стС Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΏΡ€Π°Π²ΠΈ. По-Ρ‚ΠΎΡ‡Π½ΠΎ, Π·Π° Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ заявкитС, ΠΏΠΎΡΡ‚ΡŠΠΏΠ²Π°Ρ‰ΠΈ Π½Π° адрСса http://localhost:8080/sentiment, трябва Π΄Π° стартирамС ΡƒΠ΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π±Π°Π·ΠΈΡ€Π°Π½ΠΎ Π½Π° Spring.

Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Kubernetes, част 1: прилоТСния, микросСрвизи ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ
НуТдаСм сС ΠΎΡ‚ Spring ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, способно Π΄Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ POST заявка.

▍Настройка Π½Π° ΡƒΠ΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π±Π°Π·ΠΈΡ€Π°Π½ΠΎ Π½Π° Spring

Π—Π° Π΄Π° Ρ€Π°Π·Π²Π΅Ρ€Π½Π΅Ρ‚Π΅ Spring ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‰Π΅ Π²ΠΈ Π΅ Π½ΡƒΠΆΠ½Π° JDK8 ΠΈ Maven, Π° ΡΡŠΡ‰ΠΎ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ настроСни срСди Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°. Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ инсталиратС всичко Ρ‚ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

β–ΠžΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² jar Ρ„Π°ΠΉΠ»

ΠžΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ с Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° sa-webapp ΠΈ Π²ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ слСдната ΠΊΠΎΠΌΠ°Π½Π΄Π°:

mvn install

Π‘Π»Π΅Π΄ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° sa-webapp Ρ‰Π΅ бъдС създадСна дирСктория target. Π’ΡƒΠΊ Ρ‰Π΅ сС Π½Π°ΠΌΠΈΡ€Π° Java ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½ΠΎ Π² jar Ρ„Π°ΠΉΠ», прСдставСно ΠΎΡ‚ Ρ„Π°ΠΉΠ»Π° sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍БтартиранС Π½Π° Java ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ

ΠžΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° target ΠΈ стартирайтС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ с слСдната ΠΊΠΎΠΌΠ°Π½Π΄Π°:

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

По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ‰Π΅ възникнС Π³Ρ€Π΅ΡˆΠΊΠ°. Π—Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ отстраняванС, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ информацията Π·Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΎΡ‚ стСка Π½Π° трасировката:

Π“Ρ€Π΅ΡˆΠΊΠ° ΠΏΡ€ΠΈ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° bean с ΠΈΠΌΠ΅ 'sentimentController': Π˜Π½ΠΆΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° зависимости Π½Π΅ успя; Π²Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΅ java.lang.IllegalArgumentException: НС ΠΌΠΎΠΆΠ° Π΄Π° сС Ρ€Π°Π·Ρ€Π΅ΡˆΠΈ замСститСлят 'sa.logic.api.url' Π² стойността "${sa.logic.api.url}"

Π—Π° нас Ρ‚ΡƒΠΊ Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎ Π΅ спомСнаванСто Π½Π° Π½Π΅Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° сС установи стойността sa.logic.api.url. НСка Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ сС случва Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π°.

▍Анализ Π½Π° 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();
 Β Β Β }
}

  1. Π’ SentimentController ΠΈΠΌΠ° ΠΏΠΎΠ»Π΅ saLogicApiUrl. НСговата стойност сС Π·Π°Π΄Π°Π²Π° Ρ‡Ρ€Π΅Π· свойството sa.logic.api.url.
  2. Π Π΅Π΄ΡŠΡ‚ saLogicApiUrl ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½ΠΈΡ€ΠΎΠ²Π° сС със стойността /analyse/sentiment. Π—Π°Π΅Π΄Π½ΠΎ Ρ‚Π΅ Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Ρ‚ адрСс Π·Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±Π°ΠΆΠ΄Π°Π½Π΅ към микросСрвиза, ΠΊΠΎΠΉΡ‚ΠΎ изпълнява Π°Π½Π°Π»ΠΈΠ· Π½Π° тСкста.

▍ЗадаванС Π½Π° стойности Π½Π° свойството

Π’ Spring стандартният ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° стойности Π½Π° свойства Π΅ Ρ„Π°ΠΉΠ»ΡŠΡ‚ 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 ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Настройвайки Π³ΠΎ, Π½ΠΈΠ΅ увСдомявамС ΡƒΠ΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Spring къдС Π΄Π° ΠΏΡ€Π°Π²ΠΈ заявки Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° тСкста.

Π—Π° Π΄Π° Π½Π΅ си услоТнявамС ΠΆΠΈΠ²ΠΎΡ‚Π°, Π΄Π° Ρ€Π΅ΡˆΠΈΠΌ, Ρ‡Π΅ Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‰Π΅ бъдС Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎ Π½Π° адрСс localhost:5000 ΠΈ Π΄Π° сС ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° Π½Π΅ Π·Π°Π±Ρ€Π°Π²ΠΈΠΌ Π·Π° Ρ‚ΠΎΠ²Π°. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π·Π° стартиранС Π½Π° Spring ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

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

Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Kubernetes, част 1: прилоТСния, микросСрвизи ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ
Π’ Π½Π°ΡˆΠ°Ρ‚Π° систСма липсва Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Π‘Π΅Π³Π° Π½ΠΈ остава само Π΄Π° стартирамС Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ систСмата Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΊΠ°ΠΊΡ‚ΠΎ сС ΠΎΡ‡Π°ΠΊΠ²Π°.

▍Настройка Π½Π° Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ

Π—Π° Π΄Π° стартиратС Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, трябва Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ инсталиран Python 3 ΠΈ Pip, ΠΈ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° са настроСни ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° срСдата.

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

ΠžΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° sa-logic/sa ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ слСднитС ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ:

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

▍БтартиранС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ инсталирахмС зависимоститС, смС Π³ΠΎΡ‚ΠΎΠ²ΠΈ Π΄Π° стартирамС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ:

python sentiment_analysis.py

Π‘Π»Π΅Π΄ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ слСдното:

* Π Π°Π±ΠΎΡ‚ΠΈ Π½Π° http://0.0.0.0:5000/ (НатиснСтС CTRL+C, Π·Π° Π΄Π° ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚Π΅)

Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ стартирано ΠΈ ΠΎΡ‡Π°ΠΊΠ²Π° заявки Π½Π° адрСс 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

  1. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ Flask.
  2. Π—Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° адрСса Π·Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° POST-заявки.
  3. Π˜Π·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° свойството sentence ΠΎΡ‚ тялото Π½Π° заявката.
  4. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Π°Π½ΠΎΠ½ΠΈΠΌΠ΅Π½ ΠΎΠ±Π΅ΠΊΡ‚ TextBlob ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° стойността polarity Π·Π° ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ ΠΏΠΎΠ΄Π°Π΄Π΅Π½ΠΎ Π² тялото Π½Π° заявката ΠΈΠ·Ρ€Π΅Ρ‡Π΅Π½ΠΈΠ΅ (Π² нашия случай Ρ‚ΠΎΠ²Π° Π΅ СдинствСното ΠΈΠ·Ρ€Π΅Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ сС ΠΏΡ€Π΅Π΄Π°Π²Π° Π·Π° Π°Π½Π°Π»ΠΈΠ·).
  5. Π’Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° тСкста Π½Π° ΠΈΠ·Ρ€Π΅Ρ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ изчислСния Π·Π° Π½Π΅Π³ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π» polarity.
  6. Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° Flask-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ бъдС Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎ Π½Π° адрСс 0.0.0.0:5000 (ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сС ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ към Π½Π΅Π³ΠΎ ΠΈ с конструкция ΠΊΠ°Ρ‚ΠΎ localhost:5000).

Π‘Π΅Π³Π° микросСрвизитС, ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, са стартирани. Π’Π΅ са настроСни Π΄Π° взаимодСйстват ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си. Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° схСмата Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°.

Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Kubernetes, част 1: прилоТСния, микросСрвизи ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ
Всички микросСрвизи, ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, са ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈ Π² работоспособно ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅

Π‘Π΅Π³Π°, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅, ΠΎΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ React ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π° ΠΈ ΠΎΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ с Π½Π΅Π³ΠΎ някоС ΠΈΠ·Ρ€Π΅Ρ‡Π΅Π½ΠΈΠ΅. Ако всичко Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ β€” слСд натисканС Π½Π° Π±ΡƒΡ‚ΠΎΠ½Π° Send Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠΎΠ΄ тСкстовото ΠΏΠΎΠ»Π΅.

Π’ слСдващия Ρ€Π°Π·Π΄Π΅Π» Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° стартирамС Π½Π°ΡˆΠΈΡ‚Π΅ микросСрвизи Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Docker. Π’ΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π·Π° Π΄Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° стартиранС Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Kubernetes.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Docker

Kubernetes β€” Ρ‚ΠΎΠ²Π° Π΅ систСма Π·Π° автоматизация Π½Π° Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅Ρ‚ΠΎ, ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ прилоТСния. Наричат я ΠΎΡ‰Π΅ "оркСстратор Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ" (container orchestrator). Ако Kubernetes Ρ€Π°Π±ΠΎΡ‚ΠΈ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ‚Π°Π·ΠΈ систСма, трябва ΠΏΡŠΡ€Π²ΠΎ Π΄Π° сС сдобиСм с Ρ‚Π΅Π·ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. Но ΠΏΡŠΡ€Π²ΠΎ Π½Π΅ΠΊΠ° ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ прСдставляват ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅. Май Π΅ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΎΡ‚ΠΎ обяснСниС Π½Π° Π²ΡŠΠΏΡ€ΠΎΡΠ° ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Ρ‚ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΠΌ Π² докумСнтацията ΠΊ Docker:

ΠžΠ±Ρ€Π°Π·ΡŠΡ‚ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π΅ Π»Π΅ΠΊ, Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ΅Π½ ΠΈ изпълним ΠΏΠ°ΠΊΠ΅Ρ‚, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π° всичко Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° стартиранСто ΠΌΡƒ: ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, срСдата Π·Π° изпълнСниС, систСмни срСдства ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² срСди Linux ΠΈ Windows, ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅ Π²ΠΈΠ½Π°Π³ΠΈ работят Π΅Π΄Π½Π°ΠΊΠ²ΠΎ, нСзависимо ΠΎΡ‚ инфраструктурата.

Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ стартирани Π½Π° всякакви ΠΊΠΎΠΌΠΏΡŽΡ‚Ρ€ΠΈ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΎΠ½Π½ΠΈ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ, ΠΈ във всякакви срСди Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ‚Π΅ Π² тях прилоТСния Ρ‰Π΅ работят Π΅Π΄Π½Π°ΠΊΠ²ΠΎ.

Π—Π° Π΄Π° изслСдвамС особСноститС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ ΠΈ Π΄Π° Π³ΠΈ сравним с Π΄Ρ€ΡƒΠ³ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° стартиранС Π½Π° прилоТСния, Π½Π΅ΠΊΠ° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° с обслуТванСто Π½Π° React-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.

β–ΠžΠ±ΡΠ»ΡƒΠΆΠ²Π°Π½Π΅ Π½Π° статични Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° React-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина

ΠžΠΏΠΈΡ‚Π²Π°ΠΉΠΊΠΈ сС Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ обслуТванСто Π½Π° статични Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини, Ρ‰Π΅ сС сблъскамС със слСднитС Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ:

  1. НССфСктивно ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° рСсурситС, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ всяка Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина прСдставлява ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π° систСма.
  2. Зависимост ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°. Π’ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° някой Π»ΠΎΠΊΠ°Π»Π΅Π½ ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€, ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΎΠ½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€.
  3. Π‘Π°Π²Π½ΠΎ ΠΈ рСсурсно изискващо ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, основано Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини.

Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Kubernetes, част 1: прилоТСния, микросСрвизи ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ
Π£Π΅Π±-ΡΡŠΡ€Π²ΡŠΡ€ Nginx, обслуТващ статични Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, стартиран Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина

Ако ΠΎΠ±Π°Ρ‡Π΅ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° Π·Π°Π΄Π°Ρ‡Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, Π² сравнСниС с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈΡ‚Π΅ машини, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠ°Ρ‚ слСднитС Ρ‚Π΅Ρ…Π½ΠΈ силни страни:

  1. Π•Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° рСсурситС: Ρ€Π°Π±ΠΎΡ‚Π° с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π° систСма Ρ‡Ρ€Π΅Π· Docker.
  2. НСзависимост ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° стартира Π½Π° своя ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€, Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ навсякъдС.
  3. Π›Π΅ΠΊΠΎΡ‚ΠΎ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° слоСвС Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅.

Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Kubernetes, част 1: прилоТСния, микросСрвизи ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ
Π£Π΅Π± ΡΡŠΡ€Π²ΡŠΡ€ Nginx, обслуТващ статични Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, стартиран Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.

Π‘Ρ€Π°Π²Π½ΠΈΡ…ΠΌΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ само ΠΏΠΎ няколко Ρ‚ΠΎΡ‡ΠΊΠΈ, Π½ΠΎ Π΄ΠΎΡ€ΠΈ Ρ‚ΠΎΠ²Π° Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ, Π·Π° Π΄Π° усСтим силнитС страни Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅. Π’ΡƒΠΊ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ подробности Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ Docker.

β–Π‘ΡŠΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ€Π°Π· Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π·Π° React-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

ΠžΡΠ½ΠΎΠ²Π½ΠΈΡΡ‚ строитСлСн Π±Π»ΠΎΠΊ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Docker Π΅ Ρ„Π°ΠΉΠ»ΡŠΡ‚ Dockerfile. Π’ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ Ρ„Π°ΠΉΠ» сС ΠΏΡ€Π°Π²ΠΈ запис Π·Π° основния ΠΎΠ±Ρ€Π°Π· Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, слСд Ρ‚ΠΎΠ²Π° сС Π²ΠΊΠ»ΡŽΡ‡Π²Π° послСдоватСлност ΠΎΡ‚ инструкции, ΡƒΠΊΠ°Π·Π²Π°Ρ‰Π° Ρ€Π΅Π΄Π° Π½Π° създаванС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ отговаря Π½Π° Π½ΡƒΠΆΠ΄ΠΈΡ‚Π΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»Π° Dockerfile, Π½Π΅ΠΊΠ° си ΠΏΡ€ΠΈΠΏΠΎΠΌΠ½ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡ€Π°Π²Π΅Ρ…ΠΌΠ΅, Π·Π° Π΄Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° React-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° Nginx-ΡΡŠΡ€Π²ΡŠΡ€Π°:

  1. БъздаванС Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ Π½Π° React-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ (npm run build).
  2. Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° Nginx-ΡΡŠΡ€Π²ΡŠΡ€Π°.
  3. ΠšΠΎΠΏΠΈΡ€Π°Π½Π΅ Π½Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° дирСкторията build ΠΎΡ‚ ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° sa-frontend Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° nginx/html.

По-Π΄ΠΎΠ»Ρƒ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ ΠΏΠΎ-Π³ΠΎΡ€Π΅ описанитС дСйствия, ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½ΠΈ Π½Π° локалния ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€.

β–ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π½Π° Ρ„Π°ΠΉΠ»Π° Dockerfile Π·Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ SA-Frontend

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈ Π² Dockerfile Π·Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ SA-Frontend, сС ΡΡŠΡΡ‚ΠΎΡΡ‚ само ΠΎΡ‚ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. Π‘Ρ‚Π°Π²Π° Π²ΡŠΠΏΡ€ΠΎΡ, Ρ‡Π΅ Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π° Nginx Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈΠ»Π° основСн ΠΎΠ±Ρ€Π°Π· Π·Π° Nginx, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° създаванС Π½Π° нашия ΠΎΠ±Ρ€Π°Π·. Π•Ρ‚ΠΎ Π΄Π²Π΅Ρ‚Π΅ ΡΡ‚ΡŠΠΏΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° опишСм:

  1. ΠšΠ°ΠΊΡ‚ΠΎ основа Π½Π° ΠΎΠ±Ρ€Π°Π·Π° трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΎΠ±Ρ€Π°Π· Π½Π° Nginx.
  2. Π‘ΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° sa-frontend/build трябва Π΄Π° бъдС ΠΊΠΎΠΏΠΈΡ€Π°Π½ΠΎ Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° Π½Π° ΠΎΠ±Ρ€Π°Π·Π°. nginx/html.

Ако ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ ΠΎΡ‚ Ρ‚ΠΎΠ²Π° описаниС към Ρ„Π°ΠΉΠ»Π° Dockerfile, Ρ‚ΠΎΠΉ Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

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

ΠšΠ°ΠΊΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅, всичко Π΅ ΠΌΠ½ΠΎΠ³ΠΎ просто, Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΡ€ΠΈ Π΅ доста Ρ‡Π΅Ρ‚Π»ΠΈΠ²ΠΎ ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΠΎ. Π’ΠΎΠ·ΠΈ Ρ„Π°ΠΉΠ» ΠΊΠ°Π·Π²Π° Π½Π° систСмата Π΄Π° Π²Π·Π΅ΠΌΠ΅ ΠΎΠ±Ρ€Π°Π· nginx всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°, ΠΈ Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° дирСкторията build Π² дирСкторията nginx/html.

Π’ΡƒΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° възникнС Π²ΡŠΠΏΡ€ΠΎΡ относно Ρ‚ΠΎΠ²Π° ΠΎΡ‚ΠΊΡŠΠ΄Π΅ Π·Π½Π°ΠΌ къдС Ρ‚ΠΎΡ‡Π½ΠΎ трябва Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ ΠΎΡ‚ ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° build, Ρ‚.Π΅. β€” ΠΎΡ‚ΠΊΡŠΠ΄Π΅ ΠΏΡ€ΠΎΠΈΠ·Π»ΠΈΠ·Π° ΠΏΡŠΡ‚ΡΡ‚ /usr/share/nginx/html. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΈ Ρ‚ΡƒΠΊ няма Π½ΠΈΡ‰ΠΎ слоТно. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½Π°Ρ‚Π° информация ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π° Π² описаниСто ΠΎΠ±Ρ€Π°Π·Π°.

β–Π‘ΡŠΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ€Π°Π· ΠΈ ΠΊΠ°Ρ‡Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ Π² рСпозитория

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ с готовия ΠΎΠ±Ρ€Π°Π·, трябва Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ Π² рСпозитория Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ. Π—Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π½Π°Ρ‚Π° ΠΎΠ±Π»Π°Ρ‡Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Π·Π° хостинг Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ Docker Hub. На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ слСдното:

  1. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Docker.
  2. РСгистрирайтС сС Π½Π° сайта Π½Π° Docker Hub.
  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 трябва Π΄Π° бъдС Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ с Π²Π°ΡˆΠ΅Ρ‚ΠΎ потрСбитСлско ΠΈΠΌΠ΅ Π² 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 Π΅ ΠΏΠΎΡ€Ρ‚ΡŠΡ‚ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ Π·Π°ΠΏΡ€ΠΎΡΡŠΡ‚ трябва Π΄Π° бъдС прСнасочСн.

НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ слСдната ΠΈΠ»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ.

Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Kubernetes, част 1: прилоТСния, микросСрвизи ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ
ΠŸΡ€Π΅Π½Π°ΡΠΎΡ‡Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅Ρ‚Π΅

БистСмата ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° прСнасочванС Π½Π° запроситС ΠΎΡ‚ ΠΏΠΎΡ€Ρ‚Π° <hostPort> към ΠΏΠΎΡ€Ρ‚Π° <containerPort>. ВоСст, заявка към ΠΏΠΎΡ€Ρ‚Π° Π½Π° 80 ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π° сС прСнасочва към ΠΏΠΎΡ€Ρ‚Π° 80 Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Въй ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΡ€Ρ‚ΡŠΡ‚ 80 Π΅ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ Π½Π° локалния ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€ Π½Π° адрСс localhost:80. Ако Π²Π°ΡˆΠ°Ρ‚Π° систСма Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Docker, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС стартира Π½Π° Docker Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина, Ρ‡ΠΈΠΉΡ‚ΠΎ адрСс Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°Ρ‚ΠΎ :80. Π—Π° Π΄Π° установитС IP адрСса Π½Π° Docker Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π°Ρ‚Π° машина, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° docker-machine ip.

. На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ, слСд ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡ‚ΠΎ стартиранС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π±ΠΈ трябвало Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ страницата ΠΌΡƒ Π² Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π°.

▍Ѐайл .dockerignore

ΠŸΡ€ΠΈ ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ€Π°Π·Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ SA-Frontend, установихмС, Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ процСс сС ΠΎΠΊΠ°Π·Π²Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π±Π°Π²Π΅Π½. Π’ΠΎΠ²Π° сС случва, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π΄Π΅ΠΌΠΎΠ½Π° Π½Π° Docker трябва Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ контСкста Π½Π° сборката Π½Π° ΠΎΠ±Ρ€Π°Π·Π°. ДирСкторията, която опрСдСля контСкста Π½Π° сборката, сС опрСдСля ΠΊΠ°Ρ‚ΠΎ послСдСн Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° docker build. Π’ нашия случай Π² края Π½Π° Ρ‚Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° стои Ρ‚ΠΎΡ‡ΠΊΠ°. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π² контСкста Π½Π° сборката Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° слСдната структура:

sa-frontend:
| Β Β .dockerignore
| Β Β Dockerfile
| Β Β package.json
| Β Β README.md
+---build
+---node_modules
+---public
---src

Но ΠΎΡ‚ всичкитС ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π°Ρ‰ΠΈ Ρ‚ΡƒΠΊ ΠΏΠ°ΠΏΠΊΠΈ, Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° само ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° build. Π—Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠ²ΠΎΡ‚ΠΎ ΠΈ Π΄Π° Π±ΠΈΠ»ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ Π΅ просто Π·Π°Π³ΡƒΠ±Π° Π½Π° Π²Ρ€Π΅ΠΌΠ΅. Π‘Π±ΠΎΡ€ΠΊΠ°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ускори, ΠΊΠ°Ρ‚ΠΎ сС ΡƒΠΊΠ°ΠΆΠ°Ρ‚ Π½Π° Docker ΠΊΠΎΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ Π΄Π° ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°. ИмСнно Π·Π°Ρ‚ΠΎΠ²Π° Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Ρ„Π°ΠΉΠ» .dockerignore. Ако стС Π·Π°ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ с Ρ„Π°ΠΉΠ»Π° .gitignore, структурата Π½Π° Ρ‚ΠΎΠ·ΠΈ Ρ„Π°ΠΉΠ» със сигурност Ρ‰Π΅ Π²ΠΈ сС стори ΠΏΠΎΠ·Π½Π°Ρ‚Π°. Π’ Π½Π΅Π³ΠΎ сС изброяват Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ систСмата Π·Π° сборка Π½Π° ΠΎΠ±Ρ€Π°Π·Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°. Π’ нашия случай ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ Ρ„Π°ΠΉΠ» ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

node_modules
src
public

Ρ„Π°ΠΉΠ» .dockerignore Ρ‚ΠΎΠ·ΠΈ Ρ„Π°ΠΉΠ» трябва Π΄Π° сС Π½Π°ΠΌΠΈΡ€Π° Π² ΡΡŠΡ‰Π°Ρ‚Π° ΠΏΠ°ΠΏΠΊΠ°, Π² която Π΅ Ρ„Π°ΠΉΠ»ΡŠΡ‚ Dockerfile. Π‘Π΅Π³Π° сборката Π½Π° ΠΎΠ±Ρ€Π°Π·Π° Ρ‰Π΅ ΠΎΡ‚Π½Π΅ΠΌΠ° сСкунди.

Π‘Π΅Π³Π° Π΄Π° сС Π·Π°Π΅ΠΌΠ΅ΠΌ с ΠΎΠ±Ρ€Π°Π·Π° Π·Π° Java ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

▍Бборка Π½Π° ΠΎΠ±Ρ€Π°Π·Π° Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π·Π° Java ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ

Π—Π½Π°Π΅Ρ‚Π΅ Π»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ, Π²ΠΈΠ΅ Π²Π΅Ρ‡Π΅ стС ΠΈΠ·ΡƒΡ‡ΠΈΠ»ΠΈ всичко Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ‚ΠΎΠ²Π° Ρ‚ΠΎΠ·ΠΈ Ρ€Π°Π·Π΄Π΅Π» Ρ‰Π΅ бъдС ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΊΡ€Π°Ρ‚ΡŠΠΊ.

ΠžΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ Ρ„Π°ΠΉΠ»Π° Dockerfile, ΠΊΠΎΠΉΡ‚ΠΎ сС Π½Π°ΠΌΠΈΡ€Π° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½Π°Ρ‚Π° ΠΏΠ°ΠΏΠΊΠ° sa-webapp. Ако ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ тСкста Π½Π° Ρ‚ΠΎΠ·ΠΈ Ρ„Π°ΠΉΠ», Ρ‰Π΅ срСщнСтС само Π΄Π²Π΅ Π½ΠΎΠ²ΠΈ конструкции, Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‰ΠΈ с ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ Π΄ΡƒΠΌΠΈ ENV ΠΈ EXPOSE:

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

ΠšΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° Π΄ΡƒΠΌΠ° ENV позволява Π΄Π° сС Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° срСдата Π² Docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. Π’ частност, Π² нашия случай тя позволява Π΄Π° сС Π·Π°Π΄Π°Π΄Π΅ URL адрСс Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ API Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° тСкстов Π°Π½Π°Π»ΠΈΠ·.

ΠšΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° Π΄ΡƒΠΌΠ° EXPOSE позволява Π½Π° Docker Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈ ΠΏΠΎΡ€Ρ‚. Π©Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΡ€Ρ‚ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π’ΡƒΠΊ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° заб注意тС, Ρ‡Π΅ Π² Dockerfile Π·Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ SA-Frontend Ρ‚Π°ΠΊΠ°Π²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° няма. Π’ΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ само Π·Π° Ρ†Π΅Π»ΠΈΡ‚Π΅ Π½Π° докумСнтацията, с Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, Ρ‚Π°Π·ΠΈ конструкция Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° Π·Π° ΠΎΠ½Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Ρ‡Π΅Ρ‚Π°Ρ‚ Dockerfile.

БглобяванСто Π½Π° ΠΎΠ±Ρ€Π°Π·Π° ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ Π² рСпозитория ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠ°, ΠΊΠ°ΠΊΡ‚ΠΎ Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Ако всС ΠΎΡ‰Π΅ Π½Π΅ стС ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ²Π΅Ρ€Π΅Π½ΠΈ, подходящитС ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² Ρ„Π°ΠΉΠ»Π° README.md Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° sa-webapp.

▍БглобяванС Π½Π° ΠΎΠ±Ρ€Π°Π·Π° Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π·Π° Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Ако ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ„Π°ΠΉΠ»Π° 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. ОсвСн Ρ‚ΠΎΠ²Π°, трябва Π΄Π° настроим ΠΏΠΎΡ€Ρ‚Π°, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‰Π΅ Ρ‡Π°ΠΊΠ° заявки ΠΎΡ‚ Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΏΡ€Π΅Π½Π°Π·Π½Π°Ρ‡Π°Π²Π°ΠΉΠΊΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° срСдата SA_LOGIC_API_URL:
    $ docker run -d -p 8080:8080 -e SA_LOGIC_API_URL='http://:5000' $DOCKER_USER_ID/sentiment-analysis-web-app

Π—Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ΅Ρ‚Π΅ IP адрСса Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠ»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π°Ρ‚Π° машина Docker β€” Π²ΠΈΠΆΡ‚Π΅ Ρ„Π°ΠΉΠ»Π° README.

НСка стартирамС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ sa-frontend:

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

Π‘Π΅Π³Π° всичко Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ, Π·Π° Π΄Π° ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π² Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π° Π½Π° адрСса localhost:80 ΠΈ Π΄Π° тСстватС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ Π°ΠΊΠΎ стС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΏΠΎΡ€Ρ‚Π° Π·Π° sa-webapp, ΠΈΠ»ΠΈ Π°ΠΊΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина Docker, Ρ‰Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Ρ‚Π΅ Ρ„Π°ΠΉΠ»Π° App.js ΠΎΡ‚ ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° sa-frontend, замСняйки IP адрСса ΠΈΠ»ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π° ΠΏΠΎΡ€Ρ‚Π° Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° analyzeSentence(), ΠΊΠ°Ρ‚ΠΎ подставитС Π°ΠΊΡ‚ΡƒΠ°Π»Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ вмСсто остарСлитС. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° трябва ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π΄Π° сглобитС ΠΎΠ±Ρ€Π°Π·Π° ΠΈ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅.

Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° схСмата Π½Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ сСга.

Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Kubernetes, част 1: прилоТСния, микросСрвизи ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ
ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΠΈΡ‚Π΅ работят Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ

Изводи: Π·Π°Ρ‰ΠΎ Π½ΠΈ Π΅ Π½ΡƒΠΆΠ΅Π½ кластСр Kubernetes?

Π’ΠΎΠΊΡƒ-Ρ‰ΠΎ Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ…ΠΌΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Dockerfile, Π³ΠΎΠ²ΠΎΡ€ΠΈΡ…ΠΌΠ΅ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° сглобявамС ΠΎΠ±Ρ€Π°Π·ΠΈ ΠΈ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ Π² рСпозитория Docker. ОсвСн Ρ‚ΠΎΠ²Π°, Π½Π°ΡƒΡ‡ΠΈΡ…ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° ускорим сглобяванСто Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Ρ„Π°ΠΉΠ»Π° .dockerignore. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° Π½Π°ΡˆΠΈΡ‚Π΅ микросСрвиси Π²Π΅Ρ‡Π΅ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π² Docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. Π’ΡƒΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° възникнС напълно основатСлСн Π²ΡŠΠΏΡ€ΠΎΡ Π·Π°Ρ‰ΠΎ Π½ΠΈ Π΅ Kubernetes. На Ρ‚ΠΎΠ·ΠΈ Π²ΡŠΠΏΡ€ΠΎΡ Ρ‰Π΅ бъдС посвСтСна Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° част Π½Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°. А засСга помислСтС Π½Π°Π΄ слСдния Π²ΡŠΠΏΡ€ΠΎΡ:
Π”Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΡƒΠ΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° тСкстовС Π΅ станало свСтовно популярно. Всяка ΠΌΠΈΠ½ΡƒΡ‚Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ заявки. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ микросСрвиситС sa-webapp ΠΈ sa-logic Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠΎΠ΄ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅. Как Π΄Π° ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°ΠΌΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅, Π² ΠΊΠΎΠΈΡ‚ΠΎ изпълнявамС микросСрвиситС?

Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Kubernetes, част 1: прилоТСния, микросСрвизи ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster