แ‹จแŠฉแ‰ แˆญแŠ”แ‰ตแˆต แˆ›แŒ แŠ“แŠจแˆชแ‹ซ แ‰ตแˆแˆ…แˆญแ‰ต แŠญแแˆ 1แก แŠ แ•แˆŠแŠฌแˆฝแŠ–แ‰ฝแฃ แˆ›แ‹ญแŠญแˆฎ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝ แŠฅแŠ“ แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ

แ‰ แŒฅแ‹ซแ‰„แ‹ซแ‰ฝแŠ• แˆ˜แˆฐแˆจแ‰ต แˆ€แ‰ฅแˆญ แˆ›แ‹•แŠจแˆ แˆแŒ แˆจ แŠฉแ‰ฃแŠ•แ‹ซแ‰ถแ‰ฝ แŠฅแŠ“ แ‹จแˆ˜แŒ€แˆ˜แˆชแ‹ซแ‹แŠ• แŠฅแ‰ตแˆ แ‰ แŠฅแˆฑ แ‹แˆตแŒฅ แ‰ แˆ›แˆตแ‰€แˆ˜แŒฅ แ‹ฐแˆตแ‰ฐแŠžแ‰ฝ แАแŠ•. แˆฐแ‰ฅแˆตแŠญแˆซแ‹ญแ‰ฅ แ‹ซแ‹ตแˆญแŒ‰!

Kubernetes แ‰€แˆ‹แˆ แАแ‹. แˆˆแˆแŠ•แ‹ตแŠ• แАแ‹ แ‰ฃแŠ•แŠฎแ‰ฝ แ‰ แ‹šแˆ… แŠ แŠซแ‰ฃแ‰ข แˆˆแˆ˜แˆตแˆซแ‰ต แ‰ฅแ‹™ แŒˆแŠ•แ‹˜แ‰ฅ แ‹จแˆšแŠจแแˆ‰แŠ, แˆ›แŠ•แˆ แˆฐแ‹ แ‹ญแˆ…แŠ• แ‰ดแŠญแŠ–แˆŽแŒ‚ แ‰ แŒฅแ‰‚แ‰ต แˆฐแ‹“แ‰ณแ‰ต แ‹แˆตแŒฅ แˆ˜แ‰†แŒฃแŒ แˆญ แ‹ญแ‰ฝแˆ‹แˆ?

แ‹จแŠฉแ‰ แˆญแŠ”แ‰ตแˆต แˆ›แŒ แŠ“แŠจแˆชแ‹ซ แ‰ตแˆแˆ…แˆญแ‰ต แŠญแแˆ 1แก แŠ แ•แˆŠแŠฌแˆฝแŠ–แ‰ฝแฃ แˆ›แ‹ญแŠญแˆฎ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝ แŠฅแŠ“ แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ

แŠฉแ‰ แˆญแŠ”แ‰ตแˆต แ‰ แแŒฅแАแ‰ต แˆ˜แˆ›แˆญ แŠฅแŠ•แ‹ฐแˆšแ‰ปแˆ แŠจแ‰ฐแŒ แˆซแŒ แˆฉ แŠฅแˆซแˆตแ‹Ž แˆˆแˆ›แ‹ตแˆจแŒ แŠฅแŠ•แ‹ฒแˆžแŠญแˆฉ แŠฅแˆ˜แŠญแˆญแ‹Žแ‰ณแˆˆแˆแข แ‹ญแŠธแ‹แˆ แ‹ญแˆ…แŠ•แŠ• แ‰แˆณแ‰แˆต แ‰ แˆšแŒˆแ‰ฃ แŠจแ‰ฐแˆˆแˆ›แˆ˜แ‹ฑ แ‰ แŠ‹แˆ‹ แ‰ แŠฉแ‰ แˆญแŠ”แ‰ตแˆต แŠญแˆ‹แˆตแ‰ฐแˆญ แ‹แˆตแŒฅ แ‰ฃแˆ‰ แˆ›แ‹ญแŠญแˆฎ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝ แˆ‹แ‹ญ แ‹จแ‰ฐแˆ˜แˆ แˆจแ‰ฐ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแŠ• แˆ›แˆ„แ‹ต แ‹ญแ‰ฝแˆ‹แˆ‰แข แˆˆแ‹šแˆ… แ‹‹แˆตแ‰ตแŠ“ แˆ˜แˆตแŒ แ‰ต แŠฅแ‰ฝแˆ‹แˆˆแˆ, แˆแŠญแŠ•แ‹ซแ‰ฑแˆ แ‹ฐแŠ•แ‰ แŠžแ‰ปแ‰ฝแŠ• แŠจแŠฉแ‰ แˆญแŠ”แ‰ตแˆต แŒ‹แˆญ แŠฅแŠ•แ‹ดแ‰ต แŠฅแŠ•แ‹ฐแˆšแˆ แˆฉ แˆˆแˆ›แˆตแ‰ฐแˆ›แˆญ แŠฅแ‹šแˆ… แ‹จแˆแŒ แ‰€แˆแ‰ แ‰ต แ‰ฐแˆ˜แˆณแˆณแ‹ญ แ‹˜แ‹ด แАแ‹. แ‹ญแˆ… แˆ˜แˆ˜แˆชแ‹ซ แŠจแˆŒแˆŽแ‰ฝ แ‹จแˆšแˆˆแ‹จแ‹ แˆแŠ•แ‹ตแŠ• แАแ‹? แ‰ แŠฅแ‹แАแ‰ฑ, แ‰ฅแ‹™ แАแŒˆแˆฎแ‰ฝ. แˆตแˆˆแ‹šแˆ…, แŠ แ‰ฅแ‹›แŠ›แ‹Žแ‰น แŠฅแАแ‹šแˆ… แ‰แˆณแ‰แˆถแ‰ฝ แ‰€แˆˆแˆ แ‹ซแˆ‰ แАแŒˆแˆฎแ‰ฝแŠ• แ‰ แˆ›แ‰ฅแˆซแˆซแ‰ต แ‹ญแŒ€แˆแˆซแˆ‰ - แ‹จ Kubernetes แŒฝแŠ•แˆฐ-แˆ€แˆณแ‰ฆแ‰ฝ แŠฅแŠ“ แ‹จ kubectl แ‰ตแ‹•แ‹›แ‹ แ‰ฃแˆ…แˆชแ‹ซแ‰ต. แ‹จแŠฅแАแ‹šแˆ… แŒฝแˆ‘แŽแ‰ฝ แ‹ฐแˆซแˆฒแ‹Žแ‰ฝ แŠ แŠ•แ‰ฃแ‰ขแ‹ซแ‰ธแ‹ แ‹จแˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แˆแˆ›แ‰ตแŠ•, แˆ›แ‹ญแŠญแˆฎ แˆฐแˆญแ‰ชแˆต แŠฅแŠ“ แ‹จแ‹ถแŠจแˆญ แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝแŠ• แŠฅแŠ•แ‹ฐแˆšแ‹ซแ‹แ‰… แ‹ญแŒˆแˆแ‰ณแˆ‰. แ‰ แˆŒแˆ‹ แˆ˜แŠ•แŒˆแ‹ต แŠฅแŠ•แˆ„แ‹ณแˆˆแŠ•. แ‰ แˆ˜แŒ€แˆ˜แˆชแ‹ซแฃ แ‰ แŠฎแˆแ’แ‹ฉแ‰ฐแˆญ แˆ‹แ‹ญ แ‰ฃแˆ‰ แˆ›แ‹ญแŠญแˆฎ แˆฐแˆญแ‰ชแˆต แˆ‹แ‹ญ แ‹จแ‰ฐแˆ˜แˆฐแˆจแ‰ฐ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแŠ• แŠฅแŠ•แ‹ดแ‰ต แˆ›แˆตแŠฌแ‹ต แŠฅแŠ•แ‹ณแˆˆแ‰ฅแŠ• แŠฅแŠ•แАแŒ‹แŒˆแˆญแข แŠจแ‹šแ‹ซแˆ แˆˆแŠฅแ‹ซแŠ•แ‹ณแŠ•แ‹ฑ แˆ›แ‹ญแŠญแˆฎ แŠ แŒˆแˆแŒแˆŽแ‰ต แ‹จแŠฅแ‰ƒ แˆ˜แŒซแŠ› แˆแˆตแˆŽแ‰ฝแŠ• แŠฅแŠ•แˆ˜แˆˆแŠจแ‰ณแˆˆแŠ•. แŠฅแŠ“ แŠจแ‹šแ‹ซ แ‰ แŠ‹แˆ‹ แŠจแŠฉแ‰ แˆญแŠ”แ‰ตแˆต แŒ‹แˆญ แŠฅแŠ•แ‰ฐแ‹‹แ‹ˆแ‰ƒแˆˆแŠ• แŠฅแŠ“ แ‰ แŠฉแ‰ แˆญแŠ”แ‰ตแˆต แ‰ แˆšแ‰ฐแ‹ณแ‹ฐแˆจแ‹ แŠญแˆ‹แˆตแ‰ฐแˆญ แ‹แˆตแŒฅ แ‰ แˆ›แ‹ญแŠญแˆฎ แˆฐแˆญแ‰ชแˆต แˆ‹แ‹ญ แ‰ แˆ˜แˆ˜แˆตแˆจแ‰ต แ‹จแˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแ‹แŠ• แˆ˜แ‹˜แˆญแŒ‹แ‰ต แŠฅแŠ•แˆ˜แˆจแˆแˆซแˆˆแŠ• แข

แ‹ญแˆ… แŠ แ‰€แˆซแˆจแ‰ฅ แ‹ˆแ‹ฐ แŠฉแ‰ แˆญแŠ”แ‰ตแˆต แ‰€แˆต แ‰ แ‰€แˆต แŠ แ‰€แˆซแˆจแ‰ฅ แฃ แˆแˆ‰แˆ แАแŒˆแˆญ แ‰ แŠฉแ‰ แˆญแŠ”แ‰ตแˆต แ‹แˆตแŒฅ แŠฅแŠ•แ‹ดแ‰ต แ‰ แ‰€แˆ‹แˆ‰ แŠฅแŠ•แ‹ฐแ‰ฐแ‰€แŠ“แŒ€ แˆˆแˆ˜แˆจแ‹ณแ‰ต แ‰ฐแˆซ แˆฐแ‹ แ‹จแˆšแ‹ซแˆตแˆแˆแŒˆแ‹ แˆแŠ• แŠฅแ‹จแˆ†แА แ‹ซแˆˆแ‹แŠ• แŒฅแˆแ‰… แŒแŠ•แ‹›แ‰ค แ‹ญแˆฐแŒฃแˆแข แŠฉแ‰ แˆญแŠ”แ‰ตแˆต แ‰ แŠฅแˆญแŒแŒฅ แ‰€แˆ‹แˆ แ‰ดแŠญแŠ–แˆŽแŒ‚ แАแ‹แฃ แˆ›แŠ•แˆ แˆŠแ‹ซแ‹แ‰… แ‹จแˆšแˆแˆแŒ แ‹จแ‰ต แŠฅแŠ“ แŠฅแŠ•แ‹ดแ‰ต แŒฅแ‰…แˆ แˆ‹แ‹ญ แŠฅแŠ•แ‹ฐแˆšแ‹แˆ แŠฅแˆตแŠซแ‹ˆแ‰€ แ‹ตแˆจแˆตแข

แŠ แˆแŠ•แฃ แ‰ฅแ‹™ แˆณแŠ•แŒจแАแ‰…แฃ แ‹ˆแ‹ฐ แˆฅแˆซ แŠฅแŠ•แŒแ‰ฃแŠ“ แˆตแˆˆแˆแŠ•แˆ แˆซแ‹ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แŠฅแŠ•แАแŒ‹แŒˆแˆญแข

แ‹จแˆ™แŠจแˆซ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ

แ‹จแŠฅแŠ› แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แŠ แŠ•แ‹ต แ‰ฐแŒแ‰ฃแˆญ แ‰ฅแ‰ป แ‹ญแˆฐแˆซแˆแข แŠฅแŠ•แ‹ฐ แŒแ‰ฅแŠ แ‰ต แŠ แŠ•แ‹ต แ‹“แˆจแแ‰ฐ แАแŒˆแˆญ แ‹ญแ‹ˆแˆตแ‹ณแˆ แฃ แŠจแ‹šแ‹ซ แ‰ แŠ‹แˆ‹ แฃ แ‹จแŒฝแˆ‘แ แ‰ตแŠ•แ‰ณแŠ” แˆ˜แˆณแˆชแ‹ซแ‹Žแ‰ฝแŠ• แ‰ แˆ˜แŒ แ‰€แˆ แฃ แ‹จแ‹šแˆ…แŠ• แ‹“แˆจแแ‰ฐ แАแŒˆแˆญ แˆตแˆœแ‰ต แ‰ตแŠ•แ‰ฐแŠ“ แ‹ซแŠซแˆ‚แ‹ณแˆ แฃ แ‹จแŠ แˆจแแ‰ฐ แАแŒˆแˆฉแŠ• แ‹ฐแˆซแˆฒ แˆˆแ‰ฐแ‹ˆแˆฐแА แАแŒˆแˆญ แ‹ซแˆˆแ‹แŠ• แˆตแˆœแ‰ณแ‹Š แŠ แˆ˜แˆˆแŠซแŠจแ‰ต แ‹ญแŒˆแˆ˜แŒแˆ›แˆแข

