CI/CD เชธเชพเช‚เช•เชณ เชฌเชจเชพเชตเชตเซ€ เช…เชจเซ‡ เชกเซ‹เช•เชฐ เชธเชพเชฅเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เช•เชพเชฐเซเชฏ

เชฎเซ‡เช‚ เชฎเชพเชฐเซ€ เชชเซเชฐเชฅเชฎ เชตเซ‡เชฌเชธเชพเช‡เชŸเซเชธ 90 เชจเชพ เชฆเชพเชฏเช•เชพเชจเชพ เช…เช‚เชคเชฎเชพเช‚ เชฒเช–เซ€ เชนเชคเซ€. เชคเซ‡ เชธเชฎเชฏเซ‡ เชคเซ‡เชฎเชจเซ‡ เช•เชพเชฐเซเชฏเช•เชพเชฐเซ€ เช•เซเชฐเชฎเชฎเชพเช‚ เชฎเซ‚เช•เชตเซเช‚ เช–เซ‚เชฌ เชœ เชธเชฐเชณ เชนเชคเซเช‚. เช•เซ‡เชŸเชฒเชพเช• เชถเซ‡เชฐ เช•เชฐเซ‡เชฒ เชนเซ‹เชธเซเชŸเชฟเช‚เช— เชชเชฐ เช…เชชเชพเชšเซ‡ เชธเชฐเซเชตเชฐ เชนเชคเซเช‚, เชคเชฎเซ‡ FTP เชฆเซเชตเชพเชฐเชพ เช† เชธเชฐเซเชตเชฐ เชชเชฐ เช•เช‚เชˆเช• เชฒเช–เซ€เชจเซ‡ เชฒเซ‹เช— เช‡เชจ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ ftp://ftp.example.com. เชชเช›เซ€ เชคเชฎเชพเชฐเซ‡ เชคเชฎเชพเชฐเซเช‚ เชจเชพเชฎ เช…เชจเซ‡ เชชเชพเชธเชตเชฐเซเชก เชฆเชพเช–เชฒ เช•เชฐเชตเซ‹ เชชเชกเชถเซ‡ เช…เชจเซ‡ เชซเชพเช‡เชฒเซ‹เชจเซ‡ เชธเชฐเซเชตเชฐ เชชเชฐ เช…เชชเชฒเซ‹เชก เช•เชฐเชตเซ€ เชชเชกเชถเซ‡. เชคเซเชฏเชพเช‚ เชœเซเชฆเชพ เชœเซเชฆเชพ เชธเชฎเชฏ เชนเชคเชพ, เชฌเชงเซเช‚ เชนเชตเซ‡ เช•เชฐเชคเชพเช‚ เชคเซ‡ เชธเชฎเชฏเซ‡ เชธเชฐเชณ เชนเชคเซเช‚.

CI/CD เชธเชพเช‚เช•เชณ เชฌเชจเชพเชตเชตเซ€ เช…เชจเซ‡ เชกเซ‹เช•เชฐ เชธเชพเชฅเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เช•เชพเชฐเซเชฏ

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

เชฎเชพเชฐเชพ เช…เช‚เช—เชค เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช–เชพเชธ เช—เซ‹เช เชตเชฃเซ€ เชนเชคเซ€. เช…เชจเซ‡ เชนเซเช‚ เชœเชพเชฃเชคเซ‹ เชนเชคเซ‹ เช•เซ‡ เชฎเชพเชฐเซ‡ เชฎเชพเชคเซเชฐ เชเช• เช•เซเชฐเชฟเชฏเชพ เช•เชฐเซ€เชจเซ‡ เชธเชพเชˆเชŸเชจเซ‡ เชชเซเชฐเซ‹เชกเช•เซเชถเชจเชฎเชพเช‚ เชœเชฎเชพเชตเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡: เชถเชพเช–เชพเชฎเชพเช‚ เช•เซ‹เชก เชฒเช–เชตเชพ master GitHub เชชเชฐ. เชตเชงเซเชฎเชพเช‚, เชนเซเช‚ เชœเชพเชฃเชคเซ‹ เชนเชคเซ‹ เช•เซ‡ เชฎเชพเชฐเซ€ เชจเชพเชจเซ€ เชตเซ‡เชฌ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเชพ เชธเช‚เชšเชพเชฒเชจเชจเซ‡ เชธเซเชจเชฟเชถเซเชšเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชนเซเช‚ เชตเชฟเชถเชพเชณ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เช•เซเชฒเชธเซเชŸเชฐเชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เช•เชฐเชตเชพ, เช…เชฅเชตเชพ เชกเซ‹เช•เชฐ เชธเซเชตเซ‹เชฐเซเชฎ เชŸเซ‡เช•เซเชจเซ‹เชฒเซ‹เชœเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ, เช…เชฅเชตเชพ เชชเซ‹เชกเซเชธ, เชเชœเชจเซเชŸเซ‹ เช…เชจเซ‡ เช…เชจเซเชฏ เชคเชฎเชพเชฎ เชชเซเชฐเช•เชพเชฐเชจเชพ เชธเชฐเซเชตเชฐเซเชธเชจเซ‹ เช•เชพเชซเชฒเซ‹ เชœเชพเชณเชตเชตเชพ เชฎเชพเช‚เช—เชคเซ‹ เชจเชฅเซ€. เชœเชŸเชฟเชฒเชคเชพเช“ เช•เชพเชฐเซเชฏเชจเซ‡ เชถเช•เซเชฏ เชคเซ‡เชŸเชฒเซเช‚ เชธเชฐเชณ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เชฒเช•เซเชทเซเชฏ เชนเชพเช‚เชธเชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชฎเชพเชฐเซ‡ CI/CD เชธเชพเชฅเซ‡ เชชเชฐเชฟเชšเชฟเชค เชฅเชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เชนเชคเซเช‚.

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

เชชเซ‚เชฐเซเชตเชœเชฐเซ‚เชฐเซ€เชฏเชพเชคเซ‹

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

เช‰เชฆเซเชฆเซ‡เชถเซ‹

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

