เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชฐ เช†เชงเซเชจเชฟเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ, เชญเชพเช— 2: เชธเชพเช‚เช•เชณเซ‹ เชฌเชฟเชฒเซเชกเซเชธ

เช•เซ‡เชฎ เช›เซ‹ เชฌเชงเชพ! เช† เช…เชฎเชพเชฐเซ€ เชถเซเชฐเซ‡เชฃเซ€เชจเซ€ เชฌเซ€เชœเซ€ เชชเซ‹เชธเซเชŸ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เช…เชฎเซ‡ Red Hat OpenShift เชชเชฐ เช†เชงเซเชจเชฟเช• เชตเซ‡เชฌ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชœเชฎเชพเชตเชตเซ€ เชคเซ‡ เชฌเชคเชพเชตเซ€เช เช›เซ€เช.

เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชฐ เช†เชงเซเชจเชฟเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ, เชญเชพเช— 2: เชธเชพเช‚เช•เชณเซ‹ เชฌเชฟเชฒเซเชกเซเชธ

เช…เช—เชพเช‰เชจเซ€ เชชเซ‹เชธเซเชŸเชฎเชพเช‚, เช…เชฎเซ‡ เชจเชตเซ€ S2I (เชธเซเชฐเซ‹เชค-เชฅเซ€-เช‡เชฎเซ‡เชœ) เชฌเชฟเชฒเซเชกเชฐ เช‡เชฎเซ‡เชœเชจเซ€ เช•เซเชทเชฎเชคเชพเช“ เชชเชฐ เชธเชนเซ‡เชœ เชธเซเชชเชฐเซเชถ เช•เชฐเซเชฏเซ‹ เชนเชคเซ‹, เชœเซ‡ OpenShift เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชชเชฐ เช†เชงเซเชจเชฟเช• เชตเซ‡เชฌ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพ เช…เชจเซ‡ เชœเชฎเชพเชตเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชกเชฟเชเชพเช‡เชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡. เชชเช›เซ€ เช…เชฎเชจเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชเชกเชชเชฅเซ€ เชœเชฎเชพเชตเชตเชพเชจเชพ เชตเชฟเชทเชฏเชฎเชพเช‚ เชฐเชธ เชนเชคเซ‹, เช…เชจเซ‡ เช†เชœเซ‡ เช†เชชเชฃเซ‡ "เชถเซเชฆเซเชง" เชฌเชฟเชฒเซเชกเชฐ เช‡เชฎเซ‡เชœ เชคเชฐเซ€เช•เซ‡ S2I เช‡เชฎเซ‡เชœเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชธเช‚เชฌเช‚เชงเชฟเชค OpenShift เชเชธเซ‡เชฎเซเชฌเชฒเซ€เช“ เชธเชพเชฅเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชœเซ‹เชกเชตเซเช‚ เชคเซ‡ เชœเซ‹เชˆเชถเซเช‚.

เชธเซเชตเชšเซเช› เชฌเชฟเชฒเซเชกเชฐเชจเซ€ เช›เชฌเซ€

เช†เชชเชฃเซ‡ เชญเชพเช— XNUMX เชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซเชฏเซ‹ เช›เซ‡ เชคเซ‡เชฎ, เชฎเซ‹เชŸเชพ เชญเชพเช—เชจเซ€ เช†เชงเซเชจเชฟเช• เชตเซ‡เชฌ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธเชฎเชพเช‚ เช•เชนเซ‡เชตเชพเชคเชพ เชฌเชฟเชฒเซเชก เชธเซเชŸเซ‡เชœ เชนเซ‹เชฏ โ€‹โ€‹เช›เซ‡, เชœเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช•เซ‹เชก เชŸเซเชฐเชพเชจเซเชธเชชเชฟเชฒเซ‡เชถเชจ, เชฌเชนเซเชตเชฟเชง เชซเชพเช‡เชฒ เชœเซ‹เชกเชพเชฃ เช…เชจเซ‡ เชฎเชฟเชจเชฟเชซเชฟเช•เซ‡เชถเชจ เชœเซ‡เชตเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€ เช•เชฐเซ‡ เช›เซ‡. เช† เช•เชพเชฎเช—เซ€เชฐเซ€เชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‡ เชฎเซ‡เชณเชตเซ‡เชฒ เชซเชพเช‡เชฒเซ‹ - เช…เชจเซ‡ เช† เชธเซเชŸเซ‡เชŸเชฟเช• HTML, JavaScript เช…เชจเซ‡ CSS เช›เซ‡ - เช†เช‰เชŸเชชเซเชŸ เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เชฅเชพเชฏ เช›เซ‡. เช† เชซเซ‹เชฒเซเชกเชฐเชจเซเช‚ เชธเซเชฅเชพเชจ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช•เชฏเชพ เชฌเชฟเชฒเซเชก เชŸเซ‚เชฒเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชคเซ‡เชจเชพ เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ‡ เช›เซ‡, เช…เชจเซ‡ เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เชฎเชพเชŸเซ‡ เช† ./build เชซเซ‹เชฒเซเชกเชฐ เชนเชถเซ‡ (เช…เชฎเซ‡ เชจเซ€เชšเซ‡ เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เช† เชชเชฐ เชชเชพเช›เชพ เช†เชตเซ€เชถเซเช‚).

เชธเซ‹เชฐเซเชธ-เชŸเซ-เช‡เชฎเซ‡เชœ (S2I)

เช† เชชเซ‹เชธเซเชŸเชฎเชพเช‚ เช…เชฎเซ‡ "S2I เชถเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเซ‹" เชตเชฟเชทเชฏเชจเซ‡ เชธเซเชชเชฐเซเชถเชคเชพ เชจเชฅเซ€ (เชคเชฎเซ‡ เช† เชตเชฟเชถเซ‡ เชตเชงเซ เชตเชพเช‚เชšเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชนเซ€เช‚), เชชเชฐเช‚เชคเซ เชตเซ‡เชฌ เชเชช เชฌเชฟเชฒเซเชกเชฐ เช‡เชฎเซ‡เชœ เชถเซเช‚ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เชธเชฎเชœเชตเชพ เชฎเชพเชŸเซ‡ เช† เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเชพ เชฌเซ‡ เชชเช—เชฒเชพเช“ เชตเชฟเชถเซ‡ เชธเซเชชเชทเซเชŸ เชนเซ‹เชตเซเช‚ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡.

เชตเชฟเชงเชพเชจเชธเชญเชพ เชคเชฌเช•เซเช•เซ‹

เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชกเซ‹เช•เชฐ เชฌเชฟเชฒเซเชก เชšเชฒเชพเชตเซ‹ เช›เซ‹ เช…เชจเซ‡ เชจเชตเซ€ เชกเซ‹เช•เชฐ เช‡เชฎเซ‡เชœ เชธเชพเชฅเซ‡ เชธเชฎเชพเชชเซเชค เช•เชฐเซ‹ เช›เซ‹ เชคเซเชฏเชพเชฐเซ‡ เชถเซเช‚ เชฅเชพเชฏ เช›เซ‡ เชคเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒเซ€เชจเซ‹ เชคเชฌเช•เซเช•เซ‹ เชชเซเชฐเช•เซƒเชคเชฟเชฎเชพเช‚ เช–เซ‚เชฌ เชธเชฎเชพเชจ เช›เซ‡. เชคเชฆเชจเซเชธเชพเชฐ, เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชชเชฐ เชฌเชฟเชฒเซเชก เชถเชฐเซ‚ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช† เชคเชฌเช•เซเช•เซ‹ เชฅเชพเชฏ เช›เซ‡.

เชตเซ‡เชฌ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชฟเชฒเซเชกเชฐ เช‡เชฎเซ‡เชœเชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชคเซ‡ เชคเชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ€ เชจเชฟเชฐเซเชญเชฐเชคเชพเชจเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพ เช…เชจเซ‡ เชฌเชฟเชฒเซเชก เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡. เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเซ‹. เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡, เชฌเชฟเชฒเซเชกเชฐ เช‡เชฎเซ‡เชœ npm เชฐเชจ เชฌเชฟเชฒเซเชก เช•เชจเซเชธเซเชŸเซเชฐเช•เซเชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เช† NPM_BUILD เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชตเซ‡เชฐเซ€เชเชฌเชฒ เชฆเซเชตเชพเชฐเชพ เช“เชตเชฐเชฐเชพเช‡เชก เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เชœเซ‡เชฎ เช†เชชเชฃเซ‡ เช…เช—เชพเช‰ เช•เชนเซเชฏเซเช‚ เชคเซ‡เชฎ, เชธเชฎเชพเชชเซเชค เชฅเชฏเซ‡เชฒ, เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชฌเชจเชพเชตเซ‡เชฒ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซเช‚ เชธเซเชฅเชพเชจ เชคเชฎเซ‡ เช•เชฏเชพ เชธเชพเชงเชจเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ เช›เซ‹ เชคเซ‡เชจเชพ เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ‡ เช›เซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพเชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เช† ./build เชซเซ‹เชฒเซเชกเชฐ เชนเชถเซ‡, เช…เชจเซ‡ เช•เซ‹เชฃเซ€เชฏ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชคเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ_เชจเชพเชฎ/เชกเชฟเชธเซเชŸ เชซเซ‹เชฒเซเชกเชฐ เชนเชถเซ‡. เช…เชจเซ‡, เช…เช—เชพเช‰เชจเซ€ เชชเซ‹เชธเซเชŸเชฎเชพเช‚ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชฌเชคเชพเชตเซเชฏเชพ เชชเซเชฐเชฎเชพเชฃเซ‡, เช†เช‰เชŸเชชเซเชŸ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชจเซเช‚ เชธเซเชฅเชพเชจ, เชœเซ‡ เชกเชฟเชซเซ‹เชฒเซเชŸ เชฐเซ‚เชชเซ‡ เชฌเชฟเชฒเซเชก เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเซ‡เชŸ เช›เซ‡, เชคเซ‡ OUTPUT_DIR เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชตเซ‡เชฐเซ€เชเชฌเชฒ เชฆเซเชตเชพเชฐเชพ เช“เชตเชฐเชฐเชพเช‡เชก เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เช เซ€เช• เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เช†เช‰เชŸเชชเซเชŸ เชซเซ‹เชฒเซเชกเชฐเชจเซเช‚ เชธเซเชฅเชพเชจ เชซเซเชฐเซ‡เชฎเชตเชฐเซเช•เชฅเซ€ เชซเซเชฐเซ‡เชฎเชตเชฐเซเช•เชฎเชพเช‚ เช…เชฒเช— เช›เซ‡, เชคเชฎเซ‡ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡เชฒเชพ เช†เช‰เชŸเชชเซเชŸเชจเซ‡ เชˆเชฎเซ‡เชœเชจเชพ เชธเซเชŸเชพเชจเซเชกเชฐเซเชก เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚ เช•เซ‰เชชเชฟ เช•เชฐเซ‹, เชเชŸเชฒเซ‡ เช•เซ‡ /opt/apt-root/output. เช† เชฒเซ‡เช–เชจเชพ เชฌเชพเช•เซ€เชจเชพ เชญเชพเช—เชจเซ‡ เชธเชฎเชœเชตเชพ เชฎเชพเชŸเซ‡ เช† เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡, เชชเชฐเช‚เชคเซ เชนเชฎเชฃเชพเช‚ เชฎเชพเชŸเซ‡ เชšเชพเชฒเซ‹ เชเชกเชชเชฅเซ€ เช†เช—เชณเชจเชพ เชคเชฌเช•เซเช•เชพ - เชฐเชจเชจเซ‹ เชคเชฌเช•เซเช•เซ‹ เชœเซ‹เชˆเช.

เชฐเชจ เชคเชฌเช•เซเช•เซ‹

เช† เชคเชฌเช•เซเช•เซ‹ เชคเซเชฏเชพเชฐเซ‡ เชฅเชพเชฏ เช›เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชธเซเชŸเซ‡เชœ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชฌเชจเชพเชตเซ‡เชฒเซ€ เชจเชตเซ€ เชˆเชฎเซ‡เชœ เชชเชฐ เชกเซ‹เช•เชฐ เชฐเชจ เชฎเชพเชŸเซ‡ เช•เซ‹เชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. OpenShift เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชชเชฐ เชœเชฎเชพเชตเชŸ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชคเซ‡ เชœ เชฅเชพเชฏ เช›เซ‡. เชกเชฟเชซเซ‰เชฒเซเชŸ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชšเชฒเชพเชตเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เชฎเซ‹เชกเซเชฏเซเชฒ เชธเชฐเซเชต เช•เชฐเซ‹ เช‰เชชเชฐเซ‹เช•เซเชค เชฎเชพเชจเช• เช†เช‰เชŸเชชเซเชŸ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚ เชธเซเชฅเชฟเชค เชธเซเชฅเชฟเชฐ เชธเชพเชฎเช—เซเชฐเซ€เชจเซ‡ เชธเซ‡เชตเชพ เช†เชชเชตเชพ เชฎเชพเชŸเซ‡.

เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชเชกเชชเชฅเซ€ เชœเชฎเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช† เชชเชฆเซเชงเชคเชฟ เชธเชพเชฐเซ€ เช›เซ‡, เชชเชฐเช‚เชคเซ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชธเซเชฅเชฟเชฐ เชธเชพเชฎเช—เซเชฐเซ€เชจเซ‡ เช† เชฐเซ€เชคเซ‡ เชธเซ‡เชตเชพ เช†เชชเชตเชพ เชฎเชพเชŸเซ‡ เชญเชฒเชพเชฎเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชคเซ€ เชจเชฅเซ€. เช เซ€เช• เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชตเชพเชธเซเชคเชตเชฎเชพเช‚ เช…เชฎเซ‡ เชซเช•เซเชค เชธเซเชฅเชฟเชฐ เชธเชพเชฎเช—เซเชฐเซ€ เชœ เช†เชชเซ€เช เช›เซ€เช, เช…เชฎเชจเซ‡ เช…เชฎเชพเชฐเซ€ เช›เชฌเซ€เชจเซ€ เช…เช‚เชฆเชฐ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‡เชฒ Node.js เชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€ - เชเช• เชตเซ‡เชฌ เชธเชฐเซเชตเชฐ เชชเซ‚เชฐเชคเซเช‚ เชนเชถเซ‡.

เชฌเซ€เชœเชพ เชถเชฌเซเชฆเซ‹เชฎเชพเช‚ เช•เชนเซ€เช เชคเซ‹, เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช†เชชเชฃเชจเซ‡ เชเช• เชตเชธเซเชคเซเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เช›เซ‡, เชœเซเชฏเชพเชฐเซ‡ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช†เชชเชฃเชจเซ‡ เชฌเซ€เชœเซ€ เชตเชธเซเชคเซเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เช›เซ‡. เช† เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚, เชธเชพเช‚เช•เชณเซ‹ เชฌเชพเช‚เชงเซ‹ เชนเชพเชฅเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เชธเชพเช‚เช•เชณเซ‹ เชฌเชพเช‚เชงเซ‡ เช›เซ‡

เช† เชตเชฟเชถเซ‡ เชคเซ‡เช“ เชฒเช–เซ‡ เช›เซ‡ เชธเชพเช‚เช•เชณเซ‹ เชฌเชพเช‚เชงเซ‹ OpenShift เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃเชฎเชพเช‚:

"เชฌเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒเซ€เช“เชจเซ‡ เชเช•เชธเชพเชฅเซ‡ เชœเซ‹เชกเซ€ เชถเช•เชพเชฏ เช›เซ‡, เชœเซ‡เชฎเชพเช‚ เชเช• เชธเช‚เช•เชฒเชฟเชค เชเชจเซเชŸเชฟเชŸเซ€ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชฌเซ€เชœเซ€ เชคเซ‡ เชเชจเซเชŸเชฟเชŸเซ€เชจเซ‡ เช…เชฒเช— เชˆเชฎเซ‡เชœเชฎเชพเช‚ เชนเซ‹เชธเซเชŸ เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชคเซ‡ เชเชจเซเชŸเชฟเชŸเซ€เชจเซ‡ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡."

เชฌเซ€เชœเชพ เชถเชฌเซเชฆเซ‹เชฎเชพเช‚ เช•เชนเซ€เช เชคเซ‹, เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ เชฌเชฟเชฒเซเชกเชจเซ‡ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชตเซ‡เชฌ เชเชช เชฌเชฟเชฒเซเชกเชฐ เช‡เชฎเซ‡เชœเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช, เช…เชจเซ‡ เชชเช›เซ€ เช…เชฎเชพเชฐเซ€ เชธเชพเชฎเช—เซเชฐเซ€เชจเซ‡ เชธเซ‡เชตเชพ เช†เชชเชตเชพ เชฎเชพเชŸเซ‡ เชตเซ‡เชฌ เชธเชฐเซเชตเชฐ เช‡เชฎเซ‡เชœ, เชธเชฎเชพเชจ NGINX เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช.

เช†เชฎ, เช…เชฎเซ‡ เชตเซ‡เชฌ เชเชช เชฌเชฟเชฒเซเชกเชฐ เชˆเชฎเซ‡เชœเชจเซ‹ เช‰เชชเชฏเซ‹เช— "เชถเซเชฆเซเชง" เชฌเชฟเชฒเซเชกเชฐ เชคเชฐเซ€เช•เซ‡ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช เช…เชจเซ‡ เชคเซ‡ เชœ เชธเชฎเชฏเซ‡ เชจเชพเชจเซ€ เชฐเชจเชŸเชพเชˆเชฎ เชˆเชฎเซ‡เชœ เชงเชฐเชพเชตเซ€ เชถเช•เซ€เช เช›เซ€เช.

เชนเชตเซ‡ เช†เชจเซ‡ เชšเซ‹เช•เซเช•เชธ เช‰เชฆเชพเชนเชฐเชฃ เชธเชพเชฅเซ‡ เชœเซ‹เชˆเช.

เชคเชพเชฒเซ€เชฎ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚ เชธเชฐเชณ เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ, create-react-app เช•เชฎเชพเชจเซเชก เชฒเชพเช‡เชจ เชŸเซ‚เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฌเชจเชพเชตเซ‡เชฒ เช›เซ‡.

เชคเซ‡ เช…เชฎเชจเซ‡ เชฌเชงเซเช‚ เชเช•เชธเชพเชฅเซ‡ เชฐเชพเช–เชตเชพเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเชถเซ‡ OpenShift เชŸเซ‡เชฎเซเชชเชฒเซ‡เชŸ เชซเชพเช‡เชฒ.

เชšเชพเชฒเซ‹ เช† เชซเชพเช‡เชฒเชจเซ‡ เชตเชงเซ เชตเชฟเช—เชคเชฎเชพเช‚ เชœเซ‹เชˆเช, เช…เชจเซ‡ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชตเชฟเชญเชพเช—เชฅเซ€ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ€เช.

parameters:
  - name: SOURCE_REPOSITORY_URL
    description: The source URL for the application
    displayName: Source URL
    required: true
  - name: SOURCE_REPOSITORY_REF
    description: The branch name for the application
    displayName: Source Branch
    value: master
    required: true
  - name: SOURCE_REPOSITORY_DIR
    description: The location within the source repo of the application
    displayName: Source Directory
    value: .
    required: true
  - name: OUTPUT_DIR
    description: The location of the compiled static files from your web apps builder
    displayName: Output Directory
    value: build
    required: false

