ΠΠΎ Π½Π°ΡΠ° ΠΌΠΎΠ»Π±Π° Π₯Π°Π±Ρ ΡΡΠ·Π΄Π°Π΄Π΅ Ρ ΡΠ± ΠΈ Π½ΠΈ Π΅ ΠΏΡΠΈΡΡΠ½ΠΎ Π΄Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΌΠ΅ ΠΏΡΡΠ²Π° ΡΡΠ°ΡΠΈΡ Π² Π½Π΅Π³ΠΎ. ΠΠ±ΠΎΠ½ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ΅!
Kubernetes Π΅ ΠΏΡΠΎΡΡΠΎ. ΠΠ°ΡΠΎ ΡΠΎΠ³Π°Π²Π° Π±Π°Π½ΠΊΠΈΡΠ΅ ΠΌΠΈ ΠΏΠ»Π°ΡΠ°Ρ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΠ°ΡΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° Π² ΡΠ°Π·ΠΈ ΡΡΠ΅ΡΠ°, Π΄ΠΎΠΊΠ°ΡΠΎ Π²ΡΠ΅ΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ²Π»Π°Π΄Π΅Π΅ ΡΠ°Π·ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ Π±ΡΠΊΠ²Π°Π»Π½ΠΎ Π·Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°ΡΠ°?
ΠΠΊΠΎ ΡΠ΅ ΡΡΠΌΠ½ΡΠ²Π°ΡΠ΅, ΡΠ΅ Kubernetes ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΡΡΠΈ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π±ΡΡΠ·ΠΎ β ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΠΌ Π²ΠΈ Π΄Π° ΠΎΠΏΠΈΡΠ°ΡΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠ°ΠΌΠΈ. Π ΠΈΠΌΠ΅Π½Π½ΠΎ, ΡΡΠ²ΠΎΡΠ²Π°ΠΉΠΊΠΈ ΡΠΎΠ·ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π», ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΎ Π½Π° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΠ·ΠΈ, Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π½Π° Kubernetes. ΠΠΎΠ³Π° Π΄Π° Π³ΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°ΠΌ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ ΡΠ°ΠΊΠ°Π²Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° ΡΡΠΊ, ΠΎΠ±ΡΡΠ°Π²Π°ΠΌ Π½Π°ΡΠΈΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Ρ Kubernetes. ΠΠ°ΠΊΠ²ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π²Π° ΡΠΎΠ²Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΎΡ Π΄ΡΡΠ³ΠΈΡΠ΅? ΠΡΡΡΠ½ΠΎΡΡ β ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΡΠ°. Π’Π°ΠΊΠ°, ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ Π·Π°ΠΏΠΎΡΠ²Π°Ρ Ρ ΠΎΠ±ΡΡΠ½Π΅Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈ Π½Π΅ΡΠ° β ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ Π½Π° Kubernetes ΠΈ ΠΎΡΠΎΠ±Π΅Π½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° kubectl. ΠΠ²ΡΠΎΡΠΈΡΠ΅ Π½Π° ΡΠ΅Π·ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ ΡΠΌΡΡΠ°Ρ, ΡΠ΅ ΡΠΈΡΠ°ΡΠ΅Π»ΡΡ ΠΈΠΌ Π΅ Π·Π°ΠΏΠΎΠ·Π½Π°Ρ Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΠ·ΠΈ ΠΈ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ Docker. ΠΠΈΠ΅ ΠΎΠ±Π°ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ΅ΠΌΠ΅ΠΌ ΠΏΠΎ Π΄ΡΡΠ³ ΠΏΡΡ. ΠΡΡΠ²ΠΎ ΡΠ΅ ΡΠ°Π·ΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΎ Π½Π° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΠ·ΠΈ. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ±ΡΠ°Π·ΠΈ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΠ·. Π ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ΠΌ Ρ Kubernetes ΠΈ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΎ Π½Π° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΠ·ΠΈ, Π² ΠΊΠ»Π°ΡΡΠ΅Ρ, ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Π½ ΠΎΡ Kubernetes.
Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, Ρ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π΅Π½ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊΡΠΌ Kubernetes, ΡΠ΅ Π΄Π°Π΄Π΅ Π΄ΡΠ»Π±ΠΎΡΠΈΠ½Π° Π½Π° ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ°, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π½Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΡΠΎΠ²Π΅ΠΊ, Π·Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ ΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΡΡΠΎ Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½ΠΎ Π² Kubernetes. Kubernetes Π΅, Π±Π΅Π·ΡΠΏΠΎΡΠ½ΠΎ, ΠΏΡΠΎΡΡΠ° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ, ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΡΠ΅ Π½Π° ΡΠΎΠ·ΠΈ, ΠΊΠΎΠΉΡΠΎ ΠΈΡΠΊΠ° Π΄Π° Ρ ΠΎΠ²Π»Π°Π΄Π΅Π΅, Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΠΊΡΠ΄Π΅ ΠΈ ΠΊΠ°ΠΊ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°.
Π‘Π΅Π³Π°, Π±Π΅Π· ΠΈΠ·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΈΠΊΠ°Π·ΠΊΠΈ, Π½Π΅ΠΊΠ° Π΄Π° ΡΠ΅ Π·Π°Ρ Π²Π°Π½Π΅ΠΌ Ρ ΡΠ°Π±ΠΎΡΠ° ΠΈ Π΄Π° Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Ρ ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈΠΌ.
ΠΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
ΠΠ°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π° ΡΡΠ½ΠΊΡΠΈΡ. Π’ΠΎ ΠΏΡΠΈΠ΅ΠΌΠ°, ΠΊΠ°ΡΠΎ Π²Ρ ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΈΠ·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° ΡΠ΅ΠΊΡΡ, ΠΈΠ·Π²ΡΡΡΠ²Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° ΡΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° (sentiment analysis) Π½Π° ΡΠΎΠ²Π° ΠΈΠ·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΉΠΊΠΈ ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° Π΅ΠΌΠΎΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° Π°Π²ΡΠΎΡΠ° Π½Π° ΠΈΠ·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΊΡΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΎΠ±Π΅ΠΊΡ.
ΠΡΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π³Π»Π°Π²Π½ΠΈΡΡ ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ Π½Π° ΡΠΎΠ²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π£Π΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° ΡΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΠ΅ΠΊΡΡΠΎΠ²Π΅
ΠΡ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠ° Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ°, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ ΡΡΠΈ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΠ·Π°, Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ΡΠ°Π²Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π½Π°Π±ΠΎΡ ΠΎΡ Π·Π°Π΄Π°ΡΠΈ:
- SA-Frontend β ΡΠ΅Π± ΡΡΡΠ²ΡΡ Nginx, ΠΊΠΎΠΉΡΠΎ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π° ΡΡΠ°ΡΠΈΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ React.
- SA-WebApp β ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π½Π° Java, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π·Π°ΡΠ²ΠΊΠΈ ΠΎΡ ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π°.
- SA-Logic β Python ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ·Π²ΡΡΡΠ²Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° ΡΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΠ΅ΠΊΡΡΠ°.
ΠΠ°ΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΈΡΠ΅ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ Π² ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ. Π’Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΠΈΠ΄Π΅ΡΡΠ° Π·Π° βΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°Π΄ΡΠ»ΠΆΠ΅Π½ΠΈΡΡΠ°β, Π½ΠΎ ΠΏΡΠΈ ΡΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π°Ρ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈ.