เช† เชœ เชฎเชพเชฐเชพ เชตเชฐเซเช•เชซเซเชฒเซ‹เชจเซ‹ เช…เช‚เชค เช†เชตเซเชฏเซ‹.

เชธเชฟเชตเชพเชฏ เช•เซ‹เชˆเชชเชฃ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชถเชพเช–เชพเชฎเชพเช‚ เชชเซ‹เชธเซเชŸ เช•เชฐเชพเชฏเซ‡เชฒ เช•เซ‹เชก เชฎเชพเชŸเซ‡ master, เชจเซ€เชšเซ‡เชจเซ€ เช•เซเชฐเชฟเชฏเชพเช“ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡:

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

เชฎเชพเชคเซเชฐ เช•เซ‹เชก เชฎเชพเชŸเซ‡ เช•เซ‡ เชœเซ‡ เชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ master, เชจเซ€เชšเซ‡ เชฎเซเชœเชฌ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡:

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

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

CI/CD เชถเซเช‚ เช›เซ‡?

เชธเช‚เช•เซเชทเชฟเชชเซเชค CI/CD เชจเซ‹ เช…เชฐเซเชฅ "เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ/เชธเชคเชค เชœเชฎเชพเชตเชŸ" เช›เซ‡.

โ–เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ

เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ เช เชเชตเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเชพ เชฎเซเช–เซเชฏ เชธเซเชคเซเชฐเซ‹เชค เช•เซ‹เชก เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€ (เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชเช• เชถเชพเช–เชพ) เชฎเชพเชŸเซ‡ เช•เชฎเชฟเชŸ เช•เชฐเซ‡ เช›เซ‡ master). เชคเซ‡ เชœ เชธเชฎเชฏเซ‡, เช•เซ‹เชกเชจเซ€ เช—เซเชฃเชตเชคเซเชคเชพ เชธเซเชตเชšเชพเชฒเชฟเชค เชชเชฐเซ€เช•เซเชทเชฃ เชฆเซเชตเชพเชฐเชพ เชธเซเชจเชฟเชถเซเชšเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

โ–เชธเชคเชค เชœเชฎเชพเชตเชŸ

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

เชชเซเชฐเชพเชฐเช‚เชญ

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

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

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

Docker

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

เชกเซ‹เช•เชฐ เชนเชฌ เชฒเช—เชญเช— เชธเชฎเชพเชจ เชตเชธเซเชคเซ เช›เซ‡ GitHub git เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เช เช…เชฅเชตเชพ เชฐเชœเซ€เชธเซเชŸเซเชฐเซ€ เชฎเชพเชŸเซ‡ npm JavaScript เชชเซ‡เช•เซ‡เชœเซ‹ เชฎเชพเชŸเซ‡. เช† เชกเซ‹เช•เชฐ เชˆเชฎเซ‡เชœเซ€เชธ เชฎเชพเชŸเซ‡ เช“เชจเชฒเชพเชˆเชจ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เช›เซ‡. เช† เชคเซ‡ เช›เซ‡ เชœเซ‡ เชกเซ‹เช•เชฐ เชกเซ‡เชธเซเช•เชŸเซ‹เชช เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏ เช›เซ‡.

เชคเซ‡เชฅเซ€, เชกเซ‹เช•เชฐ เชธเชพเชฅเซ‡ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชฌเซ‡ เชตเชธเซเชคเซเช“ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:

เช† เชชเช›เซ€, เชคเชฎเซ‡ เชกเซ‹เช•เชฐ เชธเช‚เชธเซเช•เชฐเชฃเชจเซ‡ เชคเชชเชพเชธเชตเชพ เชฎเชพเชŸเซ‡ เชจเซ€เชšเซ‡เชจเชพ เช†เชฆเซ‡เชถเชจเซ‡ เชšเชฒเชพเชตเซ€เชจเซ‡ เชกเซ‹เช•เชฐ CLI เช•เชพเชฎ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ เช•เซ‡ เช•เซ‡เชฎ เชคเซ‡ เชคเชชเชพเชธเซ€ เชถเช•เซ‹ เช›เซ‹:

docker -v

เช†เช—เชณ, เชœเซเชฏเชพเชฐเซ‡ เชชเซ‚เช›เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡ เชคเชฎเชพเชฐเซเช‚ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชจเชพเชฎ เช…เชจเซ‡ เชชเชพเชธเชตเชฐเซเชก เชฆเชพเช–เชฒ เช•เชฐเซ€เชจเซ‡ เชกเซ‹เช•เชฐ เชนเชฌเชฎเชพเช‚ เชฒเซ‰เช— เช‡เชจ เช•เชฐเซ‹:

docker login

เชกเซ‹เช•เชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เช‡เชฎเซ‡เชœ เช…เชจเซ‡ เช•เชจเซเชŸเซ‡เชจเชฐเชจเซ€ เชตเชฟเชญเชพเชตเชจเชพเช“เชจเซ‡ เชธเชฎเชœเชตเซ€ เช†เชตเชถเซเชฏเช• เช›เซ‡.

โ–เชšเชฟเชคเซเชฐเซ‹

เช›เชฌเซ€ เช เชฌเซเชฒเซเชชเซเชฐเชฟเชจเซเชŸ เชœเซ‡เชตเซเช‚ เช•เช‚เชˆเช• เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เช•เชจเซเชŸเซ‡เชจเชฐเชจเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชธเซ‚เชšเชจเชพเช“ เชถเชพเชฎเซ‡เชฒ เช›เซ‡. เช† เชเชชเซเชฒเซ€เช•เซ‡เชถเชจเชจเซ€ เชซเชพเช‡เชฒ เชธเชฟเชธเซเชŸเชฎ เช…เชจเซ‡ เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชจเซ‹ เช…เชชเชฐเชฟเชตเชฐเซเชคเชจเชถเซ€เชฒ เชธเซเชจเซ‡เชชเชถเซ‹เชŸ เช›เซ‡. เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“ เชธเชฐเชณเชคเชพเชฅเซ€ เช›เชฌเซ€เช“ เชถเซ‡เชฐ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡.