แ‹จแ‹šแˆ… แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แ‹‹แŠ“ แˆ˜แˆตแŠฎแ‰ต แ‹ญแˆ…แŠ• แ‹ญแˆ˜แˆตแˆ‹แˆแข

แ‹จแŠฉแ‰ แˆญแŠ”แ‰ตแˆต แˆ›แŒ แŠ“แŠจแˆชแ‹ซ แ‰ตแˆแˆ…แˆญแ‰ต แŠญแแˆ 1แก แŠ แ•แˆŠแŠฌแˆฝแŠ–แ‰ฝแฃ แˆ›แ‹ญแŠญแˆฎ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝ แŠฅแŠ“ แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ
แˆตแˆœแ‰ต แ‰ตแŠ•แ‰ฐแŠ“ แ‹จแ‹ตแˆญ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ

แŠจแ‰ดแŠญแŠ’แŠซแ‹Š แŠฅแ‹ญแ‰ณ แŠ แŠ•แƒแˆญ แฃ แŠ แ•แˆŠแŠฌแˆฝแŠ‘ แˆถแˆตแ‰ต แŒฅแ‰ƒแ‰…แŠ• แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แ‹ซแ‰€แˆ แАแ‹ แฃ แŠฅแ‹ซแŠ•แ‹ณแŠ•แ‹ฑแˆ แ‹จแ‰ฐแ‹ˆแˆฐแŠ‘ แ‰ฐแŒแ‰ฃแˆซแ‰ตแŠ• แ‹ญแˆแ‰ณแˆ แข

  • SA-Frontend React static แ‹แ‹ญแˆŽแ‰ฝแŠ• แ‹จแˆšแ‹ซแŒˆแˆˆแŒแˆ แ‹จNginx แ‹ตแˆญ แŠ แŒˆแˆแŒ‹แ‹ญ แАแ‹แข
  • SA-WebApp แ‰ แŒƒแ‰ซ แ‹จแ‰ฐแƒแˆ แŠจแŒแŠ•แ‰ฃแˆญ แ‹จแˆšแŒ แ‹จแ‰ แŒฅแ‹ซแ‰„แ‹Žแ‰ฝแŠ• แ‹จแˆšแ‹ซแˆตแ‰ฐแŠ“แŒแ‹ต แ‹จแ‹ตแˆญ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แАแ‹แข
  • SA-Logic แ‹จแŒฝแˆ‘แ แˆตแˆœแ‰ตแŠ• แ‰ตแŠ•แ‰ฐแŠ“ แ‹จแˆšแ‹ซแŠจแŠ“แ‹แŠ• แ‹จแ“แ‹ญแ‹˜แŠ• แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แАแ‹แข

แˆ›แ‹ญแŠญแˆฎ แˆฐแˆญแ‰ชแˆต แ‰ แ‰ฐแŠ“แŒฅแˆ แŠ แˆˆแˆ˜แŠ–แˆฉแŠ• แˆแ‰ฅ แˆ›แˆˆแ‰ต แ‹ซแˆตแˆแˆแŒ‹แˆ. "แ‹จแˆตแˆซแ‹Žแ‰ฝ แˆ˜แˆˆแ‹ซแ‹จแ‰ต" แ‹จแˆšแˆˆแ‹แŠ• แˆ€แˆณแ‰ฅ แ‰ฐแŒแ‰ฃแˆซแ‹Š แ‹ซแ‹ฐแˆญแŒ‹แˆ‰, แŒแŠ• แ‰ แ‰ฐแˆ˜แˆณแˆณแ‹ญ แŒŠแ‹œ แŠฅแˆญแˆต แ‰ แˆญแˆต แˆ˜แŒแ‰ฃแ‰ฃแ‰ต แ‹ซแˆตแˆแˆแŒ‹แ‰ธแ‹‹แˆ.

แ‹จแŠฉแ‰ แˆญแŠ”แ‰ตแˆต แˆ›แŒ แŠ“แŠจแˆชแ‹ซ แ‰ตแˆแˆ…แˆญแ‰ต แŠญแแˆ 1แก แŠ แ•แˆŠแŠฌแˆฝแŠ–แ‰ฝแฃ แˆ›แ‹ญแŠญแˆฎ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝ แŠฅแŠ“ แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ
แ‹แˆ‚แ‰ฅ แ‰ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแ‹ แ‹แˆตแŒฅ แ‹ญแˆแˆตแˆณแˆ

แŠจแˆ‹แ‹ญ แ‰ฃแˆˆแ‹ แˆฅแ‹•แˆ แ‹แˆตแŒฅ แ‰ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแ‹ แ‹แˆตแŒฅ แ‹ซแˆˆแ‹แŠ• แ‹จแ‹แˆ‚แ‰ฅ แแˆฐแ‰ถแ‰ฝ แ‰ แˆ›แˆณแ‹จแ‰ต แ‹จแˆตแˆญแ‹“แ‰ฑแŠ• แ‰แŒฅแˆญ แ‹ซแˆ‹แ‰ธแ‹แŠ• แ‹ฐแˆจแŒƒแ‹Žแ‰ฝ แˆ›แ‹จแ‰ต แ‹ญแ‰ฝแˆ‹แˆ‰. แŠฅแŠ•แŠจแ‹แแˆ‹แ‰ธแ‹แก-

  1. แŠ แˆณแˆน แŠจแŠ แŒˆแˆแŒ‹แ‹ฉ แ‹แ‹ญแˆ แ‹ญแŒ แ‹ญแ‰ƒแˆ index.html (แ‹ญแˆ…แˆ แ‰ แ‰ฐแˆซแ‹ แ‹จReact แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แŒฅแ‰…แˆแŠ• แ‹ญแŒญแŠ“แˆ)แข
  2. แ‰ฐแŒ แ‰ƒแˆšแ‹ แŠจแˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแ‹ แŒ‹แˆญ แ‹ญแŒˆแŠ“แŠ›แˆแฃ แ‹ญแˆ… แ‰ แ€แ‹ฐแ‹ญ แ‹ˆแ‰…แ‰ต แˆ‹แ‹ญ แ‹จแ‰ฐแˆ˜แˆฐแˆจแ‰ฐ แ‹จแ‹ตแˆญ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แŒฅแˆช แ‹ซแ‹ฐแˆญแŒ‹แˆแข
  3. แ‹จแ‹ตแˆจ-แŒˆแŒฝ แŠ แ•แˆŠแŠฌแˆฝแŠ‘ แŒฝแˆ‘แ‰แŠ• แ‹ˆแ‹ฐ Python แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แˆˆแˆ˜แ‰ฐแŠ•แ‰ฐแŠ• แŒฅแ‹ซแ‰„แ‹แŠ• แ‹ซแˆตแ‰ฐแˆ‹แˆแ‹แˆแข
  4. แ‹จแ“แ‹ญแ‹˜แŠ• แŠ แ•แˆŠแŠฌแˆฝแŠ‘ แ‹จแŒฝแˆ‘แ‰แŠ• แˆตแˆœแ‰ต แ‰ฐแŠ•แ‰ตแŠ– แ‹แŒคแ‰ฑแŠ• แˆˆแŒฅแ‹ซแ‰„แ‹ แˆแˆ‹แˆฝ แ‹ญแˆ˜แˆแˆณแˆแข
  5. แ‹จแˆตแ•แˆชแŠ•แŒ แŠ แ•แˆŠแŠฌแˆฝแŠ‘ แˆแˆ‹แˆฝ แˆˆแˆšแˆฐแŒ แ‹ แˆแˆ‹แˆฝ แ‹ญแˆแŠซแˆ (แ‹ญแˆ…แˆ แ‰ แ‰ฐแˆซแ‹ แ‹จแ‰ฐแ‰ฐแАแ‰ฐแАแ‹แŠ• แŒฝแˆ‘แ แ‹แŒคแ‰ต แˆˆแ‰ฐแŒ แ‰ƒแˆšแ‹ แ‹ซแˆณแ‹ซแˆ)แข

แ‹จแŠฅแАแ‹šแˆ… แˆแˆ‰ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแ‹Žแ‰ฝ แŠฎแ‹ต แˆŠแŒˆแŠ แ‹ญแ‰ฝแˆ‹แˆ แŠฅแ‹šแˆ…. แŠจแŠแ‰ณแ‰ฝแŠ• แ‰ฅแ‹™ แŠ แˆตแ‹ฐแˆณแ‰ฝ แˆ™แŠจแˆซแ‹Žแ‰ฝ แˆตแˆ‹แˆ‰ แ‹ญแˆ…แŠ• แˆ›แŠจแˆ›แ‰ป แŠ แˆแŠ• แ‹ˆแ‹ฐ แˆซแˆตแˆ… แŠฅแŠ•แ‹ตแ‰ตแŒˆแˆˆแ‰ฅแŒฅ แŠฅแˆ˜แŠญแˆซแˆˆแˆแข

แ‰ แŠ แŠจแ‰ฃแ‰ข แˆ›แˆฝแŠ• แˆ‹แ‹ญ แ‰ แˆ›แ‹ญแŠญแˆฎ แˆฐแˆญแ‰ชแˆต แˆ‹แ‹ญ แ‹จแ‰ฐแˆ˜แˆฐแˆจแ‰ฐ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแŠ• แ‰ แˆ›แˆ„แ‹ต แˆ‹แ‹ญ

แŠ แ•แˆŠแŠฌแˆฝแŠ‘ แŠฅแŠ•แ‹ฒแˆฐแˆซ แˆถแˆตแ‰ฑแŠ•แˆ แˆ›แ‹ญแŠญแˆฎ แˆฐแˆญแ‰ชแˆต แˆ˜แŒ€แˆ˜แˆญ แŠ แˆˆแ‰ฅแŠ•แข แŠจแŠฅแАแˆฑ แ‰ แŒฃแˆ แ‰†แŠ•แŒ† แŠฅแŠ•แŒ€แˆแˆญ - แ‹จแŠแ‰ต-แˆ˜แŒจแˆจแˆป แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแข

โ–แˆˆแŠ แŠซแ‰ฃแ‰ข แˆแˆ›แ‰ต 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 แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แŒˆแŒนแŠ• แ‹ซแ‹ซแˆ‰แข

แ‹จแŠฉแ‰ แˆญแŠ”แ‰ตแˆต แˆ›แŒ แŠ“แŠจแˆชแ‹ซ แ‰ตแˆแˆ…แˆญแ‰ต แŠญแแˆ 1แก แŠ แ•แˆŠแŠฌแˆฝแŠ–แ‰ฝแฃ แˆ›แ‹ญแŠญแˆฎ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝ แŠฅแŠ“ แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ
แ‰ 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 แŒฅแ‹ซแ‰„ แ‹จแ‰€แˆจแ‰ แ‰ แ‰ต URLแข แ‹ญแˆ… แŠ แ‹ตแˆซแˆป แŠฅแŠ•แ‹ฐแ‹šแˆ… แŠ แ‹ญแАแ‰ต แŒฅแ‹ซแ‰„แ‹Žแ‰ฝแŠ• แ‹จแˆšแŒ แ‰ฅแ‰… แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แАแ‹ แ‰ฐแ‰ฅแˆŽ แ‹ญแ‰ณแˆฐแ‰ฃแˆแข

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แ‰ แˆตแ•แˆชแŠ•แŒ แˆ‹แ‹ญ แ‹จแ‰ฐแˆ˜แˆ แˆจแ‰ฐ แ‹จแ‹ตแˆญ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแŠ• แˆ›แˆ„แ‹ต แŠ แˆˆแ‰ฅแŠ•แข

แ‹จแŠฉแ‰ แˆญแŠ”แ‰ตแˆต แˆ›แŒ แŠ“แŠจแˆชแ‹ซ แ‰ตแˆแˆ…แˆญแ‰ต แŠญแแˆ 1แก แŠ แ•แˆŠแŠฌแˆฝแŠ–แ‰ฝแฃ แˆ›แ‹ญแŠญแˆฎ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝ แŠฅแŠ“ แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ
แ‹จPOST แŒฅแ‹ซแ‰„แŠ• แˆ˜แ‰€แ‰ แˆ แ‹จแˆšแ‰ฝแˆ แ‹จแˆตแ•แˆชแŠ•แŒ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แŠฅแŠ•แˆแˆแŒ‹แˆˆแŠ•

