ืžื“ืจื™ืš Kubernetes ื—ืœืง 1: ื™ื™ืฉื•ืžื™ื, ืžื™ืงืจื•-ืฉื™ืจื•ืชื™ื ื•ืžื›ื•ืœื•ืช

ืœื‘ืงืฉืชื ื•, ื”ื‘ืจ ื™ืฆืจ ืจื›ื–ืช ืงื•ื‘ืจื ื˜ ื•ืื ื• ืฉืžื—ื™ื ืœื”ืฆื™ื‘ ื‘ื• ืืช ื”ืคืจืกื•ื ื”ืจืืฉื•ืŸ. ื”ื™ืจืฉื!

Kubernetes ื–ื” ืงืœ. ืœืžื” ื”ื‘ื ืงื™ื ืžืฉืœืžื™ื ืœื™ ื”ืจื‘ื” ื›ืกืฃ ื›ื“ื™ ืœืขื‘ื•ื“ ื‘ืชื—ื•ื ื”ื–ื”, ื‘ืขื•ื“ ืฉื›ืœ ืื—ื“ ื™ื›ื•ืœ ืœืฉืœื•ื˜ ื‘ื˜ื›ื ื•ืœื•ื’ื™ื” ื”ื–ื• ืชื•ืš ืฉืขื•ืช ืกืคื•ืจื•ืช?

ืžื“ืจื™ืš Kubernetes ื—ืœืง 1: ื™ื™ืฉื•ืžื™ื, ืžื™ืงืจื•-ืฉื™ืจื•ืชื™ื ื•ืžื›ื•ืœื•ืช

ืื ืืชื” ืžื˜ื™ืœ ืกืคืง ื‘ื›ืš ืฉื ื™ืชืŸ ืœืœืžื•ื“ Kubernetes ื›ืœ ื›ืš ืžื”ืจ, ืื ื™ ืžืฆื™ืข ืœืš ืœื ืกื•ืช ื–ืืช ื‘ืขืฆืžืš. ื›ืœื•ืžืจ, ืœืื—ืจ ืฉืœื™ื˜ืช ื‘ื—ื•ืžืจ ื–ื”, ืชื•ื›ืœ ืœื”ืจื™ืฅ ื™ื™ืฉื•ื ื”ืžื‘ื•ืกืก ืขืœ ืžื™ืงืจื•-ืฉื™ืจื•ืชื™ื ื‘ืืฉื›ื•ืœ Kubernetes. ืื ื™ ื™ื›ื•ืœ ืœื”ื‘ื˜ื™ื— ื–ืืช, ืžื›ื™ื•ื•ืŸ ืฉื“ื•ื•ืงื ื‘ืื•ืชื” ืžืชื•ื“ื•ืœื•ื’ื™ื” ืฉื‘ื” ื ืขืฉื” ืฉื™ืžื•ืฉ ื›ืืŸ ืื ื™ ืžืœืžื“ ืืช ื”ืœืงื•ื—ื•ืช ืฉืœื ื• ืœืขื‘ื•ื“ ืขื Kubernetes. ืžื” ืžื™ื™ื—ื“ ืืช ื”ืžื“ืจื™ืš ื”ื–ื” ืžืื—ืจื™ื? ืœืžืขืฉื”, ื™ืฉ ื”ืจื‘ื” ื“ื‘ืจื™ื. ืื–, ืจื•ื‘ ื”ื—ื•ืžืจื™ื ื”ืืœื” ืžืชื—ื™ืœื™ื ื‘ื”ืกื‘ืจ ืฉืœ ื“ื‘ืจื™ื ืคืฉื•ื˜ื™ื - ื”ืžื•ืฉื’ื™ื ืฉืœ Kubernetes ื•ื”ืชื›ื•ื ื•ืช ืฉืœ ื”ืคืงื•ื“ื” kubectl. ืžื—ื‘ืจื™ ื”ื—ื•ืžืจื™ื ื”ืœืœื• ืžื ื™ื—ื™ื ืฉื”ืงื•ืจืื™ื ืฉืœื”ื ืžื›ื™ืจื™ื ืืช ืคื™ืชื•ื— ื”ืืคืœื™ืงืฆื™ื•ืช, ืฉื™ืจื•ืชื™ ืžื™ืงืจื• ื•ืžื›ื•ืœื•ืช Docker. ื ืœืš ื‘ื“ืจืš ืื—ืจืช. ืจืืฉื™ืช, ื ื“ื‘ืจ ืขืœ ืื™ืš ืœื”ืคืขื™ืœ ืืคืœื™ืงืฆื™ื” ื”ืžื‘ื•ืกืกืช ืขืœ ืžื™ืงืจื•-ืฉื™ืจื•ืชื™ื ื‘ืžื—ืฉื‘. ืœืื—ืจ ืžื›ืŸ ื ืกืชื›ืœ ืขืœ ื‘ื ื™ื™ืช ืชืžื•ื ื•ืช ืžื™ื›ืœ ืขื‘ื•ืจ ื›ืœ ืฉื™ืจื•ืช ืžื™ืงืจื•. ื•ืื—ืจื™ ื–ื”, ื ื›ื™ืจ ืืช Kubernetes ื•ื ื‘ื—ืŸ ืคืจื™ืกืช ืืคืœื™ืงืฆื™ื” ื”ืžื‘ื•ืกืกืช ืขืœ microservices ื‘ืืฉื›ื•ืœ ื”ืžื ื•ื”ืœ ืขืœ ื™ื“ื™ 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. ืืชื” ื™ื›ื•ืœ ืœืฉื ื•ืช ืžืฉื”ื• ื‘ืงื•ื“ ืฉืœื•. ืืชื” ืชืจืื” ืžื™ื“ ืืช ื”ื”ืฉืคืขื” ืฉืœ ืฉื™ื ื•ื™ื™ื ืืœื” ื‘ื“ืคื“ืคืŸ. ื–ื” ืืคืฉืจื™ ื”ื•ื“ื•ืช ืœืžื” ืฉื ืงืจื "ื—ื" ื”ื—ืœืคื” ืฉืœ ืžื•ื“ื•ืœื™ื. ื–ื” ื”ื•ืคืš ืืช ื”ืคื™ืชื•ื— ื”ื—ื–ื™ืชื™ ืœื—ื•ื•ื™ื” ืคืฉื•ื˜ื” ื•ืžื”ื ื”.