ΠΠΎΡΠΎΠΊΡΡ ΠΎΡ Π΄Π°Π½Π½ΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ
ΠΠ° Π³ΠΎΡΠ½Π°ΡΠ° ΡΡ Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π½ΠΎΠΌΠ΅ΡΠΈΡΠ°Π½ΠΈ Π΅ΡΠ°ΠΏΠΈ ΠΎΡ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, ΠΈΠ»ΡΡΡΡΠΈΡΠ°ΡΠΈ ΠΏΠΎΡΠΎΠΊΠ° ΠΎΡ Π΄Π°Π½Π½ΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΠ΅ΠΊΠ° Π³ΠΈ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅:
- ΠΡΠ°ΡΠ·Π΅ΡΡΡ ΠΎΡΠΏΡΠ°Π²Ρ Π·Π°ΡΠ²ΠΊΠ° ΠΊΡΠΌ ΡΡΡΠ²ΡΡΠ° Π·Π° ΡΠ°ΠΉΠ»
index.html(ΠΊΠΎΠΉΡΠΎ, ΠΎΡ ΡΠ²ΠΎΡ ΡΡΡΠ°Π½Π°, ΠΈΠ·Π²ΡΡΡΠ²Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° React ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅). - ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ ΠΊΡΠΌ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π±Π°Π·ΠΈΡΠ°Π½ΠΎ Π½Π° Spring.
- Π£Π΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° ΡΠ΅ΠΊΡΡΠ° ΠΊΡΠΌ Python ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
- Python ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈΠ·Π²ΡΡΡΠ²Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° ΡΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΠ΅ΠΊΡΡΠ° ΠΈ Π²ΡΡΡΠ° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΊΠ°ΡΠΎ ΠΎΡΠ³ΠΎΠ²ΠΎΡ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°.
- 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 ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.

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.