เช…เชนเซ€เช‚ เชฌเชงเซเช‚ เชเช•เชฆเชฎ เชธเซเชชเชทเซเชŸ เช›เซ‡, เชชเชฐเช‚เชคเซ OUTPUT_DIR เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐ เชชเชฐ เชงเซเชฏเชพเชจ เช†เชชเชตเซเช‚ เชฏเซ‹เช—เซเชฏ เช›เซ‡. เช…เชฎเชพเชฐเชพ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚ เชฐเซ€เชเช•เซเชŸ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฎเชพเชŸเซ‡, เชšเชฟเช‚เชคเชพ เช•เชฐเชตเชพเชจเซ€ เช•เซ‹เชˆ เชตเชพเชค เชจเชฅเซ€, เช•เชพเชฐเชฃ เช•เซ‡ เชฐเซ€เชเช•เซเชŸ เช†เช‰เชŸเชชเซเชŸ เชซเซ‹เชฒเซเชกเชฐ เชคเชฐเซ€เช•เซ‡ เชกเชฟเชซเซ‹เชฒเซเชŸ เชฎเซ‚เชฒเซเชฏเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เช•เซ‹เชฃเซ€เชฏ เช…เชฅเชตเชพ เช…เชจเซเชฏ เช•เซ‹เชˆ เชฌเชพเชฌเชคเชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เช† เชชเชฐเชฟเชฎเชพเชฃเชจเซ‡ เช†เชตเชถเซเชฏเช•เชคเชพ เชฎเซเชœเชฌ เชฌเชฆเชฒเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡.

เชนเชตเซ‡ เชšเชพเชฒเซ‹ ImageStreams เชตเชฟเชญเชพเช— เชชเชฐ เชเช• เชจเชœเชฐ เช•เชฐเซ€เช.

- apiVersion: v1
  kind: ImageStream
  metadata:
    name: react-web-app-builder  // 1 
  spec: {}
- apiVersion: v1
  kind: ImageStream
  metadata:
    name: react-web-app-runtime  // 2 
  spec: {}
- apiVersion: v1
  kind: ImageStream
  metadata:
    name: web-app-builder-runtime // 3
  spec:
    tags:
    - name: latest
      from:
        kind: DockerImage
        name: nodeshift/ubi8-s2i-web-app:10.x
- apiVersion: v1
  kind: ImageStream
  metadata:
    name: nginx-image-runtime // 4
  spec:
    tags:
    - name: latest
      from:
        kind: DockerImage
        name: 'centos/nginx-112-centos7:latest'

เชคเซเชฐเซ€เชœเซ€ เช…เชจเซ‡ เชšเซ‹เชฅเซ€ เช›เชฌเซ€เช“ เชชเชฐ เชเช• เชจเชœเชฐ เชจเชพเช–เซ‹. เชคเซ‡ เชฌเช‚เชจเซ‡เชจเซ‡ เชกเซ‹เช•เชฐ เช›เชฌเซ€เช“ เชคเชฐเซ€เช•เซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เชคเชฎเซ‡ เชธเซเชชเชทเซเชŸเชชเชฃเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹ เช•เซ‡ เชคเซ‡เช“ เช•เซเชฏเชพเช‚เชฅเซ€ เช†เชตเซ‡ เช›เซ‡.

เชคเซเชฐเซ€เชœเซ€ เช‡เชฎเซ‡เชœ เชตเซ‡เชฌ-เชเชช-เชฌเชฟเชฒเซเชกเชฐ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ nodeshift/ubi8-s2i-web-app 10.x เชชเชฐ เชŸเซ…เช— เช•เชฐเซ‡เชฒเซ€ เช›เซ‡. เชกเซ‹เช•เชฐ เชนเชฌ.

เชšเซ‹เชฅเซเช‚ เชเช• NGINX เช‡เชฎเซ‡เชœ (เชธเช‚เชธเซเช•เชฐเชฃ 1.12) เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เชจเชตเซ€เชจเชคเชฎ เชŸเซ‡เช— เชšเชพเชฒเซ เช›เซ‡ เชกเซ‹เช•เชฐ เชนเชฌ.

เชนเชตเซ‡ เชชเซเชฐเชฅเชฎ เชฌเซ‡ เชˆเชฎเซ‡เชœ เชœเซ‹เชˆเช. เชคเซ‡ เชฌเช‚เชจเซ‡ เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เช–เชพเชฒเซ€ เชนเซ‹เชฏ เช›เซ‡ เช…เชจเซ‡ เชฎเชพเชคเซเชฐ เชฌเชฟเชฒเซเชก เชคเชฌเช•เซเช•เชพ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชœ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชชเซเชฐเชฅเชฎ เช‡เชฎเซ‡เชœ, เชฐเชฟเชเช•เซเชŸ-เชตเซ‡เชฌ-เชเชช-เชฌเชฟเชฒเซเชกเชฐ, เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชธเซเชŸเซ‡เชชเชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ เชนเชถเซ‡ เชœเซ‡ เชตเซ‡เชฌ-เชเชช-เชฌเชฟเชฒเซเชกเชฐ-เชฐเชจเชŸเชพเช‡เชฎ เชˆเชฎเซ‡เชœ เช…เชจเซ‡ เช…เชฎเชพเชฐเชพ เชธเซ‹เชฐเซเชธ เช•เซ‹เชกเชจเซ‡ เชœเซ‹เชกเชถเซ‡. เชคเซ‡เชฅเซ€ เชœ เช…เชฎเซ‡ เช† เช›เชฌเซ€เชจเชพ เชจเชพเชฎเชฎเชพเช‚ "-เชฌเชฟเชฒเซเชกเชฐ" เช‰เชฎเซ‡เชฐเซเชฏเซเช‚ เช›เซ‡.

เชฌเซ€เชœเซ€ เช‡เชฎเซ‡เชœ - react-web-app-runtime - nginx-image-runtime เช…เชจเซ‡ react-web-app-builder เช‡เชฎเซ‡เชœเชฎเชพเช‚เชฅเซ€ เช•เซ‡เชŸเชฒเซ€เช• เชซเชพเช‡เชฒเซ‹เชจเซ‡ เชธเช‚เชฏเซ‹เชœเชฟเชค เช•เชฐเชตเชพเชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ เชนเชถเซ‡. เช† เช›เชฌเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชœเชฎเชพเชตเชŸ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชชเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชซเช•เซเชค เชตเซ‡เชฌ เชธเชฐเซเชตเชฐ เช…เชจเซ‡ เช…เชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซเช‚ เชธเซเชŸเซ‡เชŸเชฟเช• HTML, JavaScript, CSS เชนเชถเซ‡.

เชฎเซ‚เช‚เชเชตเชฃเชฎเชพเช‚? เชนเชตเซ‡ เชšเชพเชฒเซ‹ เชฌเชฟเชฒเซเชก เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเซ‹ เชชเชฐ เชเช• เชจเชœเชฐ เช•เชฐเซ€เช เช…เชจเซ‡ เชคเซ‡ เชฅเซ‹เชกเซเช‚ เชธเซเชชเชทเซเชŸ เชฅเชˆ เชœเชถเซ‡.