# ะ’ั‹ะฒะพะด ัะฒะตะดะตะฝะธะน ะพะฑะพ ะฒัะตั… ะพะฑั€ะฐะทะฐั…
docker images

เช† เช†เชฆเซ‡เชถ เชจเซ€เชšเซ‡เชจเชพ เชนเซ‡เชกเชฐ เชธเชพเชฅเซ‡ เช•เซ‹เชทเซเชŸเช•เชจเซเช‚ เช†เช‰เชŸเชชเซเชŸ เช•เชฐเชถเซ‡:

REPOSITORY     TAG     IMAGE ID     CREATED     SIZE
---

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

โ– เช•เชจเซเชŸเซ‡เชจเชฐ

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

# ะŸะตั€ะตั‡ะธัะปะตะฝะธะต ะฒัะตั… ะบะพะฝั‚ะตะนะฝะตั€ะพะฒ
docker ps -a
CONTAINER ID     IMAGE     COMMAND     CREATED     STATUS     PORTS     NAMES
---

โ–เชŸเซ‡เช—เซเชธ

เชŸเซ‡เช— เช เช‡เชฎเซ‡เชœเชจเชพ เชšเซ‹เช•เซเช•เชธ เชตเชฐเซเชเชจเชจเซ‹ เชธเช‚เช•เซ‡เชค เช›เซ‡.

โ–เชกเซ‹เช•เชฐ เช†เชฆเซ‡เชถเซ‹เชจเซ‹ เชเชกเชชเซ€ เชธเช‚เชฆเชฐเซเชญ

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

เชŸเซ€เชฎ

เชธเช‚เชฆเชฐเซเชญ

เช…เชธเชฐ

เชกเซ‹เช•เชฐ เชฌเชฟเชฒเซเชก

เช›เชฌเซ€

เชกเซ‹เช•เชฐเชซเชพเช‡เชฒเชฎเชพเช‚เชฅเซ€ เช›เชฌเซ€ เชฌเชจเชพเชตเชตเซ€

เชกเซ‹เช•เชฐ เชŸเซ‡เช—

เช›เชฌเซ€

เช›เชฌเซ€ เชŸเซ‡เช—เซ€เช‚เช—

เชกเซ‹เช•เชฐ เช›เชฌเซ€เช“

เช›เชฌเซ€

เชธเซ‚เชšเชฟ เช›เชฌเซ€เช“

เชกเซ‹เช•เชฐ เชฐเชจ

เช•เชจเซเชŸเซ‡เชจเชฐ

เช›เชฌเซ€เชจเชพ เช†เชงเชพเชฐเซ‡ เช•เชจเซเชŸเซ‡เชจเชฐ เชšเชฒเชพเชตเชตเซเช‚

เชกเซ‹เช•เชฐ เชฆเชฌเชพเชฃ

เช›เชฌเซ€

เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€ เชชเชฐ เชเช• เช›เชฌเซ€ เช…เชชเชฒเซ‹เชก เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เชกเซ‹เช•เชฐ เช–เซ‡เช‚เชšเซ‹

เช›เชฌเซ€

เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€เชฎเชพเช‚เชฅเซ€ เชเช• เช›เชฌเซ€ เชฒเซ‹เชก เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เชกเซ‹เช•เชฐ เชชเซ€

เช•เชจเซเชŸเซ‡เชจเชฐ

เชฒเชฟเชธเซเชŸเชฟเช‚เช— เช•เชจเซเชŸเซ‡เชจเชฐ

เชกเซ‹เช•เชฐ เชธเชฟเชธเซเชŸเชฎ เช•เชพเชชเชฃเซ€

เช›เชฌเซ€/เช•เชจเซเชŸเซ‡เชจเชฐ

เชจ เชตเชชเชฐเชพเชฏเซ‡เชฒ เช•เชจเซเชŸเซ‡เชจเชฐ เช…เชจเซ‡ เช›เชฌเซ€เช“ เชฆเซ‚เชฐ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

โ–เชกเซ‹เช•เชฐเชซเชพเชˆเชฒ

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

npm i         # ัƒัั‚ะฐะฝะพะฒะบะฐ ะทะฐะฒะธัะธะผะพัั‚ะตะน
npm run build # ัะฑะพั€ะบะฐ React-ะฟั€ะธะปะพะถะตะฝะธั
npm run start # ะทะฐะฟัƒัะบ Node-ัะตั€ะฒะตั€ะฐ

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

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

เชชเชฐเช‚เชคเซ เชคเซ‡ เชœเซ‡ เชธเชฎเชพเชตเซ‡ เช›เซ‡ เชคเซ‡ เชซเช•เซเชค เชตเชฟเชถเชฟเชทเซเชŸ เช†เชฆเซ‡เชถเซ‹ เชธเชพเชฅเซ‡, เช•เชพเชฐเซเชฏเช•เชพเชฐเซ€ เชตเชพเชคเชพเชตเชฐเชฃเชจเซ‡ เชธเซ‡เชŸ เช•เชฐเชตเชพ เชœเซ‡เชตเซเช‚ เชœ เชตเชฐเซเชฃเชตเซ‡ เช›เซ‡. เช…เชนเซ€เช‚ เช†เชฎเชพเช‚เชจเชพ เช•เซ‡เชŸเชฒเชพเช• เช†เชฆเซ‡เชถเซ‹ เช›เซ‡:

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

Dockerfile เช†เชจเชพ เชœเซ‡เชตเซเช‚ เช•เช‚เชˆเช• เชฆเซ‡เช–เชพเชˆ เชถเช•เซ‡ เช›เซ‡:

# ะ—ะฐะณั€ัƒะทะธั‚ัŒ ะฑะฐะทะพะฒั‹ะน ะพะฑั€ะฐะท
FROM node:12-alpine