ΠΡΠΆΠ΄Π°Π΅ΠΌ ΡΠ΅ ΠΎΡ 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();
Β Β Β }
}- Π S
entimentControllerΠΈΠΌΠ° ΠΏΠΎΠ»Π΅saLogicApiUrl. ΠΠ΅Π³ΠΎΠ²Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ ΡΠ΅ Π·Π°Π΄Π°Π²Π° ΡΡΠ΅Π· ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΡΠΎsa.logic.api.url. - Π Π΅Π΄ΡΡ
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 
Π Π½Π°ΡΠ°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π»ΠΈΠΏΡΠ²Π° 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- ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΎΠ±Π΅ΠΊΡ
Flask. - ΠΠ°Π΄Π°Π²Π°Π½Π΅ Π½Π° Π°Π΄ΡΠ΅ΡΠ° Π·Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° POST-Π·Π°ΡΠ²ΠΊΠΈ.
- ΠΠ·Π²Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΡΠΎ
sentenceΠΎΡ ΡΡΠ»ΠΎΡΠΎ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°. - ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Π°Π½ΠΎΠ½ΠΈΠΌΠ΅Π½ ΠΎΠ±Π΅ΠΊΡ
TextBlobΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ°polarityΠ·Π° ΠΏΡΡΠ²ΠΎΡΠΎ ΠΏΠΎΠ΄Π°Π΄Π΅Π½ΠΎ Π² ΡΡΠ»ΠΎΡΠΎ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΠΈΠ·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ (Π² Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΠΎΠ²Π° Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΎΡΠΎ ΠΈΠ·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π° Π·Π° Π°Π½Π°Π»ΠΈΠ·). - ΠΡΡΡΠ°Π½Π΅ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡ, Π² ΠΊΠΎΠΉΡΠΎ ΡΡΠ΄ΡΡΠΆΠ° ΡΠ΅ΠΊΡΡΠ° Π½Π° ΠΈΠ·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π·Π° Π½Π΅Π³ΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»
polarity. - Π‘ΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Flask-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π½Π° Π°Π΄ΡΠ΅Ρ
0.0.0.0:5000(ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ ΠΎΠ±ΡΡΠ½Π΅ΡΠ΅ ΠΊΡΠΌ Π½Π΅Π³ΠΎ ΠΈ Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΊΠ°ΡΠΎlocalhost:5000).
Π‘Π΅Π³Π° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΠ·ΠΈΡΠ΅, ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΡΠ° ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈ. Π’Π΅ ΡΠ° Π½Π°ΡΡΡΠΎΠ΅Π½ΠΈ Π΄Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π°Ρ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈ. ΠΡΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΡ Π΅ΠΌΠ°ΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ Π΅ΡΠ°ΠΏ Π½Π° ΡΠ°Π±ΠΎΡΠ°.