เช…เชฎเชพเชฐเชพ เชจเชฎเซ‚เชจเชพเชฎเชพเช‚ เชฌเซ‡ เชฌเชฟเชฒเซเชก เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเซ‹ เช›เซ‡. เช…เชนเซ€เช‚ เชชเซเชฐเชฅเชฎ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡ เช–เซ‚เชฌ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เช›เซ‡:

  apiVersion: v1
  kind: BuildConfig
  metadata:
    name: react-web-app-builder
  spec:
    output:
      to:
        kind: ImageStreamTag
        name: react-web-app-builder:latest // 1
    source:   // 2 
      git:
        uri: ${SOURCE_REPOSITORY_URL}
        ref: ${SOURCE_REPOSITORY_REF}
      contextDir: ${SOURCE_REPOSITORY_DIR}
      type: Git
    strategy:
      sourceStrategy:
        env:
          - name: OUTPUT_DIR // 3 
            value: ${OUTPUT_DIR}
        from:
          kind: ImageStreamTag
          name: web-app-builder-runtime:latest // 4
        incremental: true // 5
      type: Source
    triggers: // 6
    - github:
        secret: ${GITHUB_WEBHOOK_SECRET}
      type: GitHub
    - type: ConfigChange
    - imageChange: {}
      type: ImageChange

เชœเซ‡เชฎ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เชฒเซ‡เชฌเชฒ 1 เชธเชพเชฅเซ‡เชจเซ€ เชฒเชพเช‡เชจ เช•เชนเซ‡ เช›เซ‡ เช•เซ‡ เช† เชฌเชฟเชฒเซเชกเชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ เช เชœ เชฐเชฟเชเช•เซเชŸ-เชตเซ‡เชฌ-เชเชช-เชฌเชฟเชฒเซเชกเชฐ เช‡เชฎเซ‡เชœเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เชœเซ‡ เช…เชฎเซ‡ เช‡เชฎเซ‡เชœเชธเซเชŸเซเชฐเซ€เชฎเซเชธ เชตเชฟเชญเชพเช—เชฎเชพเช‚ เชฅเซ‹เชกเซเช‚ เช…เช—เชพเช‰ เชœเซ‹เชฏเซเช‚ เชนเชคเซเช‚.

2 เชฒเซ‡เชฌเชฒเชตเชพเชณเซ€ เชฒเชพเช‡เชจ เชคเชฎเชจเซ‡ เช•เชนเซ‡ เช›เซ‡ เช•เซ‡ เช•เซ‹เชก เช•เซเชฏเชพเช‚เชฅเซ€ เชฎเซ‡เชณเชตเชตเซ‹. เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เช† เชเช• เช—เชฟเชŸ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เช›เซ‡, เช…เชจเซ‡ เชธเซเชฅเชพเชจ, เชธเช‚เชฆเชฐเซเชญ เช…เชจเซ‡ เชธเช‚เชฆเชฐเซเชญ เชซเซ‹เชฒเซเชกเชฐ เช เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชฆเซเชตเชพเชฐเชพ เชจเชฟเชฐเซเชงเชพเชฐเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชœเซ‡ เช†เชชเชฃเซ‡ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เช‰เชชเชฐ เชœเซ‹เชฏเซเช‚ เช›เซ‡.

3 เชฒเซ‡เชฌเชฒเชตเชพเชณเซ€ เชฒเชพเช‡เชจ เช เช›เซ‡ เชœเซ‡ เช†เชชเชฃเซ‡ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชตเชฟเชญเชพเช—เชฎเชพเช‚ เชœเซ‹เชฏเซเช‚ เช›เซ‡. เชคเซ‡ OUTPUT_DIR เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒ เช‰เชฎเซ‡เชฐเซ‡ เช›เซ‡, เชœเซ‡ เช…เชฎเชพเชฐเชพ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚ เชฌเชฟเชฒเซเชก เช›เซ‡.
4 เชฒเซ‡เชฌเชฒเชตเชพเชณเซ€ เชฒเชพเช‡เชจ เชตเซ‡เชฌ-เชเชช-เชฌเชฟเชฒเซเชกเชฐ-เชฐเชจเชŸเชพเช‡เชฎ เช‡เชฎเซ‡เชœเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เชนเซ‡ เช›เซ‡, เชœเซ‡ เช†เชชเชฃเซ‡ เช‡เชฎเซ‡เชœเชธเซเชŸเซเชฐเซ€เชฎ เชตเชฟเชญเชพเช—เชฎเชพเช‚ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชœเซ‹เชˆ เช›เซ‡.

5 เชฒเซ‡เชฌเชฒเชตเชพเชณเซ€ เชฒเชพเช‡เชจ เช•เชนเซ‡ เช›เซ‡ เช•เซ‡ เชœเซ‹ S2I เช‡เชฎเซ‡เชœ เชคเซ‡เชจเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช•เชฐเซ‡ เช…เชจเซ‡ เชตเซ‡เชฌ เชเชช เชฌเชฟเชฒเซเชกเชฐ เช‡เชฎเซ‡เชœ เช•เชฐเซ‡ เชคเซ‹ เช…เชฎเซ‡ เช‡เชจเซเช•เซเชฐเซ€เชฎเซ‡เชจเซเชŸเชฒ เชฌเชฟเชฒเซเชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช. เชชเซเชฐเชฅเชฎ เชฒเซ‹เชจเซเชš เชธเชฎเชฏเซ‡, เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชธเซเชŸเซ‡เชœ เชชเซ‚เชฐเซเชฃ เช•เชฐเซเชฏเชพ เชชเช›เซ€, เช›เชฌเซ€ node_modules เชซเซ‹เชฒเซเชกเชฐเชจเซ‡ เช†เชฐเซเช•เชพเช‡เชต เชซเชพเช‡เชฒเชฎเชพเช‚ เชธเชพเชšเชตเชถเซ‡. เชชเช›เซ€, เช…เชจเซเช—เชพเชฎเซ€ เชฐเชจ เชชเชฐ, เชฌเชฟเชฒเซเชก เชŸเชพเชˆเชฎ เช˜เชŸเชพเชกเชตเชพ เชฎเชพเชŸเซ‡ เชˆเชฎเซ‡เชœ เช† เชซเซ‹เชฒเซเชกเชฐเชจเซ‡ เช–เชพเชฒเซ€ เช…เชจเชเชฟเชช เช•เชฐเชถเซ‡.