# ะกะบะพะฟะธั€ะพะฒะฐั‚ัŒ ั„ะฐะนะปั‹ ะธะท ั‚ะตะบัƒั‰ะตะน ะดะธั€ะตะบั‚ะพั€ะธะธ ะฒ ะดะธั€ะตะบั‚ะพั€ะธัŽ app/
COPY . app/

# ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ app/ ะฒ ั€ะพะปะธ ั€ะฐะฑะพั‡ะตะน ะดะธั€ะตะบั‚ะพั€ะธะธ
WORKDIR app/

# ะฃัั‚ะฐะฝะพะฒะธั‚ัŒ ะทะฐะฒะธัะธะผะพัั‚ะธ (ะบะพะผะฐะฝะดะฐ npm ci ะฟะพั…ะพะถะฐ npm i, ะฝะพ ะธัะฟะพะปัŒะทัƒะตั‚ัั ะดะปั ะฐะฒั‚ะพะผะฐั‚ะธะทะธั€ะพะฒะฐะฝะฝั‹ั… ัะฑะพั€ะพะบ)
RUN npm ci --only-production

# ะกะพะฑั€ะฐั‚ัŒ ะบะปะธะตะฝั‚ัะบะพะต React-ะฟั€ะธะปะพะถะตะฝะธะต ะดะปั ะฟั€ะพะดะฐะบัˆะฝะฐ
RUN npm run build

# ะŸั€ะพัะปัƒัˆะธะฒะฐั‚ัŒ ัƒะบะฐะทะฐะฝะฝั‹ะน ะฟะพั€ั‚
EXPOSE 5000

# ะ—ะฐะฟัƒัั‚ะธั‚ัŒ Node-ัะตั€ะฒะตั€
ENTRYPOINT npm run start

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

โ– เช•เชจเซเชŸเซ‡เชจเชฐ เชฌเชจเชพเชตเชตเซเช‚, เชŸเซ‡เช— เช•เชฐเชตเซเช‚ เช…เชจเซ‡ เชšเชฒเชพเชตเชตเซเช‚

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

โ–เชตเชฟเชงเชพเชจเชธเชญเชพ

เชชเซเชฐเชฅเชฎ เชคเชฎเชพเชฐเซ‡ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชเช• เช›เชฌเซ€, เชจเชพเชฎเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ€เชจเซ‡ เช…เชจเซ‡ เชตเซˆเช•เชฒเซเชชเชฟเช• เชฐเซ€เชคเซ‡, เชŸเซ‡เช— (เชœเซ‹ เชŸเซ‡เช— เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชจ เชนเซ‹เชฏ, เชคเซ‹ เชธเชฟเชธเซเชŸเชฎ เช†เชชเซ‹เช†เชช เชˆเชฎเซ‡เชœ เชชเชฐ เชŸเซ‡เช— เช…เชธเชพเช‡เชจ เช•เชฐเชถเซ‡. latest).

# ะกะฑะพั€ะบะฐ ะพะฑั€ะฐะทะฐ
docker build -t <image>:<tag> .

เช† เช†เชฆเซ‡เชถ เชšเชฒเชพเชตเซเชฏเชพ เชชเช›เซ€, เชคเชฎเซ‡ เชกเซ‹เช•เชฐเชจเซ‡ เชˆเชฎเซ‡เชœ เชฌเชจเชพเชตเชคเชพ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹.

Sending build context to Docker daemon   2.88MB
Step 1/9 : FROM node:12-alpine
 ---> ...ะฒั‹ะฟะพะปะฝะตะฝะธะต ัั‚ะฐะฟะพะฒ ัะฑะพั€ะบะธ...
Successfully built 123456789123
Successfully tagged <image>:<tag>

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

REPOSITORY          TAG               IMAGE ID            CREATED              SIZE
<image>             latest            123456789123        About a minute ago   x.xxGB

โ–เชฒเซ‹เชจเซเชš เช•เชฐเซ‹

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

# ะ—ะฐะฟัƒัะบ ั ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะตะผ ะปะพะบะฐะปัŒะฝะพะณะพ ะฟะพั€ั‚ะฐ 5000 ะธ ะฟะพั€ั‚ะฐ ะบะพะฝั‚ะตะนะฝะตั€ะฐ 5000
docker run -p 5000:5000 <image>:<tag>

เชนเชตเซ‡ เชœเซเชฏเชพเชฐเซ‡ เช•เชจเซเชŸเซ‡เชจเชฐ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡, เชคเชฎเซ‡ เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ docker ps เช† เช•เชจเซเชŸเซ‡เชจเชฐ เชตเชฟเชถเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชœเซ‹เชตเชพ เชฎเชพเชŸเซ‡ (เช…เชฅเชตเชพ เชคเชฎเซ‡ เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ docker ps -a, เชœเซ‡ เชคเชฎเชพเชฎ เช•เชจเซเชŸเซ‡เชจเชฐ เชตเชฟเชถเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเซ‡ เช›เซ‡, เชฎเชพเชคเซเชฐ เชšเชพเชฒเชคเชพ เชœ เชจเชนเซ€เช‚).

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                      PORTS                    NAMES
987654321234        <image>             "/bin/sh -c 'npm runโ€ฆ"   6 seconds ago        Up 6 seconds                0.0.0.0:5000->5000/tcp   stoic_darwin

เชœเซ‹ เชคเชฎเซ‡ เชนเชตเซ‡ เชธเชฐเชจเชพเชฎเชพ เชชเชฐ เชœเชพเช“ localhost:5000 โ€” เชคเชฎเซ‡ เชšเชพเชฒเซ€ เชฐเชนเซ‡เชฒ เชเชชเซเชฒเซ€เช•เซ‡เชถเชจเชจเซเช‚ เชชเซ‡เชœ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹ เชœเซ‡ เชชเซเชฐเซ‹เชกเช•เซเชถเชจ เชเชจเซเชตเชพเชฏเชฐเซเชจเชฎเซ‡เชจเซเชŸเชฎเชพเช‚ เชšเชพเชฒเซ€ เชฐเชนเซ‡เชฒ เชเชชเซเชฒเซ€เช•เซ‡เชถเชจเชจเชพ เชชเซ‡เชœ เชœเซ‡เชตเซเช‚ เชœ เชฆเซ‡เช–เชพเชฏ เช›เซ‡.

