Π£Ρ€ΠΎΠΊ Π·Π° Kubernetes, част 1: ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, микроуслуги ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ

По наша ΠΌΠΎΠ»Π±Π° Habr създадС Ρ…ΡŠΠ± Kubernetes ΠΈ ΠΈΠΌΠ°ΠΌΠ΅ удоволствиСто Π΄Π° помСстим ΠΏΡŠΡ€Π²Π°Ρ‚Π° публикация Π² Π½Π΅Π³ΠΎ. Абонирай сС!

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

Π£Ρ€ΠΎΠΊ Π·Π° Kubernetes, част 1: ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, микроуслуги ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ

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

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

Π‘Π΅Π³Π°, Π±Π΅Π· ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΡˆΡƒΠΌ, Π½Π΅ΠΊΠ° сС Π·Π°Π΅ΠΌΠ΅ΠΌ с Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΈ Π΄Π° ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, с ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ.

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

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

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

Π£Ρ€ΠΎΠΊ Π·Π° 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. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ Π² нСговия ΠΊΠΎΠ΄. Π’Π΅Π΄Π½Π°Π³Π° Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π΅Ρ„Π΅ΠΊΡ‚Π° ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π°. Π’ΠΎΠ²Π° Π΅ възмоТно Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚Π°ΠΊΠ° Π½Π°Ρ€Π΅Ρ‡Π΅Π½Π°Ρ‚Π° "Π³ΠΎΡ€Π΅Ρ‰Π°" подмяна Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅. Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΠ²Π°, front-end Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° сС ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° Π² просто ΠΈ приятно изТивяванС.

β–ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π½Π° 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 - Π½ΠΈΡ‰ΠΎ няма Π΄Π° сС случи. Но Π°ΠΊΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠ° Ρ‚Π°ΠΌ. Π—Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ къдС Ρ‚ΠΎΡ‡Π½ΠΎ Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‚ Ρ‚Π΅Π·ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ, Π½Π΅ΠΊΠ° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

▍Анализ Π½Π° ΠΊΠΎΠ΄Π° Π½Π° front-end ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ

Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π° Π½Π° Ρ„Π°ΠΉΠ»Π° 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 ΠΎΠ±Π΅ΠΊΡ‚, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ Π²ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ ΠΈ изчислСната тСкстова ΠΎΡ†Π΅Π½ΠΊΠ°), Ρ‰Π΅ ΠΈΠ·Π²Π΅Π΄Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Polarityстига Π΄Π° са изпълнСни условията. Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ описвамС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:

const polarityComponent = this.state.polarity !== undefined ?
    <Polarity sentence={this.state.sentence} 
              polarity={this.state.polarity}/> :
    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

Π©Π΅ възникнС Π³Ρ€Π΅ΡˆΠΊΠ° ΠΏΡ€ΠΈ изпълнСниС Π½Π° Ρ‚Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°. Π—Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ Π΄Π° Π³ΠΎ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΌΠ΅, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈΡ‚Π΅ Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° прослСдяванС Π½Π° стСка:

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. НСка Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ ΠΊΠΎΠ΄Π°, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ възниква Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π°.

▍Анализ Π½Π° ΠΊΠΎΠ΄Π° Π½Π° 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. Π’ Π‘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

Бтойността Π½Π° Ρ‚ΠΎΠ²Π° свойство трябва Π΄Π° сочи към адрСса Π½Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ 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

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ изпълним Ρ‚Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°, Ρ‰Π΅ Π½ΠΈ бъдС ΠΊΠ°Π·Π°Π½ΠΎ слСдното:

* 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

  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.

Π”ΠΎΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ

Kubernetes Π΅ систСма Π·Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° внСдряванСто, ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΈ прилоТСния. Нарича сС ΠΎΡ‰Π΅ "ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ оркСстратор". Ако 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. установят Π΄ΠΎΠΊΠ΅Ρ€.
  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, Ρ‡ΠΈΠΉΡ‚ΠΎ адрСс Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ° <docker-machine ip>: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://<container_ip or docker machine ip>:5000' $DOCKER_USER_ID/sentiment-analysis-web-app

Π—Π° Π΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ ΠΊΠ°ΠΊ Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ΅Ρ‚Π΅ IP адрСса Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈΠ»ΠΈ Docker VM, Π²ΠΈΠΆΡ‚Π΅ Ρ„Π°ΠΉΠ»Π° README.

НСка стартирамС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π·Π° прилоТСния sa-frontend:

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

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

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

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

Π£Ρ€ΠΎΠΊ Π·Π° Kubernetes, част 1: ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, микроуслуги ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ
ΠœΠΈΠΊΡ€ΠΎΡƒΡΠ»ΡƒΠ³ΠΈΡ‚Π΅ работят Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ

РСзюмС: Π·Π°Ρ‰ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ‚ Kubernetes ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€?

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

Π£Ρ€ΠΎΠΊ Π·Π° Kubernetes, част 1: ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, микроуслуги ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€