ΠΡΠΈΡΠΊΠΈ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΠ·ΠΈ, ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΡΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈ Π² ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅
Π‘Π΅Π³Π°, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅, ΠΎΡΠ²ΠΎΡΠ΅ΡΠ΅ React ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² Π±ΡΠ°ΡΠ·ΡΡΠ° ΠΈ ΠΎΠΏΠΈΡΠ°ΠΉΡΠ΅ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ Ρ Π½Π΅Π³ΠΎ Π½ΡΠΊΠΎΠ΅ ΠΈΠ·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΠΊΠΎ Π²ΡΠΈΡΠΊΠΎ Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ β ΡΠ»Π΅Π΄ Π½Π°ΡΠΈΡΠΊΠ°Π½Π΅ Π½Π° Π±ΡΡΠΎΠ½Π° Send ΡΠ΅ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠΎΠ΄ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΡΠΎ ΠΏΠΎΠ»Π΅.
Π ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΡΠ°Π·Π΄Π΅Π» ΡΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π½Π°ΡΠΈΡΠ΅ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΠ·ΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Docker. Π’ΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, Π·Π° Π΄Π° ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° Kubernetes.
ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Docker
β ΡΠΎΠ²Π° Π΅ ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ΡΠΎ, ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ°ΡΠΈΡΠ°Ρ Ρ ΠΎΡΠ΅ "ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΎΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ" (container orchestrator). ΠΠΊΠΎ Kubernetes ΡΠ°Π±ΠΎΡΠΈ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, ΡΠΎ ΠΏΡΠ΅Π΄ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ°Π·ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°, ΡΡΡΠ±Π²Π° ΠΏΡΡΠ²ΠΎ Π΄Π° ΡΠ΅ ΡΠ΄ΠΎΠ±ΠΈΠ΅ΠΌ Ρ ΡΠ΅Π·ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ. ΠΠΎ ΠΏΡΡΠ²ΠΎ Π½Π΅ΠΊΠ° ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅. ΠΠ°ΠΉ Π΅ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΎΡΠΎ ΠΎΠ±ΡΡΠ½Π΅Π½ΠΈΠ΅ Π½Π° Π²ΡΠΏΡΠΎΡΠ° ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΡΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΠΌ Π² ΠΊ Docker:
ΠΠ±ΡΠ°Π·ΡΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π΅ Π»Π΅ΠΊ, Π°Π²ΡΠΎΠ½ΠΎΠΌΠ΅Π½ ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΠΏΠ°ΠΊΠ΅Ρ, ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠΉΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π° Π²ΡΠΈΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ ΠΌΡ: ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΡΡΠ΅Π΄Π°ΡΠ° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² ΡΡΠ΅Π΄ΠΈ Linux ΠΈ Windows, ΠΊΠ°ΡΠΎ ΡΠ΅ Π²ΠΈΠ½Π°Π³ΠΈ ΡΠ°Π±ΠΎΡΡΡ Π΅Π΄Π½Π°ΠΊΠ²ΠΎ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΡΠ°.
Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈ Π½Π° Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΎΠ½Π½ΠΈ ΡΡΡΠ²ΡΡΠΈ, ΠΈ Π²ΡΠ² Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ ΡΡΠ΅Π΄ΠΈ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠ΅ Π² ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ ΡΠ°Π±ΠΎΡΡΡ Π΅Π΄Π½Π°ΠΊΠ²ΠΎ.
ΠΠ° Π΄Π° ΠΈΠ·ΡΠ»Π΅Π΄Π²Π°ΠΌΠ΅ ΠΎΡΠΎΠ±Π΅Π½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΠΈ Π΄Π° Π³ΠΈ ΡΡΠ°Π²Π½ΠΈΠΌ Ρ Π΄ΡΡΠ³ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½Π΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Ρ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°Π½Π΅ΡΠΎ Π½Π° React-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ.
βΠΠ±ΡΠ»ΡΠΆΠ²Π°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° React-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π°
ΠΠΏΠΈΡΠ²Π°ΠΉΠΊΠΈ ΡΠ΅ Π΄Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ°ΡΠΈΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ, ΡΠ΅ ΡΠ΅ ΡΠ±Π»ΡΡΠΊΠ°ΠΌΠ΅ ΡΡΡ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠΈ:
- ΠΠ΅Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π²ΡΡΠΊΠ° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° ΠΏΡΠ»Π½ΠΎΡΠ΅Π½Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°.
- ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ°. Π’ΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΡΠ°Π±ΠΎΡΠΈ Π½Π° Π½ΡΠΊΠΎΠΉ Π»ΠΎΠΊΠ°Π»Π΅Π½ ΠΊΠΎΠΌΠΏΡΡΡΡ, ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ ΠΏΡΠΎΡΠ°Π±ΠΎΡΠΈ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΎΠ½Π΅Π½ ΡΡΡΠ²ΡΡ.
- ΠΠ°Π²Π½ΠΎ ΠΈ ΡΠ΅ΡΡΡΡΠ½ΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π°ΡΠΎ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΎ Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ.