โ–แ‰ แ€แ‹ฐแ‹ญ แ‹ˆแ‰…แ‰ต แˆ‹แ‹ญ แ‰ แˆ˜แˆ˜แˆตแˆจแ‰ต แ‹จแ‹ตแˆญ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแŠ• แˆ›แ‰‹แ‰‹แˆ

แ‹จแˆตแ•แˆชแŠ•แŒ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแŠ• แˆˆแˆ›แˆฐแˆ›แˆซแ‰ต JDK8 แŠฅแŠ“ Maven แŠฅแŠ“ แ‰ แ‰ตแŠญแŠญแˆ แ‹จแ‰ฐแ‹‹แ‰€แˆฉ แ‹จแŠ แŠซแ‰ฃแ‰ข แ‰ฐแˆˆแ‹‹แ‹‹แŒฎแ‰ฝ แ‹ซแˆตแˆแˆแŒแ‹Žแ‰ณแˆแข แ‹ญแˆ…แŠ•แŠ• แˆแˆ‰ แŠจแŒซแŠ‘ แ‰ แŠ‹แˆ‹ แ‰ แ•แˆฎแŒ€แŠญแ‰ณแ‰ฝแŠ• แˆ‹แ‹ญ แˆ˜แˆตแˆซแ‰ฑแŠ• แˆ˜แ‰€แŒ แˆ แ‹ญแ‰ฝแˆ‹แˆ‰.

โ–แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแ‹แŠ• แ‹ˆแ‹ฐ แŒƒแˆญ แ‹แ‹ญแˆ แ‰ แˆ›แˆธแŒ แˆ‹แ‹ญ

แ‰ฐแˆญแˆšแŠ“แˆแŠ• แ‰ แˆ˜แŒ แ‰€แˆ แ‹ˆแ‹ฐ แŠ แ‰ƒแŠแ‹ แ‹ซแˆตแˆฑ sa-webapp แŠฅแŠ“ แ‹จแˆšแŠจแ‰ฐแˆˆแ‹แŠ• แ‰ตแ‹•แ‹›แ‹ แŠ แˆตแŒˆแ‰ฃ:

mvn install

แ‹ญแˆ…แŠ•แŠ• แ‰ตแ‹•แ‹›แ‹ แ‰ แŠ แ‰ƒแŠแ‹ แ‹แˆตแŒฅ แŠจแˆแŒธแˆ™ แ‰ แŠ‹แˆ‹ sa-webapp แˆ›แ‹แŒซ แ‹ญแˆแŒ แˆซแˆแข target. แ‹จแŒƒแ‰ซ แŠ แ•แˆŠแŠฌแˆฝแŠ‘ แ‹จแˆšแŒˆแŠแ‰ แ‰ต แ‰ฆแ‰ณ แАแ‹แฃ โ€‹โ€‹แ‰ แŒƒแˆญ แ‹แ‹ญแˆ แ‹แˆตแŒฅ แ‹จแ‰ณแˆธแŒˆแฃ แ‰ แ‹แ‹ญแˆ‰ แ‹ญแ‹ˆแŠจแˆ‹แˆ sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

โ–แ‹จแŒƒแ‰ซ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแŠ• แˆ›แˆตแŒ€แˆ˜แˆญ

แ‹ˆแ‹ฐ แŠ แ‰ƒแŠ แ‹ญแˆ‚แ‹ฑ target แŠฅแŠ“ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแ‹แŠ• แ‰ แˆšแŠจแ‰ฐแˆˆแ‹ แ‰ตแ‹•แ‹›แ‹ แ‹ซแˆ‚แ‹ฑ:

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

แ‹ญแˆ…แŠ• แ‰ตแ‹•แ‹›แ‹ แ‰ แˆ›แˆตแˆแŒธแˆ แˆ‹แ‹ญ แˆตแˆ…แ‰ฐแ‰ต แ‹ญแŠจแˆฐแ‰ณแˆแข แŠฅแˆฑแŠ• แˆ˜แŒ แŒˆแŠ• แˆˆแˆ˜แŒ€แˆ˜แˆญแฃ แˆแ‹ฉ แ‹จแˆ†แŠ‘แ‰ตแŠ• แ‹แˆญแ‹แˆฎแ‰ฝ แ‰ แ‰ฐแŠจแˆ˜แˆจ แ‹จแŠญแ‰ตแ‰ตแˆ แ‹แˆ‚แ‰ฅ แ‹แˆตแŒฅ แˆ˜แ‰ฐแŠ•แ‰ฐแŠ• แŠฅแŠ•แ‰ฝแˆ‹แˆˆแŠ•แก-

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

แˆˆแŠฅแŠ›, แŠฅแ‹šแˆ… แ‰ แŒฃแˆ แŠ แˆตแˆแˆ‹แŒŠแ‹ แАแŒˆแˆญ แ‰ตแˆญแŒ‰แˆ™แŠ• แŒแˆแŒฝ แˆˆแˆ›แ‹ตแˆจแŒ แ‹จแˆ›แ‹ญแ‰ปแˆ แˆ˜แˆ†แŠ‘แŠ• แˆ˜แŒฅแ‰€แˆต แАแ‹ sa.logic.api.url. แˆตแˆ…แ‰ฐแ‰ฑ แ‹จแˆšแŠจแˆฐแ‰ตแ‰ แ‰ตแŠ• แŠฎแ‹ต แŠฅแŠ•แˆ˜แˆญแˆแˆญ.

โ–แ‹จแŒƒแ‰ซ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แŠฎแ‹ต แ‰ตแŠ•แ‰ฐแŠ“

แˆตแˆ…แ‰ฐแ‰ฑ แ‹จแˆšแŠจแˆฐแ‰ตแ‰ แ‰ต แŠฎแ‹ต แ‰…แŠ•แŒญแ‰ฅ แŠฅแ‹šแˆ… แŠ แˆˆแข

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

  1. แ‰ แŠคแˆตentimentController แˆ˜แˆตแŠญ แŠ แˆˆแข saLogicApiUrl. แ‹‹แŒ‹แ‹ แ‰ แŠ•แ‰ฅแˆจแ‰ฑ แ‰ฐแ‹˜แŒ‹แŒ…แ‰ทแˆ sa.logic.api.url.
  2. แˆ˜แˆตแˆ˜แˆญ saLogicApiUrl แŠจแ‹‹แŒ‹ แŒ‹แˆญ แ‹ญแŒˆแŠ“แŠ›แˆ /analyse/sentiment. แŠ แŠ•แ‹ต แˆ‹แ‹ญ แˆ†แАแ‹ แ‹จแŒฝแˆ‘แ แ‰ตแŠ•แ‰ณแŠ”แŠ• แ‹ˆแ‹ฐแˆšแ‹ซแŠจแŠ“แ‹แŠ• แˆ›แ‹ญแŠญแˆฎ แŠ แŒˆแˆแŒแˆŽแ‰ต แŒฅแˆช แˆˆแˆ›แ‹ตแˆจแŒ แŠ แ‹ตแˆซแˆป แ‹ญแˆ˜แˆฐแˆญแ‰ณแˆ‰แข

โ– แ‹จแŠ•แ‰ฅแˆจแ‰ต แ‹‹แŒ‹ แˆ›แ‰€แŠ“แ‰ แˆญ

แ‰ แ€แ‹ฐแ‹ญ แ‹ˆแ‰…แ‰ต, แ‹จแŠ•แ‰ฅแˆจแ‰ต แ‹‹แŒ‹แ‹Žแ‰ฝ แАแ‰ฃแˆช แˆแŠ•แŒญ แ‹แ‹ญแˆ แАแ‹ application.properties, แ‰  แˆ‹แ‹ญ แˆŠแŒˆแŠ แ‹ญแ‰ฝแˆ‹แˆ sa-webapp/src/main/resources. แАแŒˆแˆญ แŒแŠ• แ‹จแŠ•แ‰ฅแˆจแ‰ต แ‹‹แŒ‹แ‹Žแ‰ฝแŠ• แˆˆแˆ›แ‹˜แŒ‹แŒ€แ‰ต แ‰ฅแ‰ธแŠ›แ‹ แˆ˜แŠ•แŒˆแ‹ต แŠฅแˆฑแŠ• แˆ˜แŒ แ‰€แˆ แ‰ฅแ‰ป แŠ แ‹ญแ‹ฐแˆˆแˆ. แ‹ญแˆ…แŠ•แŠ• แ‰ แˆšแŠจแ‰ฐแˆˆแ‹ แ‰ตแŠฅแ‹›แ‹ แŠฅแŠ•แ‹ฒแˆ แˆ›แ‹ตแˆจแŒ แ‹ญแ‰ฝแˆ‹แˆ‰-

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

แ‹จแ‹šแˆ… แŠ•แ‰ฅแˆจแ‰ต แ‹‹แŒ‹ แ‹ˆแ‹ฐ Python แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแ‰ฝแŠ• แŠ แ‹ตแˆซแˆป แˆ˜แŒ แ‰†แˆ แŠ แˆˆแ‰ แ‰ตแข

แŠฅแˆฑแŠ• แ‰ แˆ›แ‹‹แ‰€แˆญ แˆˆSแ•แˆชแŠ•แŒ แ‹ตแˆญ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แ‹จแŒฝแˆแ แˆ˜แ‰ฐแŠ•แ‰ฐแŠ• แŒฅแ‹ซแ‰„แ‹Žแ‰ฝแŠ• แ‹จแ‰ต แˆ˜แˆ„แ‹ต แŠฅแŠ•แ‹ณแˆˆแ‰ แ‰ต แŠฅแŠ•แАแŒแˆจแ‹‹แˆˆแŠ•แข

แˆ…แ‹ญแ‹ˆแ‰ณแ‰ฝแŠ•แŠ• แŠฅแŠ•แ‹ณแŠ“แ‹ˆแˆณแˆตแ‰ฅแฃ แ‹จ Python แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แ‰  แˆ‹แ‹ญ แŠฅแŠ•แ‹ฐแˆšแŒˆแŠ แŠฅแŠ•แ‹ˆแˆตแŠ“แˆˆแŠ•แข localhost:5000 แŠฅแŠ“ แˆตแˆˆแŠฅแˆฑ แˆ‹แˆˆแˆ˜แˆญแˆณแ‰ต แ‹ญแˆžแŠญแˆฉ. แ‰ แ‹šแˆ… แˆแŠญแŠ•แ‹ซแ‰ต แ‹จแ€แ‹ฐแ‹ญ แŠ แ•แˆŠแŠฌแˆฝแŠ‘แŠ• แˆˆแˆ˜แŒ€แˆ˜แˆญ แ‰ตแŠฅแ‹›แ‹ แ‹ญแˆ…แŠ•แŠ• แ‹ญแˆ˜แˆตแˆ‹แˆแข

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

แ‹จแŠฉแ‰ แˆญแŠ”แ‰ตแˆต แˆ›แŒ แŠ“แŠจแˆชแ‹ซ แ‰ตแˆแˆ…แˆญแ‰ต แŠญแแˆ 1แก แŠ แ•แˆŠแŠฌแˆฝแŠ–แ‰ฝแฃ แˆ›แ‹ญแŠญแˆฎ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝ แŠฅแŠ“ แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ
แˆตแˆญแ‹“แ‰ณแ‰ฝแŠ• แ‹จแ“แ‹ญแ‹˜แŠ• แŠ แ•แˆŠแŠฌแˆฝแŠ• แ‹ญแŒŽแ‹ตแˆ‹แˆ

แŠ แˆแŠ• แ‹จ 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. แ‹จแแˆ‹แˆตแŠญ แŠ แ•แˆŠแŠฌแˆฝแŠ‘แŠ• แ‰ แˆ›แˆตแŒ€แˆ˜แˆญ แˆ‹แ‹ญแฃ แ‹ญแˆ…แˆ แ‰  แˆ‹แ‹ญ แ‹ญแŒˆแŠ›แˆแข 0.0.0.0:5000 (แŠฅแŠ•แ‹ฒแˆแˆ แ‹จแ‰…แŒนแŠ• แŒแŠ•แ‰ฃแ‰ณ แ‰ แˆ˜แŒ แ‰€แˆ แˆŠแ‹ฐแˆญแˆฑแ‰ แ‰ต แ‹ญแ‰ฝแˆ‹แˆ‰ localhost:5000).