โ–ื”ื›ื ืช ืืคืœื™ืงืฆื™ื™ืช 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. ื›ืชื•ื‘ืช ื”ืืชืจ ืฉืืœื™ื” ืžืชื‘ืฆืขืช ื‘ืงืฉืช ื”-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: ื™ื™ืฉื•ืžื™ื, ืžื™ืงืจื•-ืฉื™ืจื•ืชื™ื ื•ืžื›ื•ืœื•ืช
ืื ื—ื ื• ืฆืจื™ื›ื™ื ื™ื™ืฉื•ื ืื‘ื™ื‘ ืฉื™ื›ื•ืœ ืœืงื‘ืœ ื‘ืงืฉืช 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. ื‘-SentimentController ื™ืฉ ืฉื“ื” 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 ืขื•ื‘ื“ ืขื ืงื•ื ื˜ื™ื™ื ืจื™ื, ืื– ืœืคื ื™ ื”ืฉื™ืžื•ืฉ ื‘ืžืขืจื›ืช ื–ื• ืขืœื™ื ื• ืœืจื›ื•ืฉ ืชื—ื™ืœื” ืงื•ื ื˜ื™ื™ื ืจื™ื ืืœื”. ืื‘ืœ ืงื•ื“ื ื›ืœ, ื‘ื•ืื• ื ื“ื‘ืจ ืขืœ ืžื” ื”ื ืžื™ื›ืœื™ื. ืื•ืœื™ ื ื™ืชืŸ ืœืžืฆื•ื ืืช ื”ืชืฉื•ื‘ื” ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ ืœืฉืืœื” ืžื” ื–ื” ืชื™ืขื•ื“ ืœื“ื•ืงืจ:

ืชืžื•ื ืช ืงื•ื ื˜ื™ื™ื ืจ ื”ื™ื ื—ื‘ื™ืœืช ื”ืคืขืœื” ืงืœืช ืžืฉืงืœ, ืขืฆืžืื™ืช ื”ืžื›ื™ืœื” ืืคืœื™ืงืฆื™ื”, ื”ื›ื•ืœืœืช ืืช ื›ืœ ื”ื“ืจื•ืฉ ืœื”ืคืขืœืชื”: ืงื•ื“ ืืคืœื™ืงืฆื™ื”, ืกื‘ื™ื‘ืช ื‘ื™ืฆื•ืข, ื›ืœื™ ืžืขืจื›ืช ื•ืกืคืจื™ื•ืช, ื”ื’ื“ืจื•ืช. ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืชื•ื›ื ื•ืช ืžื›ื•ืœื•ืช ื‘ืกื‘ื™ื‘ื•ืช ืœื™ื ื•ืงืก ื•-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.

ื‘ืฉืœื‘ ื–ื”, ืœืื—ืจ ืฉื”ืฉืงืช ื‘ื”ืฆืœื—ื” ืืช ืžื™ื›ืœ ื”ื™ื™ืฉื•ืžื™ื ื”ืงื“ืžื™, ืืชื” ืืžื•ืจ ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœืคืชื•ื— ืืช ื”ื“ืฃ ืฉืœื• ื‘ื“ืคื“ืคืŸ.

โ–ืงื•ื‘ืฅ .docerignore

ืื™ืกื•ืฃ ืชืžื•ื ืช ืืคืœื™ืงืฆื™ื” SA-Frontend, ื™ื›ื•ืœื ื• ืœืฉื™ื ืœื‘ ืฉื”ืชื”ืœื™ืš ื”ื–ื” ืžืชื‘ืจืจ ื›ืื™ื˜ื™ ื‘ื™ื•ืชืจ. ื–ื” ืงื•ืจื” ื‘ื’ืœืœ ืฉื”ืงืฉืจ ืฉืœ ื‘ื ื™ื™ืช ื”ืชืžื•ื ื” ื—ื™ื™ื‘ ืœื”ื™ืฉืœื— ืœื“ืžื•ืŸ Docker. ื”ืกืคืจื™ื™ื” ื”ืžื™ื™ืฆื’ืช ืืช ื”ืงืฉืจ ื”-build ืžืฆื•ื™ื ืช ื›ืืจื’ื•ืžื ื˜ ื”ืื—ืจื•ืŸ ืฉืœ ื”ืคืงื•ื“ื” 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 ืื• ืžื—ืฉื‘ ื•ื™ืจื˜ื•ืืœื™, ืขื™ื™ืŸ ื‘ืงื•ื‘ืฅ 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: ื™ื™ืฉื•ืžื™ื, ืžื™ืงืจื•-ืฉื™ืจื•ืชื™ื ื•ืžื›ื•ืœื•ืช

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”