เช…เชจเซ‡ เช›เซ‡เชฒเซเชฒเซ‡, 6 เชฒเซ‡เชฌเชฒเชตเชพเชณเซ€ เชฒเชพเช‡เชจ เช เช…เชฎเซเช• เชŸเซเชฐเชฟเช—เชฐเซเชธ เช›เซ‡ เชœเซ‡ เชฌเชฟเชฒเซเชกเชจเซ‡ เช†เชชเซ‹เช†เชช เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เชฎเซ‡เชจเซเชฏเซเช…เชฒ เชนเชธเซเชคเช•เซเชทเซ‡เชช เชตเชฟเชจเชพ, เชœเซเชฏเชพเชฐเซ‡ เช•เช‚เชˆเช• เชฌเชฆเชฒเชพเชฏ เช›เซ‡.

เชเช•เช‚เชฆเชฐเซ‡ เช† เชเช• เชธเซเช‚เชฆเชฐ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชฌเชฟเชฒเซเชก เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช›เซ‡.

เชนเชตเซ‡ เชšเชพเชฒเซ‹ เชฌเซ€เชœเชพ เชฌเชฟเชฒเซเชก เช•เชจเซเชซเชฟเช—เชฐเซ‡เชถเชจ เชชเชฐ เชเช• เชจเชœเชฐ เช•เชฐเซ€เช. เชคเซ‡ เชชเซเชฐเชฅเชฎ เชเช• เชœเซ‡เชตเซเช‚ เชœ เช›เซ‡, เชชเชฐเช‚เชคเซ เชเช• เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชคเชซเชพเชตเชค เช›เซ‡.

apiVersion: v1
  kind: BuildConfig
  metadata:
    name: react-web-app-runtime
  spec:
    output:
      to:
        kind: ImageStreamTag
        name: react-web-app-runtime:latest // 1
    source: // 2
      type: Image
      images:                              
        - from:
            kind: ImageStreamTag
            name: react-web-app-builder:latest // 3
          paths:
            - sourcePath: /opt/app-root/output/.  // 4
              destinationDir: .  // 5
             
    strategy: // 6
      sourceStrategy:
        from:
          kind: ImageStreamTag
          name: nginx-image-runtime:latest
        incremental: true
      type: Source
    triggers:
    - github:
        secret: ${GITHUB_WEBHOOK_SECRET}
      type: GitHub
    - type: ConfigChange
    - type: ImageChange
      imageChange: {}
    - type: ImageChange
      imageChange:
        from:
          kind: ImageStreamTag
          name: react-web-app-builder:latest // 7

เชคเซ‡เชฅเซ€ เชฌเซ€เชœเซเช‚ เชฌเชฟเชฒเซเชก เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ-เชตเซ‡เชฌ-เชเชช-เชฐเชจเชŸเชพเช‡เชฎ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡ เช–เซ‚เชฌ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชฐเซ€เชคเซ‡ เชถเชฐเซ‚ เชฅเชพเชฏ เช›เซ‡.

1 เชฒเซ‡เชฌเชฒเชตเชพเชณเซ€ เชฒเชพเช‡เชจ เช•เช‚เชˆ เชจเชตเซ€ เชจเชฅเซ€ - เชคเซ‡ เชซเช•เซเชค เช•เชนเซ‡ เช›เซ‡ เช•เซ‡ เชฌเชฟเชฒเซเชก เชชเชฐเชฟเชฃเชพเชฎ เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ-เชตเซ‡เชฌ-เชเชช-เชฐเชจเชŸเชพเช‡เชฎ เชˆเชฎเซ‡เชœเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เช…เช—เชพเช‰เชจเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ€ เชœเซ‡เชฎ 2 เชฒเซ‡เชฌเชฒเชตเชพเชณเซ€ เชฒเชพเช‡เชจ เชธเซ‚เชšเชตเซ‡ เช›เซ‡ เช•เซ‡ เชธเซเชฐเซ‹เชค เช•เซ‹เชก เช•เซเชฏเชพเช‚เชฅเซ€ เชฎเซ‡เชณเชตเชตเซ‹. เชชเชฐเช‚เชคเซ เชจเซ‹เช‚เชง เชฒเซ‹ เช•เซ‡ เช…เชนเซ€เช‚ เช…เชฎเซ‡ เช•เชนเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช เช•เซ‡ เชคเซ‡ เช›เชฌเซ€ เชชเชฐเชฅเซ€ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡. เชตเชงเซเชฎเชพเช‚, เช…เชฎเซ‡ เชนเชฎเชฃเชพเช‚ เชœ เชฌเชจเชพเชตเซ‡เชฒ เชˆเชฎเซ‡เชœเชฎเชพเช‚เชฅเซ€ - เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ-เชตเซ‡เชฌ-เชเชช-เชฌเชฟเชฒเซเชกเชฐ (3 เชฒเซ‡เชฌเชฒเชตเชพเชณเซ€ เชฒเซ€เชŸเซ€เชฎเชพเช‚ เชฆเชฐเซเชถเชพเชตเซ‡เชฒ). เช…เชฎเซ‡ เชœเซ‡ เชซเชพเชˆเชฒเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช เชคเซ‡ เชˆเชฎเซ‡เชœเชจเซ€ เช…เช‚เชฆเชฐ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซเช‚ เชธเซเชฅเชพเชจ 4 เชฒเซ‡เชฌเชฒเชตเชพเชณเซ€ เชฒเชพเชˆเชจเชฎเชพเช‚ เชธเซ‡เชŸ เช›เซ‡, เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชคเซ‡ /opt/app-root/output/ เช›เซ‡. เชœเซ‹ เชคเชฎเชจเซ‡ เชฏเชพเชฆ เชนเซ‹เชฏ, เชคเซ‹ เช† เชคเซ‡ เช›เซ‡ เชœเซเชฏเชพเช‚ เช…เชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเชพ เช†เชงเชพเชฐเซ‡ เชœเชจเชฐเซ‡เชŸ เชฅเชฏเซ‡เชฒ เชซเชพเช‡เชฒเซ‹ เชธเช‚เช—เซเชฐเชนเชฟเชค เชฅเชพเชฏ เช›เซ‡.

เชฒเซ‡เชฌเชฒ 5 เชธเชพเชฅเซ‡ เชถเชฌเซเชฆเชฎเชพเช‚ เชจเชฟเชฐเซเชฆเชฟเชทเซเชŸ เช•เชฐเซ‡เชฒ เช—เช‚เชคเชตเซเชฏ เชซเซ‹เชฒเซเชกเชฐ เชซเช•เซเชค เชตเชฐเซเชคเชฎเชพเชจ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€ เช›เซ‡ (เช† เชฌเชงเซเช‚ เช›เซ‡, เชฏเชพเชฆ เชฐเชพเช–เซ‹, เช“เชชเชจเชถเชฟเชซเซเชŸ เชจเชพเชฎเชจเซ€ เชœเชพเชฆเซเชˆ เชตเชธเซเชคเซเชจเซ€ เช…เช‚เชฆเชฐ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡, เช…เชจเซ‡ เชคเชฎเชพเชฐเชพ เชธเซเชฅเชพเชจเชฟเช• เช•เชฎเซเชชเซเชฏเซเชŸเชฐ เชชเชฐ เชจเชนเซ€เช‚).