แŠ แˆแŠ• แŠ แ•แˆŠแŠฌแˆฝแŠ‘แŠ• แ‹ซแŠซแ‰ฐแ‰ฑ แˆ›แ‹ญแŠญแˆฎ แˆฐแˆญแ‰ชแˆต แŠฅแ‹จแˆฐแˆฉ แАแ‹แข แŠฅแˆญแˆต แ‰ แˆญแˆต แŠฅแŠ•แ‹ฒแŒˆแŠ“แŠ™ แ‰ฐแ‹˜แŒ‹แŒ…แ‰ฐแ‹‹แˆ. แ‰ แ‹šแˆ… แ‹จแˆฅแˆซ แ‹ฐแˆจแŒƒ แˆ‹แ‹ญ แ‹จแˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแ‹ แŠ•แ‹ตแ แˆแŠ• แŠฅแŠ•แ‹ฐแˆšแˆ˜แˆตแˆ แŠฅแАแˆ†.

แ‹จแŠฉแ‰ แˆญแŠ”แ‰ตแˆต แˆ›แŒ แŠ“แŠจแˆชแ‹ซ แ‰ตแˆแˆ…แˆญแ‰ต แŠญแแˆ 1แก แŠ แ•แˆŠแŠฌแˆฝแŠ–แ‰ฝแฃ แˆ›แ‹ญแŠญแˆฎ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝ แŠฅแŠ“ แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ
แŠ แ•แˆŠแŠฌแˆฝแŠ‘แŠ• แ‹ซแŠซแ‰ฐแ‰ฑ แˆแˆ‰แˆ แˆ›แ‹ญแŠญแˆฎ แŠ แŒˆแˆแŒˆแˆŽแ‰ถแ‰ฝ แ‹ˆแ‹ฐ แŒคแŠ“แˆ› แˆแŠ”แ‰ณ แ‹ซแˆ˜แŒฃแˆ‰

แŠ แˆแŠ•แฃ แŠจแˆ˜แ‰€แŒ แˆ‹แ‰ฝแŠ• แ‰ แŠแ‰ตแฃ React แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแŠ• แ‰ แŠ แˆณแˆฝ แ‹แˆตแŒฅ แ‹ญแŠญแˆแ‰ฑ แŠฅแŠ“ แ‹จแ‰ฐแ‹ˆแˆฐแА แŠ แˆจแแ‰ฐ แАแŒˆแˆญแŠ• แ‰ แŠฅแˆฑ แˆ‹แ‹ญ แˆˆแˆ˜แ‰ฐแŠ•แ‰ฐแŠ• แ‹ญแˆžแŠญแˆฉแข แˆแˆ‰แˆ แАแŒˆแˆญ แ‰ แ‰ตแŠญแŠญแˆ แŠจแ‰ฐแˆฐแˆซ - แŠ แ‹แˆซแˆฉแŠ• แŠจแ‰ฐแŒซแŠ‘ แ‰ แŠ‹แˆ‹ Send แ‹จแ‰ตแŠ•แ‰ณแŠ” แ‹แŒคแ‰ฑแŠ• แŠจแŒฝแˆ‘แ แˆณแŒฅแŠ‘ แ‰ แ‰ณแ‰ฝ แ‹ซแ‹ซแˆ‰แข

แ‰ แˆšแ‰€แŒฅแˆˆแ‹ แŠญแแˆ แˆ›แ‹ญแŠญแˆฎ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ปแ‰ฝแŠ•แŠ• แ‰  Docker แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ แ‹แˆตแŒฅ แŠฅแŠ•แ‹ดแ‰ต แŠฅแŠ•แ‹ฐแˆšแˆฐแˆซ แŠฅแŠ•แАแŒ‹แŒˆแˆซแˆˆแŠ• แข แ‰  Kubernetes แŠญแˆ‹แˆตแ‰ฐแˆญ แ‹แˆตแŒฅ แˆˆแˆ›แˆ„แ‹ต แˆ›แˆ˜แˆแŠจแ‰ปแ‹แŠ• แˆˆแˆ›แ‹˜แŒ‹แŒ€แ‰ต แ‹ญแˆ… แŠ แˆตแˆแˆ‹แŒŠ แАแ‹.

แ‹จแ‹ถแŠจแˆญ แˆ˜แ‹ซแ‹ฃแ‹Žแ‰ฝ

แŠฉแ‰ฃแŠ•แ‹ซแ‰ถแ‰ฝ แ‰ แŠฎแŠ•แ‰ดแ‹ญแАแˆญ แ‹จแ‰ฐแ‹ซแ‹™ แŠ แ•แˆŠแŠฌแˆฝแŠ–แ‰ฝแŠ• แ‹จแˆ›แˆฐแˆ›แˆซแ‰ตแฃ แ‹จแˆ˜แŒ แŠ• แŠฅแŠ“ แ‹จแˆ›แˆตแ‰ฐแ‹ณแ‹ฐแˆญ แˆตแˆญแ‹“แ‰ต แАแ‹แข แŠฅแˆฑแˆ "แ‹จแŠฎแŠ•แ‰ดแ‹ญแАแˆญ แŠฆแˆญแŠฌแˆตแ‰ตแˆซ" แ‰ฐแ‰ฅแˆŽแˆ แ‹ญแŒ แˆซแˆ. Kubernetes แŠจแˆ˜แ‹ซแ‹ฃแ‹Žแ‰ฝ แŒ‹แˆญ แ‹จแˆšแˆ แˆซ แŠจแˆ†แА, แ‹ญแˆ…แŠ• แˆตแˆญแ‹“แ‰ต แŠจแˆ˜แŒ แ‰€แˆแ‹Ž แ‰ แŠแ‰ต แ‰ แˆ˜แŒ€แˆ˜แˆชแ‹ซ แŠฅแАแ‹šแˆ…แŠ• แˆ˜แ‹ซแ‹ฃแ‹Žแ‰ฝ แˆ›แŒแŠ˜แ‰ต แŠ แˆˆแ‰ฅแŠ•. แŒแŠ• แ‰ แˆ˜แŒ€แˆ˜แˆชแ‹ซ แˆตแˆˆ แˆ˜แ‹ซแ‹ฃแ‹Žแ‰ฝ แˆแŠ• แŠฅแŠ•แ‹ฐแˆ†แŠ‘ แŠฅแŠ•แАแŒ‹แŒˆแˆญ แข แˆแŠ• แŠฅแŠ•แ‹ฐแˆ†แА แˆˆแˆšแˆˆแ‹ แŒฅแ‹ซแ‰„ แ‰ แŒฃแˆ แŒฅแˆฉแ‹ แˆ˜แˆแˆต แˆŠแŒˆแŠ แ‹ญแ‰ฝแˆ‹แˆ แˆฐแАแ‹ต แ‹ˆแ‹ฐ แ‹ถแŠจแˆญแก

แ‹จแŠฎแŠ•แ‰ดแ‹ญแАแˆญ แˆแˆตแˆ แ‰€แˆ‹แˆ แŠญแ‰ฅแ‹ฐแ‰ต แ‹ซแˆˆแ‹แฃ แˆซแˆฑแŠ• แ‹จแ‰ปแˆˆแฃ แ‰ฐแŒแ‰ฃแˆซแ‹Š แ‹จแˆ†แА แ“แŠฌแŒ… แˆฒแˆ†แŠ• แŠ แ•แˆŠแŠฌแˆฝแŠ‘แŠ• แˆˆแˆ›แˆตแŠฌแ‹ต แ‹จแˆšแ‹ซแˆตแˆแˆแŒ‰แ‰ตแŠ• แАแŒˆแˆฎแ‰ฝ แˆแˆ‰ แ‹ซแŠซแ‰ตแ‰ณแˆแค แŠฅแАแˆฑแˆ แ‹จแˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แŠฎแ‹ตแฃ แ‹จแˆฉแŒซ แŒŠแ‹œ แŠ แŠซแ‰ฃแ‰ขแฃ แ‹จแˆตแˆญแ‹“แ‰ต แˆ˜แˆณแˆชแ‹ซแ‹Žแ‰ฝ แŠฅแŠ“ แ‰คแ‰ฐ-แˆ˜แŒปแˆ•แแ‰ต แŠฅแŠ“ แ‰…แŠ•แ‰ฅแˆฎแ‰ฝ แŠ“แ‰ธแ‹แข แŠฎแŠ•แ‰ดแ‹ญแАแˆญ แ‹จแ‰ฐแ‹ฐแˆจแŒ‰ แ•แˆฎแŒแˆซแˆžแ‰ฝ แ‰ แŠ แŠซแ‰ฃแ‰ขแ‹Žแ‰ฝ แ‹แˆตแŒฅ แŒฅแ‰…แˆ แˆ‹แ‹ญ แˆŠแ‹แˆ‰ แ‹ญแ‰ฝแˆ‹แˆ‰แข Linux ะธ WindowsแŠฅแŠ“ แˆ˜แˆ แˆจแ‰ฐ แˆแˆ›แ‰ฑ แˆแŠ•แˆ แ‹ญแˆแŠ• แˆแŠ• แˆแˆแŒŠแ‹œแˆ แ‰ แ‰ฐแˆ˜แˆณแˆณแ‹ญ แˆ˜แŠ•แŒˆแ‹ต แ‹ญแˆฐแˆซแˆ‰แข

แ‹ญแˆ… แˆ›แˆˆแ‰ต แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ แ‹จแˆ›แˆแˆจแ‰ป แŠ แŒˆแˆแŒ‹แ‹ฎแ‰ฝแŠ• แŒจแˆแˆฎ แ‰ แˆ›แŠ•แŠ›แ‹แˆ แŠฎแˆแ’แ‹ฉแ‰ฐแˆญ แˆ‹แ‹ญ แˆŠแˆฐแˆฉ แ‹ญแ‰ฝแˆ‹แˆ‰, แŠฅแŠ“ แ‰ แˆ›แŠ•แŠ›แ‹แˆ แŠ แŠซแ‰ฃแ‰ข, แ‰ แ‹แˆตแŒฃแ‰ธแ‹ แ‹จแ‰ฐแŠซแ‰ฐแ‰ฑแ‰ต แŠ แ•แˆŠแŠฌแˆฝแŠ–แ‰ฝ แ‰ แ‰ฐแˆ˜แˆณแˆณแ‹ญ แˆ˜แŠ•แŒˆแ‹ต แ‹ญแˆฐแˆซแˆ‰.

แ‹จแˆ˜แ‹ซแ‹ฃแ‹Žแ‰ฝแŠ• แŒˆแ…แ‰ณแ‹Žแ‰ฝ แˆˆแˆ˜แ‹ณแˆฐแˆต แŠฅแŠ“ แŠ แ•แˆŠแŠฌแˆฝแŠ–แ‰ฝแŠ• แˆˆแˆ›แˆตแŠฌแ‹ต แŠจแˆŒแˆŽแ‰ฝ แˆ˜แŠ•แŒˆแ‹ถแ‰ฝ แŒ‹แˆญ แˆˆแˆ›แАแƒแ€แˆญแฃ แ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ• แŠฅแŠ“ แŠฎแŠ•แ‰ดแАแˆญ แ‰ แˆ˜แŒ แ‰€แˆ แ‹จแˆฌแŠญแ‰ต แŠ แ•แˆŠแŠฌแˆฝแŠ• แ‹จแˆ›แŒˆแˆแŒˆแˆแŠ• แˆแˆณแˆŒ แŠฅแŠ•แˆ˜แˆแŠจแ‰ตแข

โ–แ‰จแˆญแ‰ฝแ‹‹แˆ แˆ›แˆฝแŠ•แŠ• แ‰ แˆ˜แŒ แ‰€แˆ แ‹จReact แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แ‹จแˆ›แ‹ญแŠ•แ‰€แˆณแ‰€แˆฑ แ‹แ‹ญแˆŽแ‰ฝแŠ• แˆ›แŒˆแˆแŒˆแˆ