Π£Π΅Π±-ΡΡΡΠ²ΡΡ Nginx, ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°Ρ ΡΡΠ°ΡΠΈΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΡΡΠ°ΡΡΠΈΡΠ°Π½ Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π°
ΠΠΊΠΎ ΠΎΠ±Π°ΡΠ΅ Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π° Π·Π°Π΄Π°ΡΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈΡΠ΅ ΠΌΠ°ΡΠΈΠ½ΠΈ, ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠ°Ρ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΠ΅Ρ Π½ΠΈ ΡΠΈΠ»Π½ΠΈ ΡΡΡΠ°Π½ΠΈ:
- ΠΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅: ΡΠ°Π±ΠΎΡΠ° Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° ΡΡΠ΅Π· Docker.
- ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ°. ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΊΠΎΠΉΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ° Π½Π° ΡΠ²ΠΎΡ ΠΊΠΎΠΌΠΏΡΡΡΡ, ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ Π½Π°Π²ΡΡΠΊΡΠ΄Π΅.
- ΠΠ΅ΠΊΠΎΡΠΎ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ»ΠΎΠ΅Π²Π΅ Π½Π° ΠΎΠ±ΡΠ°Π·ΠΈΡΠ΅.

Π£Π΅Π± ΡΡΡΠ²ΡΡ Nginx, ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°Ρ ΡΡΠ°ΡΠΈΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΡΡΠ°ΡΡΠΈΡΠ°Π½ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ.
Π‘ΡΠ°Π²Π½ΠΈΡ ΠΌΠ΅ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ ΡΠ°ΠΌΠΎ ΠΏΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠΎΡΠΊΠΈ, Π½ΠΎ Π΄ΠΎΡΠΈ ΡΠΎΠ²Π° Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ, Π·Π° Π΄Π° ΡΡΠ΅ΡΠΈΠΌ ΡΠΈΠ»Π½ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅. ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ Docker.
βΠ‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π· Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π·Π° React-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
ΠΡΠ½ΠΎΠ²Π½ΠΈΡΡ ΡΡΡΠΎΠΈΡΠ΅Π»Π΅Π½ Π±Π»ΠΎΠΊ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Docker Π΅ ΡΠ°ΠΉΠ»ΡΡ Dockerfile. Π Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ ΡΠ°ΠΉΠ» ΡΠ΅ ΠΏΡΠ°Π²ΠΈ Π·Π°ΠΏΠΈΡ Π·Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΎΠ±ΡΠ°Π· Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π²ΠΊΠ»ΡΡΠ²Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΡΠΊΠ°Π·Π²Π°ΡΠ° ΡΠ΅Π΄Π° Π½Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π½Π° Π½ΡΠΆΠ΄ΠΈΡΠ΅ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΡΠ΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠ°ΠΉΠ»Π° Dockerfile, Π½Π΅ΠΊΠ° ΡΠΈ ΠΏΡΠΈΠΏΠΎΠΌΠ½ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡΠ°Π²Π΅Ρ
ΠΌΠ΅, Π·Π° Π΄Π° ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΠΈΠΌ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Π½Π° React-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ Π½Π° Nginx-ΡΡΡΠ²ΡΡΠ°:
- Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ Π½Π° React-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ (
npm run build). - Π‘ΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Nginx-ΡΡΡΠ²ΡΡΠ°.
- ΠΠΎΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ°
buildΠΎΡ ΠΏΠ°ΠΏΠΊΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°sa-frontendΠ² ΠΏΠ°ΠΏΠΊΠ°ΡΠ° Π½Π° ΡΡΡΠ²ΡΡΠ°nginx/html.
ΠΠΎ-Π΄ΠΎΠ»Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΈ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΈΠ·Π²ΡΡΡΠ²Π°Π½ΠΈ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΡ.
βΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π½Π° ΡΠ°ΠΉΠ»Π° Dockerfile Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ SA-Frontend
ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈ Π² Dockerfile Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ SA-Frontend, ΡΠ΅ ΡΡΡΡΠΎΡΡ ΡΠ°ΠΌΠΎ ΠΎΡ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. Π‘ΡΠ°Π²Π° Π²ΡΠΏΡΠΎΡ, ΡΠ΅ Π³ΡΡΠΏΠ°ΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π½Π° Nginx Π΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΠΈΠ»Π° ΠΎΡΠ½ΠΎΠ²Π΅Π½ Π·Π° Nginx, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π½Π°ΡΠΈΡ ΠΎΠ±ΡΠ°Π·. ΠΡΠΎ Π΄Π²Π΅ΡΠ΅ ΡΡΡΠΏΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΠΏΠΈΡΠ΅ΠΌ:
- ΠΠ°ΠΊΡΠΎ ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΎΠ±ΡΠ°Π·Π° ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΎΠ±ΡΠ°Π· Π½Π° Nginx.
- Π‘ΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΠΏΠΊΠ°ΡΠ°
sa-frontend/buildΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΊΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΠΏΠ°ΠΏΠΊΠ°ΡΠ° Π½Π° ΠΎΠ±ΡΠ°Π·Π°.nginx/html.
ΠΠΊΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ ΠΎΡ ΡΠΎΠ²Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΡΠΌ ΡΠ°ΠΉΠ»Π° Dockerfile, ΡΠΎΠΉ ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°:
FROM nginx
COPY build /usr/share/nginx/html ΠΠ°ΠΊΡΠΎ Π²ΠΈΠΆΠ΄Π°ΡΠ΅, Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠΎ, Π° ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°ΠΉΠ»Π° Π΄ΠΎΡΠΈ Π΅ Π΄ΠΎΡΡΠ° ΡΠ΅ΡΠ»ΠΈΠ²ΠΎ ΠΈ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌΠΎ. Π’ΠΎΠ·ΠΈ ΡΠ°ΠΉΠ» ΠΊΠ°Π·Π²Π° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π΄Π° Π²Π·Π΅ΠΌΠ΅ ΠΎΠ±ΡΠ°Π· nginx Π²ΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π²Π΅ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ°, ΠΈ Π΄Π° ΠΊΠΎΠΏΠΈΡΠ° ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° build Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° nginx/html.
Π’ΡΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΡΠ·Π½ΠΈΠΊΠ½Π΅ Π²ΡΠΏΡΠΎΡ ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΡΠΎΠ²Π° ΠΎΡΠΊΡΠ΄Π΅ Π·Π½Π°ΠΌ ΠΊΡΠ΄Π΅ ΡΠΎΡΠ½ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΊΠΎΠΏΠΈΡΠ°ΠΌ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ ΠΎΡ ΠΏΠ°ΠΏΠΊΠ°ΡΠ° build, Ρ.Π΅. β ΠΎΡΠΊΡΠ΄Π΅ ΠΏΡΠΎΠΈΠ·Π»ΠΈΠ·Π° ΠΏΡΡΡΡ /usr/share/nginx/html. ΠΡΡΡΠ½ΠΎΡΡ ΠΈ ΡΡΠΊ Π½ΡΠΌΠ° Π½ΠΈΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ. ΠΡΠΎΡΡΠΎ ΡΡΠΎΡΠ²Π΅ΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π° Π² ΠΎΠ±ΡΠ°Π·Π°.
βΠ‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π· ΠΈ ΠΊΠ°ΡΠ²Π°Π½Π΅ΡΠΎ ΠΌΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ
ΠΡΠ΅Π΄ΠΈ Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ°Π±ΠΎΡΠΈΠΌ Ρ Π³ΠΎΡΠΎΠ²ΠΈΡ ΠΎΠ±ΡΠ°Π·, ΡΡΡΠ±Π²Π° Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠΈΠΌ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π½Π° ΠΎΠ±ΡΠ°Π·ΠΈ. ΠΠ° ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π±Π΅Π·ΠΏΠ»Π°ΡΠ½Π°ΡΠ° ΠΎΠ±Π»Π°ΡΠ½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π·Π° Ρ ΠΎΡΡΠΈΠ½Π³ Π½Π° ΠΎΠ±ΡΠ°Π·ΠΈ Docker Hub. ΠΠ° ΡΠΎΠ·ΠΈ Π΅ΡΠ°ΠΏ Π½Π° ΡΠ°Π±ΠΎΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
- ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ .
- Π Π΅Π³ΠΈΡΡΡΠΈΡΠ°ΠΉΡΠ΅ ΡΠ΅ Π½Π° ΡΠ°ΠΉΡΠ° Π½Π° Docker Hub.
- ΠΠ»Π΅Π·ΡΠ΅ Π² Π°ΠΊΠ°ΡΠ½ΡΠ° ΡΠΈ, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΉΠΊΠΈ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
Π‘Π΅Π³Π° ΡΡΡΠ±Π²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° sa-frontend ΠΈ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅ ΡΠ°ΠΌ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
docker build -f Dockerfile -t $DOCKER_USER_ID/sentiment-analysis-frontend . Π’ΡΠΊ ΠΈ ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΠΊ Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ $DOCKER_USER_ID ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Ρ Π²Π°ΡΠ΅ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎ ΠΈΠΌΠ΅ Π² Docker Hub. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°Π·ΠΈ ΡΠ°ΡΡ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°: rinormaloku/sentiment-analysis-frontend.
ΠΠ°ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠΊΡΠ°ΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°, ΠΏΡΠ΅ΠΌΠ°Ρ
Π²Π°ΠΉΠΊΠΈ -f Dockerfile, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π² ΠΏΠ°ΠΏΠΊΠ°ΡΠ°, Π² ΠΊΠΎΡΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°, ΡΠΎΠ·ΠΈ ΡΠ°ΠΉΠ» Π²Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°.
ΠΠ° Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΈΡ ΠΎΠ±ΡΠ°Π· Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, ΡΠ΅ Π²ΠΈ Π΅ Π½ΡΠΆΠ½Π° ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
docker push $DOCKER_USER_ID/sentiment-analysis-frontendΠ‘Π»Π΅Π΄ Π½Π΅ΠΉΠ½ΠΎΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ ΡΠΏΠΈΡΡΠΊΠ° Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈΡΠ΅ ΡΠΈ Π½Π° Docker Hub, Π·Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ Π΄Π°Π»ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ±ΡΠ°Π·Π° Π² ΠΎΠ±Π»Π°ΡΠ½ΠΎΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
βΠ‘ΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°
Π‘Π΅Π³Π° Π²ΡΠ΅ΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈ ΠΈ ΡΡΠ°ΡΡΠΈΡΠ° ΠΎΠ±ΡΠ°Π·Π°, ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΊΠ°ΡΠΎ $DOCKER_USER_ID/sentiment-analysis-frontend. ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°, ΠΈΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ:
docker pull $DOCKER_USER_ID/sentiment-analysis-frontend
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend Π‘Π΅Π³Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡΡ Π΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½ ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΠ°, ΡΡΠ·Π΄Π°Π²Π°ΠΉΠΊΠΈ Π΄ΡΡΠ³ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ ΠΎΠ±ΡΠ°Π·ΠΈ. ΠΠΎ ΠΏΡΠ΅Π΄ΠΈ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΠΌ, Π½Π΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΡΠ° 80:80, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΡΠ΅ΡΠ° Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π·Π° ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π½Π΅ΠΏΠΎΠ½ΡΡΠ½Π°.
- ΠΡΡΠ²ΠΎΡΠΎ ΡΠΈΡΠ»ΠΎ
80Π΅ Π½ΠΎΠΌΠ΅ΡΡΡ Π½Π° ΠΏΠΎΡΡΠ° Π½Π° Ρ ΠΎΡΡΠ° (Ρ.Π΅. Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΡ). - ΠΡΠΎΡΠΎΡΠΎ ΡΠΈΡΠ»ΠΎ
80Π΅ ΠΏΠΎΡΡΡΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, Π½Π° ΠΊΠΎΠΉΡΠΎ Π·Π°ΠΏΡΠΎΡΡΡ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ΅Π½.
ΠΠ΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΈΠ»ΡΡΡΡΠ°ΡΠΈΡ.