โ–เชŸเซ‡เช—เซ€เช‚เช— เช…เชจเซ‡ เชชเซเชฐเช•เชพเชถเชจ

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

เชนเชตเซ‡ เชคเชฎเซ‡ เชจเชตเชพ เชจเชพเชฎ เชธเชพเชฅเซ‡ เชˆเชฎเซ‡เชœ เชฌเชจเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เช†เชฆเซ‡เชถ เชšเชฒเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹ docker push เชคเซ‡เชจเซ‡ เชกเซ‹เช•เชฐ เชนเชฌ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เชฆเชฌเชพเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡.

docker build -t <username>/<repository>:<tag> .
docker tag <username>/<repository>:<tag> <username>/<repository>:latest
docker push <username>/<repository>:<tag>

# ะะฐ ะฟั€ะฐะบั‚ะธะบะต ัั‚ะพ ะผะพะถะตั‚ ะฒั‹ะณะปัะดะตั‚ัŒ, ะฝะฐะฟั€ะธะผะตั€, ั‚ะฐะบ:
docker build -t user/app:v1.0.0 .
docker tag user/app:v1.0.0 user/app:latest
docker push user/app:v1.0.0

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

เช†เช—เชพเชฎเซ€ เชชเช—เชฒเชพเช‚

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

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

เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เช…เชฎเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช เชŸเซเชฐเซ‡เชตเชฟเชธ เชธเซ€เช†เชˆ. เชธเชฐเซเชตเชฐ เชคเชฐเซ€เช•เซ‡ - เชกเซ€เชŸเซ€เช—เชฒ เชฎเชนเชพเชธเชพเช—เชฐ.

เช เชจเซ‹เช‚เชงเชตเซเช‚ เชœเซ‹เชˆเช เช•เซ‡ เช…เชนเซ€เช‚ เชคเชฎเซ‡ เชธเซ‡เชตเชพเช“เชจเชพ เช…เชจเซเชฏ เชธเช‚เชฏเซ‹เชœเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, Travis CI เชจเซ‡ เชฌเชฆเชฒเซ‡, เชคเชฎเซ‡ CircleCI เช…เชฅเชตเชพ Github Actions เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เช…เชจเซ‡ เชคเซ‡เชจเชพ เชฌเชฆเชฒเซ‡ DigitalOcean - AWS เช…เชฅเชตเชพ Linode.

เช…เชฎเซ‡ Travis CI เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚ เช›เซ‡, เช…เชจเซ‡ เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช† เชธเซ‡เชตเชพเชฎเชพเช‚ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช•เช‚เชˆเช• เช—เซ‹เช เชตเซ‡เชฒเซเช‚ เช›เซ‡. เชคเซ‡เชฅเซ€, เชนเชตเซ‡ เชนเซเช‚ เชคเซ‡เชจเซ‡ เช•เชพเชฎ เชฎเชพเชŸเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชคเซˆเชฏเชพเชฐ เช•เชฐเชตเซเช‚ เชคเซ‡ เชตเชฟเชถเซ‡ เชŸเซ‚เช‚เช•เชฎเชพเช‚ เชตเชพเชค เช•เชฐเซ€เชถ.

เชŸเซเชฐเซ‡เชตเชฟเชธ เชธเซ€เช†เชˆ

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

เชŸเซเชฐเซ‡เชตเชฟเชธ CI เชธเชพเชฅเซ‡ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชชเชฐ เชœเชพเช“ เชธเชพเช‡เชŸ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช…เชจเซ‡ เชเช•เชพเช‰เชจเซเชŸ เชฌเชจเชพเชตเซ‹. เชชเช›เซ€ เชŸเซเชฐเซ‡เชตเชฟเชธ CI เชจเซ‡ เชคเชฎเชพเชฐเชพ GitHub เชเช•เชพเช‰เชจเซเชŸ เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเซ‹. เชธเชฟเชธเซเชŸเชฎ เชธเซ‡เชŸ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เชคเชฎเชพเชฐเซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡ เช•เซ‡ เชœเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เชคเชฎเซ‡ เช•เชพเชฐเซเชฏเชจเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ‹ เช›เซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ€ เชเช•เซเชธเซ‡เชธ เชธเช•เซเชทเชฎ เช•เชฐเซ‹. (เชนเซเช‚ GitHub เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเช‚ เช›เซเช‚, เชชเชฐเช‚เชคเซ เชฎเชจเซ‡ เช–เชพเชคเชฐเซ€ เช›เซ‡ เช•เซ‡ เชŸเซเชฐเซ‡เชตเชฟเชธ CI BitBucket, เช…เชจเซ‡ GitLab เช…เชจเซ‡ เช…เชจเซเชฏ เชธเชฎเชพเชจ เชธเซ‡เชตเชพเช“ เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เชฅเชˆ เชถเช•เซ‡ เช›เซ‡).

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

โ–เชจเซ‹เช•เชฐเซ€ เชœเซ€เชตเชจ เชšเช•เซเชฐ

เชŸเซเชฐเซ‡เชตเชฟเชธ CI เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒ เช•เชนเซ‡เชตเชพเชฏ เช›เซ‡ .travis.yml เช…เชจเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฐเซ‚เชŸ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค, เช‡เชตเซ‡เชจเซเชŸเซเชธเชจเชพ เช–เซเชฏเชพเชฒเชจเซ‡ เชธเชฎเชฐเซเชฅเชจ เช†เชชเซ‡ เช›เซ‡ เชœเซ€เชตเชจ เชšเช•เซเชฐ เช•เชพเชฐเซเชฏเซ‹. เช† เช˜เชŸเชจเชพเช“ เชคเซ‡ เช•เซเชฐเชฎเชฎเชพเช‚ เชธเซ‚เชšเชฟเชฌเชฆเซเชง เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เชคเซ‡ เชฅเชพเชฏ เช›เซ‡:

  • apt addons
  • cache components
  • before_install
  • install
  • before_script
  • script
  • before_cache
  • after_success ะธะปะธ after_failure
  • before_deploy
  • deploy
  • after_deploy
  • after_script