แˆแŠ“แ‰ฃแ‹Š แˆ›แˆฝแŠ–แ‰ฝแŠ• แ‰ แˆ˜แŒ แ‰€แˆ แ‹จแˆ›แ‹ญแŠ•แ‰€แˆณแ‰€แˆฑ แ‹แ‹ญแˆŽแ‰ฝแŠ• แŒฅแŒˆแŠ“ แˆˆแˆ›แ‹ฐแˆซแŒ€แ‰ต แ‰ แˆ˜แˆžแŠจแˆญ แ‹จแˆšแŠจแ‰ฐแˆ‰แ‰ตแŠ• แŒ‰แ‹ณแ‰ถแ‰ฝ แ‹ซแŒ‹แŒฅแˆ™แŠ“แˆ แข

  1. แŠฅแ‹ซแŠ•แ‹ณแŠ•แ‹ฑ แ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ• แ‹จแ‰ฐแˆŸแˆ‹ แŠฆแ•แˆฌแ‰ฒแŠ•แŒ แˆฒแˆตแ‰ฐแˆ แˆตแˆˆแˆ†แА แ‹แŒคแ‰ณแˆ› แ‹ซแˆแˆ†แА แ‹จแˆƒแ‰ฅแ‰ต แŠ แŒ แ‰ƒแ‰€แˆแข
  2. แ‹จแˆ˜แ‹ตแˆจแŠญ แŒฅแŒˆแŠแАแ‰ตแข แ‰ แŠ แŠ•แ‹ณแŠ•แ‹ต แ‹จแˆ€แŒˆแˆญ แ‹แˆตแŒฅ แŠฎแˆแ’แ‹ฉแ‰ฐแˆฎแ‰ฝ แˆ‹แ‹ญ แ‹จแˆšแˆฐแˆซแ‹ แ‰ แˆแˆญแ‰ต แŠ แŒˆแˆแŒ‹แ‹ญ แˆ‹แ‹ญ แˆ‹แ‹ญแˆฐแˆซ แ‹ญแ‰ฝแˆ‹แˆแข
  3. แ‹จแ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ• แˆ˜แแ‰ตแˆ„ แ‰€แˆญแ‹แ‹ แŠฅแŠ“ แŒแ‰ฅแŠ แ‰ถแ‰ฝ แ‹จแ‰ฐแŒ แŠ“แŠจแˆจ แˆแŠฌแ‰ตแข

แ‹จแŠฉแ‰ แˆญแŠ”แ‰ตแˆต แˆ›แŒ แŠ“แŠจแˆชแ‹ซ แ‰ตแˆแˆ…แˆญแ‰ต แŠญแแˆ 1แก แŠ แ•แˆŠแŠฌแˆฝแŠ–แ‰ฝแฃ แˆ›แ‹ญแŠญแˆฎ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝ แŠฅแŠ“ แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ
แ‰ แˆแŠ“แ‰ฃแ‹Š แˆ›แˆฝแŠ• แ‹แˆตแŒฅ แ‹จแˆšแˆฐแˆฉ แ‹จแˆ›แ‹ญแŠ•แ‰€แˆณแ‰€แˆฑ แ‹แ‹ญแˆŽแ‰ฝแŠ• แ‹จแˆšแ‹ซแŒˆแˆˆแŒแˆ Nginx แ‹ตแˆญ แŠ แŒˆแˆแŒ‹แ‹ญ

แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ แ‰ฐแˆ˜แˆณแˆณแ‹ญ แ‰ฝแŒแˆญ แˆˆแˆ˜แแ‰ณแ‰ต แŒฅแ‰…แˆ แˆ‹แ‹ญ แ‹จแˆšแ‹แˆ‰ แŠจแˆ†แА, แŠจแ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ–แ‰ฝ แŒ‹แˆญ แˆฒแАแŒปแŒธแˆญ, แ‹จแˆšแŠจแ‰ฐแˆ‰แ‰ต แŒฅแŠ•แŠซแˆฌแ‹Žแ‰ฝ แˆŠแ‰ณแ‹ˆแ‰ แ‹ญแ‰ฝแˆ‹แˆ‰.

  1. แ‹จแˆ€แ‰ฅแ‰ต แŠ แŒ แ‰ƒแ‰€แˆแก- แ‹ถแŠจแˆญแŠ• แ‰ แˆ˜แŒ แ‰€แˆ แŠจแˆตแˆญแ‹“แ‰ฐ แŠญแ‹ˆแŠ“แ‹ แŒ‹แˆญ แˆ˜แˆตแˆซแ‰ตแข
  2. แ‹จแˆ˜แ‹ตแˆจแŠญ แАแƒแАแ‰ตแข แŠ แŠ•แ‹ต แŒˆแŠ•แ‰ข แ‰ แˆซแˆฑ แŠฎแˆแ’แ‹ฉแ‰ฐแˆญ แ‹จแˆšแˆฐแˆซแ‰ แ‰ต แŠฎแŠ•แ‰ดแ‹ญแАแˆญ แ‹จแ‰ตแˆ แ‹ญแˆฐแˆซแˆแข
  3. แ‹จแˆแˆตแˆ แŠ•แ‰ฅแˆญแ‰ฅแˆฎแ‰ฝแŠ• แ‰ แˆ˜แŒ แ‰€แˆ แ‰€แˆ‹แˆ แŠญแ‰ฅแ‹ฐแ‰ต แˆ›แˆฐแˆ›แˆซแ‰ตแข

แ‹จแŠฉแ‰ แˆญแŠ”แ‰ตแˆต แˆ›แŒ แŠ“แŠจแˆชแ‹ซ แ‰ตแˆแˆ…แˆญแ‰ต แŠญแแˆ 1แก แŠ แ•แˆŠแŠฌแˆฝแŠ–แ‰ฝแฃ แˆ›แ‹ญแŠญแˆฎ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝ แŠฅแŠ“ แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ
แ‰ แŠฎแŠ•แ‰ดแ‹ญแАแˆญ แ‹แˆตแŒฅ แ‹จแˆšแˆฐแˆฉ แ‹จแˆ›แ‹ญแŠ•แ‰€แˆณแ‰€แˆฑ แ‹แ‹ญแˆŽแ‰ฝแŠ• แ‹จแˆšแ‹ซแŒˆแˆˆแŒแˆ Nginx แ‹ตแˆญ แŠ แŒˆแˆแŒ‹แ‹ญ

แ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ–แ‰ฝแŠ• แŠฅแŠ“ แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝแŠ• แ‰ แŒฅแ‰‚แ‰ต แАแŒฅแ‰ฆแ‰ฝ แˆ‹แ‹ญ แ‰ฅแ‰ป แŠ แАแŒปแŒฝแˆจแŠ“แˆแฃแАแŒˆแˆญ แŒแŠ• แ‹ซ แŠฅแŠ•แŠณแŠ• แˆˆแŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ แŒฅแŠ•แŠซแˆฌ แˆตแˆœแ‰ต แ‰ แ‰‚ แАแ‹แข แ‹ญแˆ… แАแ‹ แˆตแˆˆ แ‹ถแŠจแˆญ แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ แ‹แˆญแ‹แˆฎแ‰ฝแŠ• แˆ›แŒแŠ˜แ‰ต แ‹ญแ‰ฝแˆ‹แˆ‰แข

โ–แˆˆReact แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แ‹จแˆ˜แ‹ซแ‹ฃ แˆแˆตแˆ แ‰ แˆ˜แŒˆแŠ•แ‰ฃแ‰ต แˆ‹แ‹ญ

แ‹จแ‹ถแŠจแˆญ แŠฎแŠ•แ‰ดแ‹ญแАแˆญ แˆ˜แˆฐแˆจแ‰ณแ‹Š แ‹จแŒแŠ•แ‰ฃแ‰ณ แ‰แˆณแ‰แˆต แ‹แ‹ญแˆ‰ แАแ‹ Dockerfile. แ‰ แ‹šแˆ… แ‹แ‹ญแˆ แˆ˜แŒ€แˆ˜แˆชแ‹ซ แˆ‹แ‹ญ แ‹จแˆ˜แ‹ซแ‹ฃแ‹ แˆ˜แˆฐแˆจแ‰ณแ‹Š แˆแˆตแˆ แ‹ญแˆ˜แ‹˜แŒˆแ‰ฃแˆ, แŠจแ‹šแ‹ซแˆ แ‹จแˆ›แˆ˜แˆแŠจแ‰ปแ‹แŠ• แแˆ‹แŒŽแ‰ถแ‰ฝ แ‹จแˆšแ‹ซแˆŸแˆ‹ แˆ˜แ‹ซแ‹ฃ แŠฅแŠ•แ‹ดแ‰ต แŠฅแŠ•แ‹ฐแˆšแˆแŒ แˆญ แ‹จแˆšแŒ แ‰แˆ™ แ‰ฐแŠจแ‰ณแ‰ณแ‹ญ แˆ˜แˆ˜แˆชแ‹ซแ‹Žแ‰ฝ แ‰ฐแŠซแ‰ตแ‰ฐแ‹‹แˆ.

แŠจแ‹แ‹ญแˆ‰ แŒ‹แˆญ แˆ˜แˆตแˆซแ‰ต แŠจแˆ˜แŒ€แˆ˜แˆซแ‰ฝแŠ• แ‰ แŠแ‰ต Dockerfileแ‹ˆแ‹ฐ Nginx แŠ แŒˆแˆแŒ‹แ‹ญ แˆˆแˆ˜แˆตแ‰€แˆ แ‹จReact แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แ‹แ‹ญแˆŽแ‰ฝแŠ• แˆˆแˆ›แ‹˜แŒ‹แŒ€แ‰ต แ‹ซแ‹ฐแˆจแŒแАแ‹แŠ• แ‹ซแˆตแ‰ณแ‹แˆฑแก-

  1. React แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แŒฅแ‰…แˆ แˆ˜แŒˆแŠ•แ‰ฃแ‰ต (npm run build).
  2. แ‹จ Nginx แŠ แŒˆแˆแŒ‹แ‹ญแŠ• แ‰ แˆ˜แŒ€แˆ˜แˆญ แˆ‹แ‹ญแข
  3. แ‹จแˆ›แ‹แŒซแ‹แŠ• แ‹ญแ‹˜แ‰ถแ‰ฝ แˆ˜แ‰…แ‹ณแ‰ต build แŠจแ•แˆฎแŒ€แŠญแ‰ต แŠ แ‰ƒแŠ sa-frontend แ‹ˆแ‹ฐ แ‹จแŠ แŒˆแˆแŒ‹แ‹ญ แŠ แ‰ƒแŠ nginx/html.

แŠจแ‹šแˆ… แ‰ แ‰ณแ‰ฝ แˆ˜แ‹ซแ‹ฃแŠ• แ‰ แˆ˜แแŒ แˆญ แŠฅแŠ“ แ‰ แŠ แŠซแ‰ฃแ‰ขแ‹ซแ‹Š แŠฎแˆแ’แ‹ฉแ‰ฐแˆญ แˆ‹แ‹ญ แ‰ แ‰ฐแŠจแŠ“แ‹ˆแŠ‘แ‰ต แŠจแˆ‹แ‹ญ แ‰ แ‰ฐแŒ แ‰€แˆฑแ‰ต แ‹ฐแˆจแŒƒแ‹Žแ‰ฝ แˆ˜แŠซแŠจแˆ แ‹ซแˆˆแ‹แŠ• แ‰ฐแˆ˜แˆณแˆณแ‹ญแАแ‰ต แˆ›แ‹จแ‰ต แ‹ญแ‰ฝแˆ‹แˆ‰.

โ– แˆˆSA-Frontent แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แ‹จแ‹ถแŠญ แ‹แ‹ญแˆ แ‰ แˆ›แ‹˜แŒ‹แŒ€แ‰ต แˆ‹แ‹ญ

แ‹แˆตแŒฅ แ‹จแˆšแŠซแ‰ฐแ‰ฑ แˆ˜แˆ˜แˆชแ‹ซแ‹Žแ‰ฝ Dockerfile แˆˆแˆ›แˆ˜แˆแŠจแ‰ป SA-Frontend, แˆแˆˆแ‰ต แ‰กแ‹ตแŠ–แ‰ฝแŠ• แ‰ฅแ‰ป แ‹ซแ‰€แˆ แАแ‹. แŠฅแ‹แАแ‰ณแ‹ แŒแŠ• แ‹จ Nginx แˆแˆ›แ‰ต แ‰กแ‹ตแŠ• แˆ˜แˆฐแˆจแ‰ณแ‹Š แŠ แ‹˜แŒ‹แŒ…แ‰ทแˆ แˆแˆตแˆ แˆˆ Nginx, แ‹จแŠฅแŠ›แŠ• แˆแˆตแˆ แˆˆแˆ˜แŒˆแŠ•แ‰ฃแ‰ต แ‹จแˆแŠ•แŒ แ‰€แˆ˜แ‹. แˆˆแˆ˜แŒแˆˆแ… แ‹จแˆšแ‹ซแˆตแˆแˆแŒ‰แŠ• แˆแˆˆแ‰ต แ‹ฐแˆจแŒƒแ‹Žแ‰ฝ แŠฅแАแˆ†แก-

  1. แ‹จแˆแˆตแˆ‰ แˆ˜แˆฐแˆจแ‰ต แ‹จแˆ†แАแ‹แŠ• แ‹จ Nginx แˆแˆตแˆ แˆ›แ‹ตแˆจแŒ แ‹ซแˆตแˆแˆแŒแ‹Žแ‰ณแˆ.
  2. แ‹จแŠ แ‰ƒแŠ แ‹ญแ‹˜แ‰ต sa-frontend/build แ‹ˆแ‹ฐ แ‹จแˆแˆตแˆ แŠ แ‰ƒแŠ แˆ˜แ‰…แ‹ณแ‰ต แ‹ซแˆตแˆแˆแŒ‹แˆ nginx/html.