ΠΡΠ΅Π½Π°ΡΠΎΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΡΠΎΠ²Π΅ΡΠ΅
Π‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π°Π½Π΅ Π½Π° Π·Π°ΠΏΡΠΎΡΠΈΡΠ΅ ΠΎΡ ΠΏΠΎΡΡΠ° <hostPort> ΠΊΡΠΌ ΠΏΠΎΡΡΠ° <containerPort>. Π’ΠΎΠ΅ΡΡ, Π·Π°ΡΠ²ΠΊΠ° ΠΊΡΠΌ ΠΏΠΎΡΡΠ° Π½Π° 80 ΠΊΠΎΠΌΠΏΡΡΡΡΠ° ΡΠ΅ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π° ΠΊΡΠΌ ΠΏΠΎΡΡΠ° 80 Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΏΠΎΡΡΡΡ 80 Π΅ ΠΎΡΠ²ΠΎΡΠ΅Π½ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΎΡ ΡΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΏΡΡΡΡ Π½Π° Π°Π΄ΡΠ΅Ρ localhost:80. ΠΠΊΠΎ Π²Π°ΡΠ°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Docker, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° Π½Π° Docker Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π°, ΡΠΈΠΉΡΠΎ Π°Π΄ΡΠ΅Ρ ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°ΡΠΎ :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.
βΠ’Π΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈ Π΄Π° ΡΠ΅ Π΄ΠΎΠ²Π΅ΡΠΈΡΠ΅ Π½Π° Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π½Π΅ ΡΡΠ΅ ΡΠ΅ΡΡΠ²Π°Π»ΠΈ? ΠΠ· ΡΡΡΠΎ Π½Π΅ ΠΌΠΎΠ³Π°. ΠΠ΅ΠΊΠ° ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅ Π½Π°ΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ.
- ΠΠ΅ΠΊΠ° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ
sa-logicΠΈ Π΄Π° Π³ΠΎ Π½Π°ΡΡΡΠΎΠΈΠΌ Π΄Π° ΡΠ»ΡΡΠ° Π½Π° ΠΏΠΎΡΡΠ°5050:docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic - ΠΠ΅ΠΊΠ° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ
sa-webappΠΈ Π΄Π° Π³ΠΎ Π½Π°ΡΡΡΠΎΠΈΠΌ Π΄Π° ΡΠ»ΡΡΠ° Π½Π° ΠΏΠΎΡΡΠ°8080. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΡΡΡΠΎΠΈΠΌ ΠΏΠΎΡΡΠ°, Π½Π° ΠΊΠΎΠΉΡΠΎ Python-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΡΠ°ΠΊΠ° Π·Π°ΡΠ²ΠΊΠΈ ΠΎΡ Java-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΏΡΠ΅Π½Π°Π·Π½Π°ΡΠ°Π²Π°ΠΉΠΊΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ°SA_LOGIC_API_URL:$ docker run -d -p 8080:8080 -e SA_LOGIC_API_URL='http://:5000' $DOCKER_USER_ID/sentiment-analysis-web-app
ΠΠ° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΠΎΡΠΊΡΠΈΠ΅ΡΠ΅ IP Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈΠ»ΠΈ Π²ΠΈΡΡΡΠ°Π»Π½Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π° Docker β Π²ΠΈΠΆΡΠ΅ ΡΠ°ΠΉΠ»Π° .
ΠΠ΅ΠΊΠ° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ 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?
Π’ΠΎΠΊΡ-ΡΠΎ ΡΠ°Π·Π³Π»Π΅Π΄Π°Ρ
ΠΌΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Dockerfile, Π³ΠΎΠ²ΠΎΡΠΈΡ
ΠΌΠ΅ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°ΠΌΠ΅ ΠΎΠ±ΡΠ°Π·ΠΈ ΠΈ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°ΠΌΠ΅ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Docker. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π½Π°ΡΡΠΈΡ
ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΡΡΠΊΠΎΡΠΈΠΌ ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ±ΡΠ°Π·ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΠ°ΠΉΠ»Π° .dockerignore. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° Π½Π°ΡΠΈΡΠ΅ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΈ Π²Π΅ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π² Docker ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ. Π’ΡΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΡΠ·Π½ΠΈΠΊΠ½Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΎΡΠ½ΠΎΠ²Π°ΡΠ΅Π»Π΅Π½ Π²ΡΠΏΡΠΎΡ Π·Π°ΡΠΎ Π½ΠΈ Π΅ Kubernetes. ΠΠ° ΡΠΎΠ·ΠΈ Π²ΡΠΏΡΠΎΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½Π° Π²ΡΠΎΡΠ°ΡΠ° ΡΠ°ΡΡ Π½Π° ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°. Π Π·Π°ΡΠ΅Π³Π° ΠΏΠΎΠΌΠΈΡΠ»Π΅ΡΠ΅ Π½Π°Π΄ ΡΠ»Π΅Π΄Π½ΠΈΡ Π²ΡΠΏΡΠΎΡ:
ΠΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ Π½Π°ΡΠ΅ΡΠΎ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° ΡΠ΅ΠΊΡΡΠΎΠ²Π΅ Π΅ ΡΡΠ°Π½Π°Π»ΠΎ ΡΠ²Π΅ΡΠΎΠ²Π½ΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎ. ΠΡΡΠΊΠ° ΠΌΠΈΠ½ΡΡΠ° ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΈΡΠ΅ sa-webapp ΠΈ sa-logic ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΏΠΎΠ΄ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅. ΠΠ°ΠΊ Π΄Π° ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅, Π² ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΈΡΠ΅?
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