โ–เชชเชฐเซ€เช•เซเชทเชฃ

เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเชˆเชฒเชฎเชพเช‚ เชนเซเช‚ เชธเซเชฅเชพเชจเชฟเช• เชŸเซเชฐเซ‡เชตเชฟเชธ เชธเซ€เช†เชˆ เชธเชฐเซเชตเชฐเชจเซ‡ เช—เซ‹เช เชตเชตเชพ เชœเชˆ เชฐเชนเซเชฏเซ‹ เช›เซเช‚. เชฎเซ‡เช‚ เชจเซ‹เชก 12 เชจเซ‡ เชญเชพเชทเชพ เชคเชฐเซ€เช•เซ‡ เชชเชธเช‚เชฆ เช•เชฐเซเชฏเซเช‚ เช…เชจเซ‡ เชธเชฟเชธเซเชŸเชฎเชจเซ‡ เชกเซ‹เช•เชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เชจเชฟเชฐเซเชญเชฐเชคเชพเชจเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชจเซเช‚ เช•เชนเซเชฏเซเช‚.

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

เชœเซ‹ เชคเชฎเซ‡ เช‡เชšเซเช›เซ‹ เช›เซ‹ เช•เซ‡ เชคเชฎเชพเชฐเซ€ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชŸเซ‡เชธเซเชŸ เช•เชตเชฐเซ‡เชœ เชฆเชฐเซเชถเชพเชตเชคเชพ เชฌเซ‡เชœ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเซ‡, เช…เชนเซ€เช‚ เช† เชฎเชพเชนเชฟเชคเซ€ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเชตเชพ เช…เชจเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเซ‡ Jest, Travis CI เช…เชจเซ‡ Coveralls เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชชเชฐ เชŸเซ‚เช‚เช•เซ€ เชธเซ‚เชšเชจเชพเช“ เชฎเซ‡เชณเชตเซ€ เชถเช•เซ‹ เช›เซ‹.

เชคเซ‹ เช…เชนเซ€เช‚ เชซเชพเช‡เชฒเชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€ เช›เซ‡ .travis.yml:

# ะฃัั‚ะฐะฝะพะฒะธั‚ัŒ ัะทั‹ะบ
language: node_js

# ะฃัั‚ะฐะฝะพะฒะธั‚ัŒ ะฒะตั€ัะธัŽ Node.js
node_js:
  - '12'

services:
  # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะบะพะผะฐะฝะดะฝัƒัŽ ัั‚ั€ะพะบัƒ Docker
  - docker

install:
  # ะฃัั‚ะฐะฝะพะฒะธั‚ัŒ ะทะฐะฒะธัะธะผะพัั‚ะธ ะดะปั ั‚ะตัั‚ะพะฒ
  - npm ci

before_script:
  # ะ—ะฐะฟัƒัั‚ะธั‚ัŒ ัะตั€ะฒะตั€ ะธ ะบะปะธะตะฝั‚ ะดะปั ั‚ะตัั‚ะพะฒ
  - npm run dev &

script:
  # ะ—ะฐะฟัƒัั‚ะธั‚ัŒ ั‚ะตัั‚ั‹
  - npm run test

เช† เชคเซ‡ เช›เซ‡ เชœเซเชฏเชพเช‚ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ€ เชคเชฎเชพเชฎ เชถเชพเช–เชพเช“ เชฎเชพเชŸเซ‡ เช…เชจเซ‡ เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€เช“ เชฎเชพเชŸเซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชคเซ€ เช•เซเชฐเชฟเชฏเชพเช“ เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ เช›เซ‡.

โ– เชœเชฎเชพเชตเชŸ

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

deploy:
  # ะกะพะฑั€ะฐั‚ัŒ Docker-ะบะพะฝั‚ะตะนะฝะตั€ ะธ ะพั‚ะฟั€ะฐะฒะธั‚ัŒ ะตะณะพ ะฝะฐ Docker Hub
  provider: script
  script: bash deploy.sh
  on:
    branch: master

เชœเชฎเชพเชตเชŸ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชฌเซ‡ เชธเชฎเชธเซเชฏเชพเช“ เชนเชฒ เช•เชฐเซ‡ เช›เซ‡:

  • CI เชŸเซ‚เชฒ (เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชŸเซเชฐเซ‡เชตเชฟเชธ CI) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช›เชฌเซ€เชจเซ‡ เชกเซ‹เช•เชฐ เชนเชฌ เชชเชฐ เชฌเชจเชพเชตเซ‹, เชŸเซ‡เช— เช•เชฐเซ‹ เช…เชจเซ‡ เชฎเซ‹เช•เชฒเซ‹.
  • เชธเชฐเซเชตเชฐ เชชเชฐ เช‡เชฎเซ‡เชœ เชฒเซ‹เชก เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡, เชœเซ‚เชจเชพ เช•เชจเซเชŸเซ‡เชจเชฐเชจเซ‡ เชฌเช‚เชง เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชเช• เชจเชตเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ (เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชธเชฐเซเชตเชฐ DigitalOcean เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชชเชฐ เชšเชพเชฒเซ‡ เช›เซ‡).

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

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

เช…เชนเซ€เช‚ เชธเซเช•เซเชฐเชฟเชชเซเชŸเชจเซ‹ เชชเซเชฐเชฅเชฎ เชญเชพเช— เช›เซ‡ deploy.sh.

#!/bin/sh
set -e # ะžัั‚ะฐะฝะพะฒะธั‚ัŒ ัะบั€ะธะฟั‚ ะฟั€ะธ ะฝะฐะปะธั‡ะธะธ ะพัˆะธะฑะพะบ