แŠจแ‹šแˆ… แˆ˜แŒแˆˆแŒซ แ‹ˆแ‹ฐ แ‹แ‹ญแˆ‰ แŠจแˆ„แ‹ตแŠ• Dockerfile, แŠจแ‹šแ‹ซแˆ แ‹ญแˆ…แŠ• แ‹ญแˆ˜แˆตแˆ‹แˆ:

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

แŠฅแŠ•แ‹ฐแˆšแˆ˜แˆˆแŠจแ‰ฑแ‰ต แฃ แŠฅแ‹šแˆ… แˆแˆ‰แˆ แАแŒˆแˆญ แ‰ แŒฃแˆ แ‰€แˆ‹แˆ แАแ‹ แฃ แ‹จแ‹แ‹ญแˆ‰ แ‹ญแ‹˜แ‰ต แŠฅแŠ•แŠณแŠ• แ‰ แŒฃแˆ แˆŠแАแ‰ แ‰ฅ แŠฅแŠ“ แˆŠแˆจแ‹ณ แ‹จแˆšแ‰ฝแˆ แАแ‹แข แ‹ญแˆ… แ‹แ‹ญแˆ แˆตแˆญแ‹“แ‰ฑ แˆแˆตแˆ‰แŠ• แŠฅแŠ•แ‹ฒแ‹ซแАแˆณ แ‹ญแАแŒแˆจแ‹‹แˆ nginx แ‰€แ‹ตแˆžแ‹แŠ‘ แ‰ฃแˆˆแ‹ แАแŒˆแˆญ แˆแˆ‰, แŠฅแŠ“ แ‹จแˆ›แ‹แŒซแ‹แŠ• แ‹ญแ‹˜แ‰ถแ‰ฝ แ‹ญแ‰…แ‹ฑ build แ‹ˆแ‹ฐ แˆ›แ‹แŒซแ‹ nginx/html.

แŠฅแ‹šแˆ… แ‹แ‹ญแˆŽแ‰นแŠ• แŠจแŠ แ‰ƒแŠแ‹ แ‹แˆตแŒฅ แ‰ แ‰ตแŠญแŠญแˆ แ‹จแ‰ต แˆ˜แ‰…แ‹ณแ‰ต แŠฅแŠ•แ‹ณแˆˆแ‰ฅแŠ แŠฅแŠ•แ‹ดแ‰ต แŠฅแŠ•แ‹ฐแˆ›แ‹แ‰… แŒฅแ‹ซแ‰„ แˆŠแŠ–แˆญแ‹Žแ‰ต แ‹ญแ‰ฝแˆ‹แˆแข buildแˆ›แˆˆแ‰ตแˆ แˆ˜แŠ•แŒˆแ‹ฑ แŠจแ‹จแ‰ต แˆ˜แŒฃ /usr/share/nginx/html. แŠฅแŠ•แ‹ฐ แŠฅแ‹แАแ‰ฑ แŠจแˆ†แА, แŠฅแ‹šแˆ…แˆ แˆแŠ•แˆ แ‹จแ‰ฐแ‹ˆแˆณแˆฐแ‰  แАแŒˆแˆญ แ‹จแˆˆแˆ. แŠฅแ‹แАแ‰ณแ‹ แŒแŠ• แŠ แŒแ‰ฃแ‰ฅแАแ‰ต แ‹ซแˆˆแ‹ แˆ˜แˆจแŒƒ แ‰  แ‹แˆตแŒฅ แˆŠแŒˆแŠ แ‹ญแ‰ฝแˆ‹แˆ แˆ˜แŒแˆˆแŒซ แˆแˆตแˆ.

โ–แˆแˆตแˆ‰แŠ• แ‰ แˆ›แˆฐแ‰ฃแˆฐแ‰ฅ แ‹ˆแ‹ฐ แˆ›แŠจแˆ›แ‰ปแ‹ แˆ˜แˆตแ‰€แˆ

แŠจแ‰ฐแŒ แŠ“แ‰€แ‰€ แˆแˆตแˆ แŒ‹แˆญ แŠจแˆ˜แˆตแˆซแ‰ณแ‰ฝแŠ• แ‰ แŠแ‰ต, แ‹ˆแ‹ฐ แ‹จแˆแˆตแˆ แˆ›แŠจแˆ›แ‰ปแ‹ แˆ›แˆตแŒˆแ‰ฃแ‰ต แŠ แˆˆแ‰ฅแŠ•. แ‹ญแˆ…แŠ•แŠ• แˆˆแˆ›แ‹ตแˆจแŒแฃ แАแƒแ‹แŠ• แ‰ แ‹ฐแˆ˜แŠ“ แˆ‹แ‹ญ แ‹จแ‰ฐแˆ˜แˆฐแˆจแ‰ฐ แˆแˆตแˆ แˆ›แˆตแ‰ฐแŠ“แŒˆแŒƒ แˆ˜แ‹ตแˆจแŠญ Docker HubแŠ• แŠฅแŠ•แŒ แ‰€แˆ›แˆˆแŠ•แข แ‰ แ‹šแˆ… แ‹จแˆฅแˆซ แ‹ฐแˆจแŒƒ, แ‹จแˆšแŠจแ‰ฐแˆ‰แ‰ตแŠ• แˆ›แ‹ตแˆจแŒ แŠ แˆˆแ‰ฅแ‹Žแ‰ต:

  1. แ‹ญแŒซแŠ‘ Docker.
  2. แ‰ Docker Hub แŒฃแ‰ขแ‹ซแ‹ แˆ‹แ‹ญ แ‹ญแˆ˜แ‹แŒˆแ‰กแข
  3. แ‰ แ‰ฐแˆญแˆšแŠ“แˆ แ‹แˆตแŒฅ แ‹จแˆšแŠจแ‰ฐแˆˆแ‹แŠ• แ‰ตแ‹•แ‹›แ‹ แ‰ แˆ›แˆ„แ‹ต แ‹ˆแ‹ฐ แˆ˜แˆˆแ‹ซแ‹Ž แ‹ญแŒแ‰กแข
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

แŠ แˆแŠ• แ‹ซแˆตแˆแˆแŒแ‹Žแ‰ณแˆ, แ‰ฐแˆญแˆšแŠ“แˆแŠ• แ‰ แˆ˜แŒ แ‰€แˆ, แ‹ˆแ‹ฐ แˆ›แ‹แŒซแ‹ แ‹ญแˆ‚แ‹ฑ sa-frontend แŠฅแŠ“ แ‹จแˆšแŠจแ‰ฐแˆˆแ‹แŠ• แ‰ตแ‹•แ‹›แ‹ แŠฅแ‹šแ‹ซ แ‹ซแˆ‚แ‹ฑ:

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

แŠฅแ‹šแˆ… แŠฅแŠ“ แŠจแ‰ณแ‰ฝ แ‰ แ‰ฐแˆ˜แˆณแˆณแ‹ญ แ‰ตแ‹•แ‹›แ‹žแ‰ฝ $DOCKER_USER_ID แ‰ Docker Hub แˆ‹แ‹ญ แ‰ฃแˆˆแ‹ แ‹จแ‰ฐแŒ แ‰ƒแˆš แˆตแˆแˆ… แˆ˜แ‰ฐแŠซแ‰ต แŠ แˆˆแ‰ แ‰ตแข แˆˆแˆแˆณแˆŒแฃ แ‹ญแˆ… แ‹จแ‰ตแŠฅแ‹›แ‹™ แŠญแแˆ แ‹ญแˆ…แŠ• แˆŠแˆ˜แˆตแˆ แ‹ญแ‰ฝแˆ‹แˆแก- rinormaloku/sentiment-analysis-frontend.

แ‰ แ‹šแˆ… แŠ แŒ‹แŒฃแˆš แ‹ญแˆ… แ‰ตแŠฅแ‹›แ‹ แŠจแŠฅแˆฑ แ‰ แˆ›แˆตแ‹ˆแŒˆแ‹ต แˆ›แˆณแŒ แˆญ แ‹ญแ‰ปแˆ‹แˆ -f Dockerfile, แ‹ญแˆ…แŠ• แ‰ตแ‹•แ‹›แ‹ แ‹จแˆแŠ•แˆแŒฝแˆแ‰ แ‰ต แŠ แ‰ƒแŠ แŠ แˆตแ‰€แ‹ตแˆž แ‹ญแˆ… แ‹แ‹ญแˆ แˆตแˆ‹แˆˆแ‹.

แ‹จแ‰ฐแŒ แŠ“แ‰€แ‰€แ‹แŠ• แˆแˆตแˆ แ‹ˆแ‹ฐ แˆ›แŠจแˆ›แ‰ปแ‹ แˆˆแˆ˜แˆ‹แŠญ แ‹จแˆšแŠจแ‰ฐแˆˆแ‹แŠ• แ‰ตแ‹•แ‹›แ‹ แŠฅแŠ•แˆแˆแŒ‹แˆˆแŠ•แข

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

แŠจแŒจแˆจแˆฑ แ‰ แŠ‹แˆ‹ แˆแˆตแˆ‰ แ‰ แ‰ฐแˆณแŠซ แˆแŠ”แ‰ณ แ‹ˆแ‹ฐ แ‹จแ‹ฐแˆ˜แŠ“ แˆ›แŠจแˆ›แ‰ป แˆ˜แŒซแŠ‘แŠ• แˆˆแˆ›แ‹จแ‰ต แ‰ Docker Hub แˆ‹แ‹ญ แ‹ซแˆ‰แ‰ตแŠ• แ‹จแˆ˜แˆจแŒƒ แˆ›แŠจแˆ›แ‰ปแ‹Žแ‰ฝ แ‹แˆญแ‹แˆญ แ‹ญแˆ˜แˆแŠจแ‰ฑแข

โ– แ‹•แ‰ƒ แˆ›แˆตแŒ€แˆ˜แˆญ

แŠ แˆแŠ• แˆ›แŠ•แŠ›แ‹แˆ แˆฐแ‹ แ‰ แˆ˜แ‰ฃแˆ แ‹จแˆšแ‰ณแ‹ˆแ‰€แ‹แŠ• แˆแˆตแˆ แˆ›แ‹แˆจแ‹ต แŠฅแŠ“ แˆ›แˆ„แ‹ต แ‹ญแ‰ฝแˆ‹แˆ $DOCKER_USER_ID/sentiment-analysis-frontend. แ‹ญแˆ…แŠ•แŠ• แˆˆแˆ›แ‹ตแˆจแŒ แ‹จแˆšแŠจแ‰ฐแˆ‰แ‰ตแŠ• แ‹จแ‰ตแ‹•แ‹›แ‹ แ‰…แ‹ฐแˆ แ‰ฐแŠจแ‰ฐแˆ แˆ›แˆตแŠฌแ‹ต แ‹ซแˆตแˆแˆแŒแ‹Žแ‰ณแˆ:

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

แŠ แˆแŠ• แˆ˜แ‹ซแ‹ฃแ‹ แŠฅแ‹จแˆฐแˆซ แАแ‹, แŠฅแŠ“ แŠฅแŠ› แ‹จแˆแŠ•แˆแˆแŒ‹แ‰ธแ‹แŠ• แˆŒแˆŽแ‰ฝ แˆแˆตแˆŽแ‰ฝแŠ• แ‰ แˆ˜แแŒ แˆญ แˆ˜แˆตแˆซแ‰ณแ‰ฝแŠ•แŠ• แˆ˜แ‰€แŒ แˆ แŠฅแŠ•แ‰ฝแˆ‹แˆˆแŠ•. แŠจแˆ˜แ‰€แŒ แˆ‹แ‰ฝแŠ• แ‰ แŠแ‰ต แŒแŠ• แŠ•แ‹ตแ‰แŠ• แŠฅแŠ•แˆจแ‹ณ 80:80, แˆแˆตแˆ‰แŠ• แˆˆแˆ›แˆตแŠฌแ‹ต แ‰ แ‰ตแŠฅแ‹›แ‹™ แ‹แˆตแŒฅ แ‹จแˆšแŒˆแŠ แŠฅแŠ“ แŒแˆซ แ‹จแˆšแ‹ซแŒ‹แ‰ฃ แˆŠแˆ˜แˆตแˆ แ‹ญแ‰ฝแˆ‹แˆ.

  • แ‹จแˆ˜แŒ€แˆ˜แˆชแ‹ซ แ‰แŒฅแˆญ 80 แ‹จแŠ แˆตแ‰ฐแŠ“แŒ‹แŒ แ‹จแ‹ˆแ‹ฐแ‰ฅ แ‰แŒฅแˆญ แАแ‹ (แ‹ญแˆ…แˆ แ‹จแŠ แŠซแ‰ฃแ‰ข แŠฎแˆแ’แ‹แ‰ฐแˆญ)แข
  • แˆแˆˆแ‰ฐแŠ› แ‰แŒฅแˆญ 80 แŒฅแ‹ซแ‰„แ‹ แˆ˜แ‹žแˆญ แ‹ซแˆˆแ‰ แ‰ต แ‹จแˆ˜แ‹ซแ‹ฃแ‹ แ‹ˆแ‹ฐแ‰ฅ แАแ‹แข