เชตเซเชฏเซ‚เชนเชฐเชšเชจเชพ เชตเชฟเชญเชพเช— - เชฒเชพเช‡เชจ เชฒเซ‡เชฌเชฒ 6 - เชชเชฃ เชชเซเชฐเชฅเชฎ เชฌเชฟเชฒเซเชก เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเชฎเชพเชจ เช›เซ‡. เชฎเชพเชคเซเชฐ เช† เชตเช–เชคเซ‡ เช†เชชเชฃเซ‡ nginx-image-runtime เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชœเชˆ เชฐเชนเซเชฏเชพ เช›เซ€เช, เชœเซ‡ เช†เชชเชฃเซ‡ เชˆเชฎเซ‡เชœเชธเซเชŸเซเชฐเซ€เชฎ เชตเชฟเชญเชพเช—เชฎเชพเช‚ เชœเซ‹เชˆ เชšเซ‚เช•เซเชฏเชพ เช›เซ€เช.

เช›เซ‡เชฒเซเชฒเซ‡, 7 เชฒเซ‡เชฌเชฒเชตเชพเชณเซ€ เชฒเชพเช‡เชจ เช เชŸเซเชฐเชฟเช—เชฐเซเชธเชจเซ‹ เชเช• เชตเชฟเชญเชพเช— เช›เซ‡ เชœเซ‡ เชฆเชฐ เชตเช–เชคเซ‡ เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ-เชตเซ‡เชฌ-เชเชช-เชฌเชฟเชฒเซเชกเชฐ เช‡เชฎเซ‡เชœ เชฌเชฆเชฒเชพเชฏ เชคเซเชฏเชพเชฐเซ‡ เช† เชฌเชฟเชฒเซเชกเชจเซ‡ เชธเช•เซเชฐเชฟเชฏ เช•เชฐเชถเซ‡.

เชจเชนเชฟเช‚เชคเชฐ, เช† เชŸเซ‡เชฎเซเชชเชฒเซ‡เชŸเชฎเชพเช‚ เชธเซเช‚เชฆเชฐ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชœเชฎเชพเชตเชŸ เช—เซ‹เช เชตเชฃเซ€, เชคเซ‡เชฎเชœ เชธเซ‡เชตเชพเช“ เช…เชจเซ‡ เชฎเชพเชฐเซเช—เซ‹ เชธเชพเชฅเซ‡ เชธเช‚เชฌเช‚เชงเชฟเชค เชตเชธเซเชคเซเช“ เช›เซ‡, เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เชคเซ‡ เชตเชงเซ เชตเชฟเช—เชคเชฎเชพเช‚ เชœเชˆเชถเซเช‚ เชจเชนเซ€เช‚. เชฎเชนเซ‡เชฐเชฌเชพเชจเซ€ เช•เชฐเซ€เชจเซ‡ เชจเซ‹เช‚เชง เช•เชฐเซ‹ เช•เซ‡ เชœเซ‡ เช‡เชฎเซ‡เชœ เชœเชฎเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เชคเซ‡ เชฐเชฟเชเช•เซเชŸ-เชตเซ‡เชฌ-เชเชช-เชฐเชจเชŸเชพเช‡เชฎ เช‡เชฎเซ‡เชœ เช›เซ‡.

เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชœเชฎเชพเชตเชŸ

เชคเซ‹ เชนเชตเซ‡ เช…เชฎเซ‡ เชŸเซ‡เชฎเซเชชเซเชฒเซ‡เชŸ เชœเซ‹เชˆ เชฒเซ€เชงเซเช‚ เช›เซ‡, เชšเชพเชฒเซ‹ เชœเซ‹เชˆเช เช•เซ‡ เชเชชเซเชฒเซ€เช•เซ‡เชถเชจ เชœเชฎเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเซ‹.

เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ เชจเชฎเซ‚เชจเชพเชจเซ‡ เชœเชฎเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ oc เชจเชพเชฎเชจเชพ OpenShift เช•เซเชฒเชพเชฏเช‚เชŸ เชŸเซ‚เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช:

$ find . | grep openshiftio | grep application | xargs -n 1 oc apply -f

$ oc new-app --template react-web-app -p SOURCE_REPOSITORY_URL=https://github.com/lholmquist/react-web-app

เช‰เชชเชฐเชจเชพ เชธเซเช•เซเชฐเซ€เชจเชถเซ‹เชŸเชฎเชพเช‚เชจเซ‹ เชชเซเชฐเชฅเชฎ เช†เชฆเซ‡เชถ เชŸเซ‡เชฎเซเชชเชฒเซ‡เชŸ./openshiftio/application.yaml เชถเซ‹เชงเชตเชพเชจเซ€ เช‡เชฐเชพเชฆเชพเชชเซ‚เชฐเซเชตเช•เชจเซ€ เชเชจเซเชœเชฟเชจเชฟเชฏเชฐเชฟเช‚เช— เชฐเซ€เชค เช›เซ‡.

เชฌเซ€เชœเซ‹ เช†เชฆเซ‡เชถ เชซเช•เซเชค เช† เชจเชฎเซ‚เชจเชพเชจเชพ เช†เชงเชพเชฐเซ‡ เชจเชตเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเซ‡ เช›เซ‡.

เช† เช†เชฆเซ‡เชถเซ‹ เช•เชพเชฎ เช•เชฐเซเชฏเชพ เชชเช›เซ€, เช†เชชเชฃเซ‡ เชœเซ‹เชˆเชถเซเช‚ เช•เซ‡ เช†เชชเชฃเซ€ เชชเชพเชธเซ‡ เชฌเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เช›เซ‡:

เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชฐ เช†เชงเซเชจเชฟเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ, เชญเชพเช— 2: เชธเชพเช‚เช•เชณเซ‹ เชฌเชฟเชฒเซเชกเซเชธ

เช…เชจเซ‡ เช“เชตเชฐเชตเซเชฏเซ เชธเซเช•เซเชฐเซ€เชจ เชชเชฐ เชชเชพเช›เชพ เชซเชฐเซ€เชจเซ‡, เช…เชฎเซ‡ เชฒเซ‹เชจเซเชš เช•เชฐเซ‡เชฒ เชชเซ‹เชก เชœเซ‹เชถเซเช‚:

เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชฐ เช†เชงเซเชจเชฟเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ, เชญเชพเช— 2: เชธเชพเช‚เช•เชณเซ‹ เชฌเชฟเชฒเซเชกเซเชธ

เชฒเชฟเช‚เช• เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹ เช…เชจเซ‡ เช…เชฎเชจเซ‡ เช…เชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชชเชฐ เชฒเชˆ เชœเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เชœเซ‡ เชกเชฟเชซเซ‹เชฒเซเชŸ เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชชเซƒเชทเซเช  เช›เซ‡:

เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเชฐ เช†เชงเซเชจเชฟเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ, เชญเชพเช— 2: เชธเชพเช‚เช•เชณเซ‹ เชฌเชฟเชฒเซเชกเซเชธ

เชชเซ‚เชฐเช• 1

เช•เซ‹เชฃเซ€เชฏ เชชเซเชฐเซ‡เชฎเซ€เช“ เชฎเชพเชŸเซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชชเชฃ เช›เซ‡ เช‰เชฆเชพเชนเชฐเชฃ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ.

OUTPUT_DIR เชตเซ‡เชฐเซ€เชเชฌเชฒ เชธเชฟเชตเชพเชฏ เช…เชนเซ€เช‚เชจเซ€ เชชเซ‡เชŸเชฐเซเชจ เชธเชฎเชพเชจ เช›เซ‡.

เชชเซ‚เชฐเช• 2

เช† เชฒเซ‡เช–เชฎเชพเช‚ เช…เชฎเซ‡ เชตเซ‡เชฌ เชธเชฐเซเชตเชฐ เชคเชฐเซ€เช•เซ‡ NGINX เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡เชจเซ‡ Apache เชธเชพเชฅเซ‡ เชฌเชฆเชฒเชตเซเช‚ เชเช•เชฆเชฎ เชธเชฐเชณ เช›เซ‡, เชซเช•เซเชค เชซเชพเช‡เชฒเชฎเชพเช‚ เชŸเซ‡เชฎเซเชชเชฒเซ‡เชŸ เชฌเชฆเชฒเซ‹. NGINX เช›เชฌเซ€ เชชเชฐ เช…เชชเชพเชšเซ‡ เช›เชฌเซ€.

เชจเชฟเชทเซเช•เชฐเซเชท

เช† เชถเซเชฐเซ‡เชฃเซ€เชจเชพ เชชเชนเซ‡เชฒเชพ เชญเชพเช—เชฎเชพเช‚, เช…เชฎเซ‡ OpenShift เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชชเชฐ เช†เชงเซเชจเชฟเช• เชตเซ‡เชฌ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชเชกเชชเชฅเซ€ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชœเชฎเชพเชตเชตเซ€ เชคเซ‡ เชฌเชคเชพเชตเซเชฏเซเช‚. เช†เชœเซ‡ เช†เชชเชฃเซ‡ เชœเซ‹เชฏเซเช‚ เช•เซ‡ เชตเซ‡เชฌ เชเชช เชˆเชฎเซ‡เชœ เชถเซเช‚ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชตเชงเซ เชชเซเชฐเซ‹เชกเช•เซเชถเชจ-เชฐเซ‡เชกเซ€ เชเชชเซเชฒเซ€เช•เซ‡เชถเชจ เชฌเชฟเชฒเซเชก เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชšเซ‡เชˆเชจ เชฌเชฟเชฒเซเชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ NGINX เชœเซ‡เชตเชพ เชถเซเชฆเซเชง เชตเซ‡เชฌ เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชœเซ‹เชกเซ€ เชถเช•เชพเชฏ เช›เซ‡. เช† เชถเซเชฐเซ‡เชฃเซ€เชจเชพ เช†เช—เชฒเชพ เช…เชจเซ‡ เช…เช‚เชคเชฟเชฎ เชฒเซ‡เช–เชฎเชพเช‚, เช…เชฎเซ‡ OpenShift เชชเชฐ เชคเชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชกเซ‡เชตเชฒเชชเชฎเซ‡เชจเซเชŸ เชธเชฐเซเชตเชฐ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชšเชฒเชพเชตเชตเซเช‚ เช…เชจเซ‡ เชธเซเชฅเชพเชจเชฟเช• เช…เชจเซ‡ เชฐเชฟเชฎเซ‹เชŸ เชซเชพเช‡เชฒเซ‹เชจเซเช‚ เชธเชฟเช‚เช•เซเชฐเชจเชพเช‡เชเซ‡เชถเชจ เชธเซเชจเชฟเชถเซเชšเชฟเชค เช•เชฐเซ€เชถเซเช‚ เชคเซ‡ เชฌเชคเชพเชตเซ€เชถเซเช‚.

เชฒเซ‡เช–เซ‹เชจเซ€ เช† เชถเซเชฐเซ‡เชฃเซ€เชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€

  • เชญเชพเช— 1: เช†เชงเซเชจเชฟเช• เชตเซ‡เชฌ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชฎเชพเชคเซเชฐ เชฅเซ‹เชกเชพ เชชเช—เชฒเชพเชฎเชพเช‚ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชœเชฎเชพเชตเชตเชพ;
  • เชญเชพเช— 2: เชนเชพเชฒเชจเซ€ HTTP เชธเชฐเซเชตเชฐ เชˆเชฎเซ‡เชœ เชธเชพเชฅเซ‡ เชจเชตเซ€ S2I เชˆเชฎเซ‡เชœเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเซ‹, เชœเซ‡เชฎ เช•เซ‡ NGINX, เชชเซเชฐเซ‹เชกเช•เซเชถเชจ เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸ เชฎเชพเชŸเซ‡ เชธเช‚เช•เชณเชพเชฏเซ‡เชฒ เช“เชชเชจเชถเชฟเชซเซเชŸ เชเชธเซ‡เชฎเซเชฌเชฒเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡;
  • เชญเชพเช— 3: เช“เชชเชจเชถเชฟเชซเซเชŸ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชชเชฐ เชคเชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชกเซ‡เชตเชฒเชชเชฎเซ‡เชจเซเชŸ เชธเชฐเซเชตเชฐ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชšเชฒเชพเชตเชตเซเช‚ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชธเซเชฅเชพเชจเชฟเช• เชซเชพเช‡เชฒ เชธเชฟเชธเซเชŸเชฎ เชธเชพเชฅเซ‡ เชธเชฟเช‚เช•เซเชฐเชจเชพเช‡เช เช•เชฐเชตเซเช‚.

เชตเชงเชพเชฐเชพเชจเชพ เชธเช‚เชธเชพเชงเชจเซ‹

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