IMAGE="<username>/<repository>"                             # ะžะฑั€ะฐะท Docker
GIT_VERSION=$(git describe --always --abbrev --tags --long) # Git-ั…ััˆ ะธ ั‚ะตะณะธ

# ะกะฑะพั€ะบะฐ ะธ ั‚ะตะณะธั€ะพะฒะฐะฝะธะต ะพะฑั€ะฐะทะฐ
docker build -t ${IMAGE}:${GIT_VERSION} .
docker tag ${IMAGE}:${GIT_VERSION} ${IMAGE}:latest

# ะ’ั…ะพะด ะฒ Docker Hub ะธ ะฒั‹ะณั€ัƒะทะบะฐ ะพะฑั€ะฐะทะฐ
echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin
docker push ${IMAGE}:${GIT_VERSION}

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

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

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

  • เช†เชชเชฃเซ‡ เชนเชพเชฒเชฎเชพเช‚ เชœเซ‡ เช•เชจเซเชŸเซ‡เชจเชฐ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ เชคเซ‡ เชถเซ‹เชงเซ€เชจเซ‡ เชคเซ‡เชจเซ‡ เชฐเซ‹เช•เชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.
  • เชชเช›เซ€ เชคเชฎเชพเชฐเซ‡ เชชเซƒเชทเซเช เชญเซ‚เชฎเชฟเชฎเชพเช‚ เชเช• เชจเชตเซเช‚ เช•เชจเซเชŸเซ‡เชจเชฐ เชฒเซ‹เช‚เชš เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.
  • เชคเชฎเชพเชฐเซ‡ เชธเชฐเซเชตเชฐเชจเชพ เชธเซเชฅเชพเชจเชฟเช• เชชเซ‹เชฐเซเชŸเชจเซ‡ เชธเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡ 80 - เช† เชคเชฎเชจเซ‡ เชธเชฐเชจเชพเชฎเชพเช‚ เชชเชฐ เชธเชพเช‡เชŸ เชฆเชพเช–เชฒ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเชถเซ‡ example.com, เชชเซ‹เชฐเซเชŸ เชธเซเชชเชทเซเชŸ เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ, เชธเชฐเชจเชพเชฎเซเช‚ เชตเชพเชชเชฐเชตเชพเชจเซ‡ เชฌเชฆเชฒเซ‡ example.com:5000.
  • เช›เซ‡เชฒเซเชฒเซ‡, เชคเชฎเชพเชฐเซ‡ เชฌเชงเชพ เชœเซ‚เชจเชพ เช•เชจเซเชŸเซ‡เชจเชฐ เช…เชจเซ‡ เช›เชฌเซ€เช“ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เช…เชนเซ€เช‚ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชšเชพเชฒเซ เช›เซ‡.

# ะะฐะนั‚ะธ ID ั€ะฐะฑะพั‚ะฐัŽั‰ะตะณะพ ะบะพะฝั‚ะตะนะฝะตั€ะฐ
CONTAINER_ID=$(docker ps | grep takenote | cut -d" " -f1)

# ะžัั‚ะฐะฝะพะฒะธั‚ัŒ ัั‚ะฐั€ั‹ะน ะบะพะฝั‚ะตะนะฝะตั€, ะทะฐะฟัƒัั‚ะธั‚ัŒ ะฝะพะฒั‹ะน, ะพั‡ะธัั‚ะธั‚ัŒ ัะธัั‚ะตะผัƒ
docker stop ${CONTAINER_ID}
docker run --restart unless-stopped -d -p 80:5000 ${IMAGE}:${GIT_VERSION}
docker system prune -a -f

เชงเซเชฏเชพเชจ เชฐเชพเช–เชตเชพ เชœเซ‡เชตเซ€ เช•เซ‡เชŸเชฒเซ€เช• เชฌเชพเชฌเชคเซ‹

เชถเช•เซเชฏ เช›เซ‡ เช•เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ Travis CI เชฅเซ€ SSH เชฎเชพเชฐเชซเชคเซ‡ เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ‡ เช•เชจเซ‡เช•เซเชŸ เชฅเชถเซ‹, เชคเซเชฏเชพเชฐเซ‡ เชคเชฎเชจเซ‡ เชเช• เชšเซ‡เชคเชตเชฃเซ€ เชฆเซ‡เช–เชพเชถเซ‡ เชœเซ‡ เชคเชฎเชจเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชšเชพเชฒเซ เชฐเชพเช–เชตเชพเชฅเซ€ เช…เชŸเช•เชพเชตเชถเซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เชธเชฟเชธเซเชŸเชฎ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเชพ เชชเซเชฐเชคเชฟเชธเชพเชฆเชจเซ€ เชฐเชพเชน เชœเซ‹เชถเซ‡.

The authenticity of host '<hostname> (<IP address>)' can't be established.
RSA key fingerprint is <key fingerprint>.
Are you sure you want to continue connecting (yes/no)?

เชฎเซ‡เช‚ เชถเซ€เช–เซเชฏเชพ เช•เซ‡ เชธเซเชŸเซเชฐเชฟเช‚เช— เช•เซ€เชจเซ‡ เชฌเซ‡เช 64 เชฎเชพเช‚ เชเชจเซเช•เซ‹เชก เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ เชœเซ‡เชฅเซ€ เชคเซ‡เชจเซ‡ เชเชตเชพ เชซเซ‹เชฐเซเชฎเชฎเชพเช‚ เชธเชพเชšเชตเซ€ เชถเช•เชพเชฏ เช•เซ‡ เชœเซ‡เชฎเชพเช‚ เชคเซ‡ เช…เชจเซเช•เซ‚เชณ เช…เชจเซ‡ เชตเชฟเชถเซเชตเชธเชจเซ€เชฏ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ€ เชถเช•เซ‡. เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชธเซเชŸเซ‡เชœ เชชเชฐ, เชคเชฎเซ‡ เชธเชพเชฐเซเชตเชœเชจเชฟเช• เช•เซ€เชจเซ‡ เชกเซ€เช•เซ‹เชก เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชซเชพเช‡เชฒเชฎเชพเช‚ เชฒเช–เซ€ เชถเช•เซ‹ เช›เซ‹ known_hosts เช‰เชชเชฐเซ‹เช•เซเชค เชญเซ‚เชฒเชฅเซ€ เช›เซเชŸเช•เชพเชฐเซ‹ เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡.