แ‹จแˆšแŠจแ‰ฐแˆˆแ‹แŠ• แˆแˆณแˆŒ แ‰ฐแˆ˜แˆแŠจแ‰ตแข

แ‹จแŠฉแ‰ แˆญแŠ”แ‰ตแˆต แˆ›แŒ แŠ“แŠจแˆชแ‹ซ แ‰ตแˆแˆ…แˆญแ‰ต แŠญแแˆ 1แก แŠ แ•แˆŠแŠฌแˆฝแŠ–แ‰ฝแฃ แˆ›แ‹ญแŠญแˆฎ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝ แŠฅแŠ“ แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ
แ‹ˆแ‹ฐแ‰ฅ แˆ›แˆตแ‰ฐแˆ‹แˆˆแ

แˆตแˆญแ‹“แ‰ฑ แŠจแ‹ˆแ‹ฐแ‰ก แ‹จแˆšแˆ˜แŒก แŒฅแ‹ซแ‰„แ‹Žแ‰ฝแŠ• แ‹ซแˆตแ‰ฐแˆ‹แˆแ‹แˆ <hostPort> แ‹ˆแ‹ฐ แ‹ˆแ‹ฐแ‰ฅ <containerPort>. แ‹ˆแ‹ฐแ‰ฅ แˆ˜แ‹ตแˆจแˆต แˆ›แˆˆแ‰ต แАแ‹แข 80 แŠฎแˆแ’แ‹ฉแ‰ฐแˆฉ แ‹ˆแ‹ฐ แ‹ˆแ‹ฐแ‰ฅ แ‹ญแ‹›แ‹ˆแˆซแˆแข 80 แˆ˜แ‹ซแ‹ฃ.

แ‹ˆแ‹ฐแ‰ฅ แŒ€แˆแˆฎ 80 แ‰ แŠ แŠซแ‰ฃแ‰ขแ‹ แŠฎแˆแ’แ‹ฉแ‰ฐแˆญ แˆ‹แ‹ญ แ‹จแ‰ฐแŠจแˆแ‰ฐ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแŠ• แŠจแ‹šแˆ… แŠฎแˆแ’แ‹แ‰ฐแˆญ แ‰  แˆ‹แ‹ญ แˆ›แŒแŠ˜แ‰ต แ‹ญแ‰ฝแˆ‹แˆ‰แข localhost:80. แˆตแˆญแ‹“แ‰ตแ‹Ž แ‹ถแŠจแˆญแŠ• แ‹จแˆ›แ‹ญแ‹ฐแŒแ แŠจแˆ†แАแฃ แŠ แ•แˆŠแŠฌแˆฝแŠ‘แŠ• แ‰  Docker แ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ• แˆ‹แ‹ญ แˆ›แˆตแŠฌแ‹ต แ‹ญแ‰ฝแˆ‹แˆ‰แฃ แŠ แ‹ตแˆซแˆปแ‹แˆ แ‹ญแˆ…แŠ• แ‹ญแˆ˜แˆตแˆ‹แˆแข <docker-machine ip>:80. แ‹จแ‹ถแŠจแˆญ แˆแŠ“แ‰ฃแ‹Š แˆ›แˆฝแŠ•แŠ• แ‹จแŠ แ‹ญแ’ แŠ แ‹ตแˆซแˆป แˆˆแˆ›แ‹ˆแ‰… แ‰ตแ‹•แ‹›แ‹™แŠ• แˆ˜แŒ แ‰€แˆ แ‹ญแ‰ฝแˆ‹แˆ‰แข docker-machine ip.

แ‰ แ‹šแˆ… แŒŠแ‹œแฃ แŠ แŠ•แ‹ด แ‹จแŠแ‰ต-แˆ˜แŒจแˆจแˆป แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แˆ˜แ‹ซแ‹ฃ แ‰ แ‰ฐแˆณแŠซ แˆแŠ”แ‰ณ แŠจแ‰ฐแŒ€แˆ˜แˆจแฃ แŒˆแŒนแŠ• แ‰ แŠ แˆณแˆฝ แ‹แˆตแŒฅ แˆ˜แŠญแˆแ‰ต แˆ˜แ‰ปแˆ แŠ แˆˆแ‰ฅแ‹Žแ‰ตแข

โ–.dockerignore แ‹แ‹ญแˆ

แ‹จแˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแ‹แŠ• แˆแˆตแˆ แˆ˜แŒˆแŠ•แ‰ฃแ‰ต SA-Frontend, แ‹ญแˆ… แˆ‚แ‹ฐแ‰ต แŠฅแŒ…แŒ แ‰ แŒฃแˆ แ‰€แˆญแ‹แ‹ แˆ˜แˆ†แŠ‘แŠ• แˆแŠ“แˆตแ‰ฐแ‹แˆ แŠฅแŠ•แ‰ฝแˆ‹แˆˆแŠ•. แ‹ญแˆ… แ‹จแˆ†แАแ‰ แ‰ต แˆแŠญแŠ•แ‹ซแ‰ต แ‹จแˆแˆตแˆ แŒแŠ•แ‰ฃแ‰ณ แŠ แ‹แ‹ต แ‹ˆแ‹ฐ แ‹ถแŠจแˆญ แ‹ดแˆžแŠ• แˆ˜แˆ‹แŠญ แŠ แˆˆแ‰ แ‰ตแข แ‹จแŒแŠ•แ‰ฃแ‰ณ แŠ แ‹แ‹ต แ‹จแˆšแ‹ˆแŠญแˆˆแ‹ แˆ›แ‹แŒซ แˆˆแ‰ตแŠฅแ‹›แ‹™ แ‹จแˆ˜แŒจแˆจแˆป แˆ˜แŠจแˆซแŠจแˆชแ‹ซ แˆ†แŠ– แ‰ฐแˆฐแŒฅแ‰ทแˆแข docker build. แ‰ แŠฅแŠ› แˆแŠ”แ‰ณ, แ‰ แ‹šแˆ… แ‰ตแ‹•แ‹›แ‹ แˆ˜แŒจแˆจแˆป แˆ‹แ‹ญ แŠ แŠ•แ‹ต แАแŒฅแ‰ฅ แŠ แˆˆ. แ‹ญแˆ… แ‹จแˆšแŠจแ‰ฐแˆˆแ‹ แˆ˜แ‹‹แ‰…แˆญ แ‰ แˆตแ‰ฅแˆฐแ‰ฃ แŠ แ‹แ‹ต แ‹แˆตแŒฅ แŠฅแŠ•แ‹ฒแŠซแ‰ฐแ‰ต แ‹ซแ‹ฐแˆญแŒ‹แˆแก-

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

แŒแŠ• แŠฅแ‹šแˆ… แŠจแˆšแŒˆแŠ™แ‰ต แˆแˆ‰แˆ แŠ แ‰ƒแŠแ‹Žแ‰ฝ แ‹แˆตแŒฅ, แŠ แ‰ƒแŠ แ‰ฅแ‰ป แ‹ซแˆตแˆแˆแŒˆแŠ“แˆ build. แˆŒแˆ‹ แˆ›แŠ•แŠ›แ‹แŠ•แˆ แАแŒˆแˆญ แˆ›แ‹แˆจแ‹ต แŒŠแ‹œ แˆ›แ‰ฃแŠจแŠ• แАแ‹แข แ‹จแ‰ตแŠžแ‰นแŠ• แˆ›แ‹แŒซแ‹Žแ‰ฝ แ‰ฝแˆ‹ แŠฅแŠ•แ‹ฐแˆšแˆ‰ แˆˆแ‹ถแŠจแˆญ แ‰ แˆ˜แŠ•แŒˆแˆญ แŒแŠ•แ‰ฃแ‰ณแ‹แŠ• แˆ›แ‹แŒ แŠ• แ‹ญแ‰ฝแˆ‹แˆ‰แข แ‹ญแˆ…แŠ•แŠ• แˆˆแˆ›แ‹ตแˆจแŒ, แ‹แ‹ญแˆ แ‹ซแˆตแˆแˆแŒˆแŠ“แˆ .dockerignore. แŠฅแˆญแˆตแ‹Žแฃ แ‹แ‹ญแˆ‰แŠ• แ‹จแˆแ‰ณแ‹แ‰แ‰ต แŠจแˆ†แА .gitignore, แ‹จแ‹šแˆ… แ‹แ‹ญแˆ แˆ˜แ‹‹แ‰…แˆญ แˆแŠ“แˆแ‰ฃแ‰ต แ‹จแ‰ณแ‹ˆแ‰€ แ‹ญแˆ˜แˆตแˆ‹แˆ. แ‹จแˆแˆตแˆ แŒแŠ•แ‰ฃแ‰ณ แˆตแˆญแ‹“แ‰ฑ แ‰ฝแˆ‹ แˆŠแˆ‹แ‰ธแ‹ แ‹จแˆšแ‰ฝแˆ‰แ‰ตแŠ• แˆ›แ‹แŒซแ‹Žแ‰ฝ แ‹ญแ‹˜แˆจแ‹แˆซแˆแข แ‰ แŠฅแŠ› แˆแŠ”แ‰ณแฃ แ‹จแ‹šแˆ… แ‹แ‹ญแˆ แ‹ญแ‹˜แ‰ต แ‹ญแˆ…แŠ• แ‹ญแˆ˜แˆตแˆ‹แˆแก-

node_modules
src
public

แ‹แ‹ญแˆ .dockerignore แŠจแ‹แ‹ญแˆ‰ แŒ‹แˆญ แ‰ แ‰ฐแˆ˜แˆณแˆณแ‹ญ แŠ แ‰ƒแŠ แ‹แˆตแŒฅ แˆ˜แˆ†แŠ• แŠ แˆˆแ‰ แ‰ต Dockerfile. แŠ แˆแŠ• แ‹จแˆแˆตแˆ‰ แˆตแ‰ฅแˆตแ‰ฅ แŒฅแ‰‚แ‰ต แˆฐแŠจแŠ•แ‹ถแ‰ฝ แ‹ญแ‹ˆแˆตแ‹ณแˆ.

แŠ แˆแŠ• แˆˆแŒƒแ‰ซ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แˆแˆตแˆ‰แŠ• แŠฅแŠ•แ‹ญแข

โ–แˆˆแŒƒแ‰ซ แŠ แ•แˆŠแŠฌแˆฝแŠ• แ‹จแˆ˜แ‹ซแ‹ฃ แˆแˆตแˆ แˆ˜แŒˆแŠ•แ‰ฃแ‰ต

แˆแŠ• แŠฅแŠ•แ‹ฐแˆ†แА แ‰ณแ‹แ‰ƒแˆˆแˆ…แฃ แŠฅแŠ“ แ‹จแˆ˜แ‹ซแ‹ฃ แˆแˆตแˆŽแ‰ฝแŠ• แˆˆแˆ˜แแŒ แˆญ แ‹จแˆšแ‹ซแˆตแˆแˆแŒแ‹Žแ‰ตแŠ• แˆแˆ‰ แŠ แˆตแ‰€แ‹ตแˆ˜แ‹ แ‰ฐแˆแˆจแ‹‹แˆแข แˆˆแ‹šแˆ… แАแ‹ แ‹ญแˆ… แŠญแแˆ แ‰ แŒฃแˆ แŠ แŒญแˆญ แ‹ญแˆ†แŠ“แˆ.

แ‹แ‹ญแˆ‰แŠ• แ‹ญแŠญแˆแ‰ฑ Dockerfile, แ‹ญแˆ…แˆ แ‰ แ•แˆฎแŒ€แŠญแ‰ต แŠ แ‰ƒแŠ แ‹แˆตแŒฅ แ‹ญแŒˆแŠ›แˆ sa-webapp. แ‹จแ‹šแˆ…แŠ• แ‹แ‹ญแˆ แŒฝแˆ‘แ แŠซแАแ‰ แ‰ก, แ‰ แŠฅแˆฑ แ‹แˆตแŒฅ แ‰ แ‰แˆแ แ‰ƒแˆ‹แ‰ต แ‹จแˆšแŒ€แˆแˆฉ แˆแˆˆแ‰ต แŠ แ‹ณแ‹ฒแˆต แŒแŠ•แ‰ฃแ‰ณแ‹Žแ‰ฝแŠ• แ‰ฅแ‰ป แ‹ซแŒˆแŠ›แˆ‰ ENV ะธ EXPOSE:

ENV SA_LOGIC_API_URL http://localhost:5000
โ€ฆ
EXPOSE 8080

แ‰แˆแ แ‰ƒแˆ ENV แ‰  Docker แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ แ‹แˆตแŒฅ แ‹จแŠ แŠซแ‰ฃแ‰ข แ‰ฐแˆˆแ‹‹แ‹‹แŒฎแ‰ฝแŠ• แŠฅแŠ•แ‹ฒแ‹ซแ‹แŒ แ‹ซแˆตแ‰ฝแˆแ‹Žแ‰ณแˆแข แ‰ แ‰ฐแˆˆแ‹ญแˆ, แ‰ แŠฅแŠ› แˆแŠ”แ‰ณ, แ‹จแŒฝแˆ‘แ แ‰ตแŠ•แ‰ณแŠ”แŠ• แ‹จแˆšแ‹ซแŠจแŠ“แ‹แŠ• แ‹จแˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแ‹แŠ• แŠคแ’แŠ แ‹ญ แˆˆแˆ˜แ‹ตแˆจแˆต แ‹ฉแŠ แˆญแŠคแˆ แŠฅแŠ•แ‹ฒแ‹ซแ‹˜แŒ‹แŒ แ‹ญแˆแ‰…แ‹ตแˆแ‹Žแ‰ณแˆ.

แ‰แˆแ แ‰ƒแˆ EXPOSE แ‹ถแŠจแˆญ แ‹ˆแ‹ฐแ‰ฅ แŠฅแŠ•แ‹ฒแŠจแแ‰ต แŠฅแŠ•แ‹ฒแАแŒแˆฉ แ‹ซแˆตแ‰ฝแˆแ‹Žแ‰ณแˆแข แŠจแˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแ‹ แŒ‹แˆญ แˆตแŠ•แˆฐแˆซ แ‹ญแˆ…แŠ•แŠ• แ‹ˆแ‹ฐแ‰ฅ แˆแŠ•แŒ แ‰€แˆ แАแ‹แข แŠฅแ‹šแˆ… แ‹แˆตแŒฅ แ‹ซแŠ•แŠ• แˆ›แ‹จแ‰ต แ‹ญแ‰ฝแˆ‹แˆ‰ 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. แ‰ แ‰ฐแŒจแˆ›แˆชแˆ แ‹จแ“แ‹ญแ‹˜แŠ• แŠ แ•แˆŠแŠฌแˆฝแŠ‘ แŠจแŒƒแ‰ซ แŠ แ•แˆŠแŠฌแˆฝแŠ‘ แ‹จแˆšแ‰€แˆญแ‰ก แŒฅแ‹ซแ‰„แ‹Žแ‰ฝแŠ• แ‹จแˆšแ‹ซแ‹ณแˆแŒฅแ‰ แ‰ตแŠ• แ‹ˆแ‹ฐแ‰ฅ แˆ›แ‹˜แŒ‹แŒ€แ‰ต แŠ แˆˆแ‰ฅแŠ• แ‹จแŠ แŠซแ‰ฃแ‰ข แ‰ฐแˆˆแ‹‹แ‹‹แŒญ แ‰ แˆ˜แˆ˜แ‹ฐแ‰ฅ 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

แ‹จแŠฎแŠ•แ‰ดแ‹ญแАแˆญ แ‹ˆแ‹ญแˆ แ‹จแ‹ถแŠจแˆญ แ‰ชแŠคแˆ แŠ แ‹ญแ’ แŠ แ‹ตแˆซแˆปแŠ• แŠฅแŠ•แ‹ดแ‰ต แˆ›แŒแŠ˜แ‰ต แŠฅแŠ•แ‹ฐแˆšแ‰ฝแˆ‰ แˆˆแˆ›แ‹ˆแ‰… แ‹แ‹ญแˆ‰แŠ• แ‹ญแˆ˜แˆแŠจแ‰ฑ 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แ‰ แˆตแˆแ‰ฑ แ‹แˆตแŒฅ แ‹จแŠ แ‹ญแ’ แŠ แ‹ตแˆซแˆปแ‹แŠ• แ‹ˆแ‹ญแˆ แ‹จแ‹ˆแ‹ฐแ‰ฅ แ‰แŒฅแˆญแŠ• แ‰ แˆ˜แ‰€แ‹จแˆญ analyzeSentence()แŒŠแ‹œ แ‹ซแˆˆแˆแ‰ แ‰ต แˆ˜แˆจแŒƒแŠ• แˆณแ‹ญแˆ†แŠ• แ‹จแŠ แˆแŠ‘แŠ• แˆ˜แˆจแŒƒ แ‰ แˆ˜แ‰ฐแŠซแ‰ต. แŠจแ‹šแ‹ซ แ‰ แŠ‹แˆ‹ แˆแˆตแˆ‰แŠ• แŠฅแŠ•แ‹ฐแŒˆแŠ“ แˆ˜แˆฐแ‰ฅแˆฐแ‰ฅ แŠฅแŠ“ แˆ˜แŒ แ‰€แˆ แ‹ซแˆตแˆแˆแŒแ‹Žแ‰ณแˆ.

แŠ แˆแŠ• แ‹จแŠ› แŠ แ•แˆŠแŠฌแˆฝแŠ• แˆฅแ‹•แˆ‹แ‹Š แˆ˜แŒแˆˆแŒซ แ‹ญแˆ…แŠ• แ‹ญแˆ˜แˆตแˆ‹แˆแข

แ‹จแŠฉแ‰ แˆญแŠ”แ‰ตแˆต แˆ›แŒ แŠ“แŠจแˆชแ‹ซ แ‰ตแˆแˆ…แˆญแ‰ต แŠญแแˆ 1แก แŠ แ•แˆŠแŠฌแˆฝแŠ–แ‰ฝแฃ แˆ›แ‹ญแŠญแˆฎ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝ แŠฅแŠ“ แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ
แˆ›แ‹ญแŠญแˆฎ แˆฐแˆญแ‰ชแˆต แ‰ แˆ˜แ‹ซแ‹ฃแ‹Žแ‰ฝ แ‹แˆตแŒฅ แ‹ญแˆฐแˆซแˆ

แˆ›แŒ แ‰ƒแˆˆแ‹ซแก แˆˆแˆแŠ• แ‹จแŠฉแ‰ แˆญแŠ”แ‰ตแˆต แŠญแˆ‹แˆตแ‰ฐแˆญ แ‹ซแˆตแˆแˆแŒˆแŠ“แˆ?

แŠ แˆแŠ• แ‹แ‹ญแˆŽแ‰นแŠ• แŒˆแˆแŒแˆ˜แŠ“แˆแข DockerfileแˆแˆตแˆŽแ‰ฝแŠ• แŠฅแŠ•แ‹ดแ‰ต แŠฅแŠ•แ‹ฐแˆšแŒˆแАแ‰ก แŠฅแŠ“ แ‹ˆแ‹ฐ Docker แˆ›แŠจแˆ›แ‰ป แŠฅแŠ•แ‹ดแ‰ต แŠฅแŠ•แ‹ฐแˆšแŒˆแ‰ แ‰ฐแŠ“แŒแˆฏแˆแข แ‰ แ‰ฐแŒจแˆ›แˆชแˆ, แ‹แ‹ญแˆ‰แŠ• แ‰ แˆ˜แŒ แ‰€แˆ แˆแˆตแˆŽแ‰ฝแŠ• แŠฅแŠ•แ‹ดแ‰ต แˆ›แ‹แŒ แŠ• แŠฅแŠ•แ‹ฐแˆšแ‰ปแˆ แ‰ฐแˆแˆจแŠ“แˆ .dockerignore. แ‰ แ‹šแˆ… แˆแŠญแŠ•แ‹ซแ‰ต แ‹จแŠฅแŠ› แˆ›แ‹ญแŠญแˆฎ แˆฐแˆญแ‰ชแˆต แŠ แˆแŠ• แ‰ แ‹ถแŠจแˆญ แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ แ‹แˆตแŒฅ แŠฅแ‹จแˆฐแˆฉ แŠ“แ‰ธแ‹แข แŠฅแ‹šแˆ… แŠฉแ‰ แˆญแŠ”แ‰ตแˆต แˆˆแˆแŠ• แŠฅแŠ•แ‹ฐแˆแŠ•แˆแˆแŒ แˆ™แˆ‰ แ‰ แˆ™แˆ‰ แ‰ตแŠญแŠญแˆˆแŠ› แŒฅแ‹ซแ‰„ แˆŠแŠ–แˆญแ‹Žแ‰ต แ‹ญแ‰ฝแˆ‹แˆแข แ‹จแ‹šแˆ… แŒฅแ‹ซแ‰„ แˆ˜แˆแˆต แ‰ แ‹šแˆ… แ‰แˆณแ‰แˆต แˆแˆˆแ‰ฐแŠ› แŠญแแˆ แˆ‹แ‹ญ แ‹ญแ‹ˆแˆฐแŠ“แˆ. แŠฅแˆตแŠจแ‹šแ‹ซแ‹ แ‹ตแˆจแˆต แ‹จแˆšแŠจแ‰ฐแˆˆแ‹แŠ• แŒฅแ‹ซแ‰„ แŠ แˆตแ‰ฅแ‰ แ‰ตแก-
แ‹จแŠ› แ‹จแŒฝแˆแ แ‰ตแŠ•แ‰ฐแŠ“ แ‹Œแ‰ฅ แŠ แ•แˆŠแŠฌแˆฝแŠ• แ‰ แŠ แˆˆแˆ แŠ แ‰€แ แ‹ฐแˆจแŒƒ แ‰ณแ‹‹แ‰‚ แˆ†แŠ—แˆ แ‰ฅแˆˆแŠ• แŠฅแŠ“แˆตแ‰ฅแข แ‰ แ‹จแ‹ฐแ‰‚แ‰ƒแ‹ แ‰ แˆšแˆŠแ‹ฎแŠ• แ‹จแˆšแ‰†แŒ แˆฉ แŒฅแ‹ซแ‰„แ‹Žแ‰ฝ แ‹ˆแ‹ฐ แŠฅแˆฑ แ‹ญแˆ˜แŒฃแˆ‰แข แ‹ญแˆ… แˆ›แˆˆแ‰ต แˆ›แ‹ญแŠญแˆฎ แˆฐแˆญแ‰ชแˆต แˆ›แˆˆแ‰ต แАแ‹ sa-webapp ะธ sa-logic แ‰ แŠจแแ‰ฐแŠ› แŒญแŠ•แ‰€แ‰ต แ‹แˆตแŒฅ แ‹ญแˆ†แŠ“แˆ. แˆ›แ‹ญแŠญแˆฎ แŠ แŒแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แ‹จแˆšแ‹ซแŠซแˆ‚แ‹ฑ แˆ˜แ‹ซแ‹ฃแ‹Žแ‰ฝแŠ• แŠฅแŠ•แ‹ดแ‰ต แˆ˜แˆ˜แ‹˜แŠ• แ‹ญแ‰ปแˆ‹แˆ?

แ‹จแŠฉแ‰ แˆญแŠ”แ‰ตแˆต แˆ›แŒ แŠ“แŠจแˆชแ‹ซ แ‰ตแˆแˆ…แˆญแ‰ต แŠญแแˆ 1แก แŠ แ•แˆŠแŠฌแˆฝแŠ–แ‰ฝแฃ แˆ›แ‹ญแŠญแˆฎ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝ แŠฅแŠ“ แŠฎแŠ•แ‰ดแ‹ญแАแˆฎแ‰ฝ

แˆแŠ•แŒญ: hab.com

แ‰ DDoS แŒฅแ‰ แ‰ƒแฃ VPS VDS แŠ แŒˆแˆแŒ‹แ‹ฎแ‰ฝ แˆˆแŒฃแ‰ขแ‹ซแ‹Žแ‰ฝ แŠ แˆตแ‰ฐแˆ›แˆ›แŠ แˆ›แˆตแ‰ฐแŠ“แŒˆแŒƒ แ‹ญแŒแ‹™ ๐Ÿ”ฅ แŠ แˆตแ‰ฐแˆ›แˆ›แŠ แ‹จแ‹ตแˆญ แŒฃแ‰ขแ‹ซ แˆ›แˆตแ‰ฐแŠ“แŒˆแŒƒ แ‰ แ‹ฒแ‹ถแŠคแˆต แŒฅแ‰ แ‰ƒแฃ แ‰ แ‰ชแ’แŠคแˆต แ‰ชแ‹ฒแŠคแˆต แŠ แŒˆแˆแŒ‹แ‹ฎแ‰ฝ แ‹ญแŒแ‹™ | ProHoster