echo <public key> | base64 # ะฒั‹ะฒะพะดะธั‚ <ะฟัƒะฑะปะธั‡ะฝั‹ะน ะบะปัŽั‡, ะทะฐะบะพะดะธั€ะพะฒะฐะฝะฝั‹ะน ะฒ base64>

เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช‚, เช† เช†เชฆเซ‡เชถ เช†เชจเชพ เชœเซ‡เชตเซ‹ เชฆเซ‡เช–เชพเชˆ เชถเช•เซ‡ เช›เซ‡:

echo "123.45.67.89 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== [email protected]" | base64

เช…เชจเซ‡ เช…เชนเซ€เช‚ เชคเซ‡ เชถเซเช‚ เช‰เชคเซเชชเชจเซเชจ เช•เชฐเซ‡ เช›เซ‡ - เชเช• base64 เชเชจเซเช•เซ‹เชกเซ‡เชก เชธเซเชŸเซเชฐเชฟเช‚เช—:

MTIzLjQ1LjY3Ljg5IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQWtsT1Vwa0RIcmZIWTE3U2JybVRJcE5MVEdLOVRqb20vQldEU1UKR1BsK25hZnpsSERUWVc3aGRJNHlaNWV3MThKSDRKVzlqYmhVRnJ2aVF6TTd4bEVMRVZmNGg5bEZYNVFWa2JQcHBTd2cwY2RhMwpQYnY3a09kSi9NVHlCbFdYRkNSK0hBbzNGWFJpdEJxeGlYMW5LaFhwSEFac01jaUxxOFY2UmpzTkFRd2RzZE1GdlNsVksvN1hBCnQzRmFvSm9Bc25jTTFROXg1KzNWMFd3NjgvZUlGbWIxenVVRmxqUUpLcHJyWDg4WHlwTkR2allOYnk2dncvUGIwcndlcnQvRW4KbVorQVc0T1pQblRQSTg5WlBtVk1MdWF5ckQyY0U4NlovaWw4YitndzNyMysxbkthdG1Ja2puMnNvMWQwMVFyYVRsTXFWU3NieApOclJGaTl3cmYrTTdRPT0geW91QGV4YW1wbGUuY29tCg==

เช…เชนเซ€เช‚ เช‰เชชเชฐ เชœเชฃเชพเชตเซ‡เชฒ เช†เชฆเซ‡เชถ เช›เซ‡

install:
  - echo < ะฟัƒะฑะปะธั‡ะฝั‹ะน ะบะปัŽั‡, ะทะฐะบะพะดะธั€ะพะฒะฐะฝะฝั‹ะน ะฒ base64> | base64 -d >> $HOME/.ssh/known_hosts

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

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

doctl compute ssh <droplet> --ssh-command "ะฒัะต ะบะพะผะฐะฝะดั‹ ะฑัƒะดัƒั‚ ะทะดะตััŒ && ะทะดะตััŒ"

TLS/SSL เช…เชจเซ‡ เชฒเซ‹เชก เชฌเซ‡เชฒเซ‡เชจเซเชธเชฟเช‚เช—

เชฎเซ‡เช‚ เช‰เชชเชฐ เชœเชฃเชพเชตเซ‡เชฒ เชฌเชงเซเช‚ เช•เชฐเซเชฏเชพ เชชเช›เซ€, เชฎเชจเซ‡ เชœเซ‡ เช›เซ‡เชฒเซเชฒเซ€ เชธเชฎเชธเซเชฏเชพ เช†เชตเซ€ เชคเซ‡ เช เชนเชคเซ€ เช•เซ‡ เชธเชฐเซเชตเชฐ เชชเชพเชธเซ‡ SSL เชจเชฅเซ€. เช•เชพเชฐเชฃ เช•เซ‡ เชนเซเช‚ Node.js เชธเชฐเซเชตเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเช‚ เช›เซเช‚, เชฆเชฌเชพเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เชพเชฎ เชฐเชฟเชตเชฐเซเชธ เชชเซเชฐเซ‹เช•เซเชธเซ€ Nginx เช…เชจเซ‡ เชšเชพเชฒเซ‹ เชเชจเซเช•เซเชฐเชฟเชชเซเชŸ เช•เชฐเซ€เช, เชคเชฎเชพเชฐเซ‡ เช˜เชฃเซเช‚ เชŸเชฟเช‚เช•เชฐ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

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

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

เชชเชฐเชฟเชฃเชพเชฎเซ‹

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

PS เช…เชฎเชพเชฐเชพเชฎเชพเช‚ เชฌเชœเชพเชฐ เชเช• เช›เชฌเซ€ เช›เซ‡ Docker, เชœเซ‡ เชเช• เช•เซเชฒเชฟเช•เชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชชเชฐ เชคเชฎเซ‡ เช•เชจเซเชŸเซ‡เชจเชฐเชจเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€ เชคเชชเชพเชธเซ€ เชถเช•เซ‹ เช›เซ‹ VPS. เชคเชฎเชพเชฎ เชจเชตเชพ เช—เซเชฐเชพเชนเช•เซ‹เชจเซ‡ 3 เชฆเชฟเชตเชธเชจเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃ เชฎเชซเชค เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เชชเซเชฐเชฟเชฏ เชตเชพเชšเช•เซ‹! เชถเซเช‚ เชคเชฎเซ‡ เชคเชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธเชฎเชพเช‚ CI/CD เชŸเซ‡เช•เซเชจเซ‹เชฒเซ‹เชœเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ เช›เซ‹?

CI/CD เชธเชพเช‚เช•เชณ เชฌเชจเชพเชตเชตเซ€ เช…เชจเซ‡ เชกเซ‹เช•เชฐ เชธเชพเชฅเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เช•เชพเชฐเซเชฏ

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

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