NGINX เจฏเฉ‚เจจเจฟเจŸ เจ…เจคเฉ‡ เจ‰เจฌเฉฐเจŸเฉ‚ เจจเจพเจฒ เจตเจฐเจกเจชเจฐเฉˆเจธ เจธเจฅเจพเจชเจจเจพ เจจเฉ‚เฉฐ เจธเจตเฉˆเจšเจพเจฒเจค เจ•เจฐเจจเจพ

NGINX เจฏเฉ‚เจจเจฟเจŸ เจ…เจคเฉ‡ เจ‰เจฌเฉฐเจŸเฉ‚ เจจเจพเจฒ เจตเจฐเจกเจชเจฐเฉˆเจธ เจธเจฅเจพเจชเจจเจพ เจจเฉ‚เฉฐ เจธเจตเฉˆเจšเจพเจฒเจค เจ•เจฐเจจเจพ

เจตเจฐเจกเจชเจฐเฉˆเจธ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจเจพ เจนเฉˆ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจŸเจฟเจŠเจŸเฉ‹เจฐเจฟเจ…เจฒ เจนเจจ, "เจตเจฐเจกเจชเฉเจฐเฉˆเจธ เจ‡เฉฐเจธเจŸเจพเจฒ" เจฒเจˆ เจ‡เฉฑเจ• เจ—เฉ‚เจ—เจฒ เจ–เฉ‹เจœ เจฒเจ—เจญเจ— เจ…เฉฑเจงเจพ เจฎเจฟเจฒเฉ€เจ…เจจ เจจเจคเฉ€เจœเฉ‡ เจชเฉเจฐเจพเจชเจค เจ•เจฐเฉ‡เจ—เฉ€เฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจตเจพเจธเจคเจต เจตเจฟเฉฑเจš, เจ‰เจนเจจเจพเจ‚ เจตเจฟเฉฑเจš เจฌเจนเฉเจค เจ˜เฉฑเจŸ เจตเจงเฉ€เจ† เจ—เจพเจˆเจก เจนเจจ, เจœเจฟเจธ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ เจคเฉเจธเฉ€เจ‚ เจตเจฐเจกเจชเจฐเฉˆเจธ เจ…เจคเฉ‡ เจ…เฉฐเจกเจฐเจฒเจพเจˆเฉฐเจ— เจ“เจชเจฐเฉ‡เจŸเจฟเฉฐเจ— เจธเจฟเจธเจŸเจฎ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ…เจคเฉ‡ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจคเจพเจ‚ เจœเฉ‹ เจ‰เจน เจฒเฉฐเจฌเฉ‡ เจธเจฎเฉ‡เจ‚ เจฒเจˆ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจจ เจฆเฉ‡ เจฏเฉ‹เจ— เจนเฉ‹เจฃเฅค เจธเจผเจพเจ‡เจฆ เจธเจนเฉ€ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจ–เจพเจธ เจฒเฉ‹เฉœเจพเจ‚ 'เจคเฉ‡ เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจจเจฟเจฐเจญเจฐ เจนเจจ, เจœเจพเจ‚ เจ‡เจน เจ‡เจธ เจคเฉฑเจฅ เจฆเฉ‡ เจ•เจพเจฐเจจ เจนเฉˆ เจ•เจฟ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจตเจฟเจ†เจ–เจฟเจ† เจฒเฉ‡เจ– เจจเฉ‚เฉฐ เจชเฉœเฉเจนเจจเจพ เจฎเฉเจธเจผเจ•เจฒ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆเฅค

เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจ‰เจฌเฉฐเจŸเฉ‚ 'เจคเฉ‡ เจตเจฐเจกเจชเจฐเฉˆเจธ เจจเฉ‚เฉฐ เจธเจตเฉˆเจšเจฒเจฟเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจฌเฉˆเจธเจผ เจธเจ•เฉเจฐเจฟเจชเจŸ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจ•เฉ‡, เจ…เจคเฉ‡ เจจเจพเจฒ เจนเฉ€ เจ‡เจธ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจฒเฉฐเจ˜เจฆเฉ‡ เจนเฉ‹เจ, เจนเจฐ เจ‡เฉฑเจ• เจŸเฉเจ•เฉœเจพ เจ•เฉ€ เจ•เจฐเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจจเจพเจฒ เจนเฉ€ เจ‡เจธ เจจเฉ‚เฉฐ เจตเจฟเจ•เจธเจค เจ•เจฐเจจ เจตเจฟเฉฑเจš เจ•เฉ€เจคเฉ‡ เจ—เจ เจธเจฎเจเฉŒเจคเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจธเจฎเจเจพเจ‰เจ‚เจฆเฉ‡ เจนเฉ‹เจ, เจฆเฉ‹เจตเจพเจ‚ เจธเฉฐเจธเจพเจฐเจพเจ‚ เจฆเฉ‡ เจธเจญ เจคเฉ‹เจ‚ เจตเจงเฉ€เจ† เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค . เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจ‰เฉฑเจจเจค เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจนเฉ‹, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจฒเฉ‡เจ– เจฆเฉ‡ เจชเจพเจ  เจจเฉ‚เฉฐ เจ›เฉฑเจก เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจฌเจธ เจธเจ•เฉเจฐเจฟเจชเจŸ เจฒเจตเฉ‹ เจคเฉเจนเจพเจกเฉ‡ เจตเจพเจคเจพเจตเจฐเจจ เจตเจฟเฉฑเจš เจธเฉ‹เจง เจ…เจคเฉ‡ เจตเจฐเจคเฉ‹เจ‚ เจฒเจˆเฅค เจธเจ•เฉเจฐเจฟเจชเจŸ เจฆเจพ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจ‡เฉฑเจ• เจ•เจธเจŸเจฎ เจตเจฐเจกเจชเจฐเฉˆเจธ เจธเจฅเจพเจชเจจเจพ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš Lets Encrypt เจธเจฎเจฐเจฅเจจ เจนเฉˆ, NGINX เจฏเฉ‚เจจเจฟเจŸ เจคเฉ‡ เจšเฉฑเจฒ เจฐเจฟเจนเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‰เจฆเจฏเฉ‹เจ—เจฟเจ• เจตเจฐเจคเฉ‹เจ‚ เจฒเจˆ เจขเฉเจ•เจตเจพเจ‚ เจนเฉˆเฅค

NGINX เจฏเฉ‚เจจเจฟเจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจตเจฐเจกเจชเจฐเฉˆเจธ เจจเฉ‚เฉฐ เจคเฉˆเจจเจพเจค เจ•เจฐเจจ เจฒเจˆ เจตเจฟเจ•เจธเจค เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจตเจฟเฉฑเจš เจตเจฐเจฃเจจ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ เจชเฉเจฐเจพเจฃเจพ เจฒเฉ‡เจ–, เจนเฉเจฃ เจ…เจธเฉ€เจ‚ เจ‰เจนเจจเจพเจ‚ เจšเฉ€เจœเจผเจพเจ‚ เจจเฉ‚เฉฐ เจนเฉ‹เจฐ เจตเฉ€ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเจพเจ‚เจ—เฉ‡ เจœเฉ‹ เจ‰เฉฑเจฅเฉ‡ เจ•เจตเจฐ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจธเจจ (เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ•เจˆ เจนเฉ‹เจฐ เจŸเจฟเจŠเจŸเฉ‹เจฐเจฟเจ…เจฒเจธ เจตเจฟเฉฑเจš):

  • เจตเจฐเจกเจชเจฐเฉˆเจธ CLI
  • เจ†เจ“ เจ‡เจจเจ•เฉเจฐเจฟเจชเจŸ เจ…เจคเฉ‡ TLSSSL เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจ•เจฐเฉ€เจ
  • เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸเจพเจ‚ เจฆเจพ เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ• เจจเจตเฉ€เจจเฉ€เจ•เจฐเจจ
  • NGINX เจ•เฉˆเจšเจฟเฉฐเจ—
  • NGINX เจ•เฉฐเจชเจฐเฉˆเจธเจผเจจ
  • HTTPS เจ…เจคเฉ‡ HTTP/2 เจธเจฎเจฐเจฅเจจ
  • เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ†เจŸเฉ‹เจฎเฉ‡เจธเจผเจจ

เจฒเฉ‡เจ– เจ‡เฉฑเจ• เจธเจฐเจตเจฐ 'เจคเฉ‡ เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเฉ‡เจ—เจพ, เจœเฉ‹ เจ‡เฉฑเจ•เฉ‹ เจธเจฎเฉ‡เจ‚ เจ‡เฉฑเจ• เจธเจฅเจฟเจฐ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจธเจฐเจตเจฐ, เจ‡เฉฑเจ• PHP เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจธเจฐเจตเจฐ, เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเฉ€ เจฎเฉ‡เจœเจผเจฌเจพเจจเฉ€ เจ•เจฐเฉ‡เจ—เจพเฅค เจ‡เฉฑเจ• เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ เจœเฉ‹ เจฎเจฒเจŸเฉ€เจชเจฒ เจตเจฐเจšเฉเจ…เจฒ เจฎเฉ‡เจœเจผเจฌเจพเจจเจพเจ‚ เจ…เจคเฉ‡ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเฉ€ เจนเฉˆ เจญเจตเจฟเฉฑเจ– เจฒเจˆ เจ‡เฉฑเจ• เจธเฉฐเจญเจพเจตเฉ€ เจตเจฟเจธเจผเจพ เจนเฉˆเฅค เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจ•เจฟเจธเฉ‡ เจ…เจœเจฟเจนเฉ€ เจšเฉ€เจœเจผ เจฌเจพเจฐเฉ‡ เจฒเจฟเจ–เฉ€เจ เจœเฉ‹ เจ‡เจจเฉเจนเจพเจ‚ เจฒเฉ‡เจ–เจพเจ‚ เจตเจฟเฉฑเจš เจจเจนเฉ€เจ‚ เจนเฉˆ, เจคเจพเจ‚ เจŸเจฟเฉฑเจชเจฃเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจฒเจฟเจ–เฉ‹เฅค

เจฒเฉ‹เฉœ

  • เจ•เฉฐเจŸเฉ‡เจจเจฐ เจธเจฐเจตเจฐ (LXC เจœ เจเจฒเจเจ•เจธเจกเฉ€), เจ‡เฉฑเจ• เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจ, เจœเจพเจ‚ เจ‡เฉฑเจ• เจฐเฉˆเจ—เฉ‚เจฒเจฐ เจ†เจ‡เจฐเจจ เจธเจฐเจตเจฐ เจœเจฟเจธ เจตเจฟเฉฑเจš เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ 512MB RAM เจ…เจคเฉ‡ Ubuntu 18.04 เจœเจพเจ‚ เจ‡เจธ เจคเฉ‹เจ‚ เจจเจตเฉ‡เจ‚ เจ‡เฉฐเจธเจŸเจพเจฒ เจนเจจเฅค
  • เจ‡เฉฐเจŸเจฐเจจเฉˆเฉฑเจŸ เจชเจนเฉเฉฐเจšเจฏเฉ‹เจ— เจชเฉ‹เจฐเจŸ 80 เจ…เจคเฉ‡ 443
  • เจกเฉ‹เจฎเฉ‡เจจ เจจเจพเจฎ เจ‡เจธ เจธเจฐเจตเจฐ เจฆเฉ‡ เจœเจจเจคเจ• เจ†เจˆเจชเฉ€ เจเจกเจฐเฉˆเฉฑเจธ เจจเจพเจฒ เจœเฉเฉœเจฟเจ† เจนเฉ‹เจ‡เจ† เจนเฉˆ
  • เจฐเฉ‚เจŸ เจเจ•เจธเฉˆเจธ (เจธเฉเจกเฉ‹)เฅค

เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจฆเฉ€ เจธเฉฐเจ–เฉ‡เจช เจœเจพเจฃเจ•เจพเจฐเฉ€

เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจ‰เจนเฉ€ เจนเฉˆ เจœเจฟเจตเฉ‡เจ‚ เจฆเฉฑเจธเจฟเจ† เจ—เจฟเจ† เจนเฉˆ เจชเจนเจฟเจฒเจพเจ‚, เจ‡เฉฑเจ• เจคเจฟเฉฐเจจ-เจชเฉฑเจงเจฐเฉ€ เจตเฉˆเฉฑเจฌ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเฅค เจ‡เจธ เจตเจฟเฉฑเจš PHP เจธเจ•เฉเจฐเจฟเจชเจŸเจพเจ‚ เจนเฉเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจ เจœเฉ‹ PHP เจ‡เฉฐเจœเจฃ เจคเฉ‡ เจšเจฒเจฆเฉ€เจ†เจ‚ เจนเจจ เจ…เจคเฉ‡ เจธเจฅเจฟเจฐ เจซเจพเจˆเจฒเจพเจ‚ เจœเฉ‹ เจตเฉˆเจฌ เจธเจฐเจตเจฐ เจฆเฉเจ†เจฐเจพ เจธเฉฐเจธเจพเจงเจฟเจค เจนเฉเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจเฅค

NGINX เจฏเฉ‚เจจเจฟเจŸ เจ…เจคเฉ‡ เจ‰เจฌเฉฐเจŸเฉ‚ เจจเจพเจฒ เจตเจฐเจกเจชเจฐเฉˆเจธ เจธเจฅเจพเจชเจจเจพ เจจเฉ‚เฉฐ เจธเจตเฉˆเจšเจพเจฒเจค เจ•เจฐเจจเจพ

เจœเจจเจฐเจฒ เจธเจฟเจงเจพเจ‚เจค

  • เจ‡เฉฑเจ• เจธเจ•เฉเจฐเจฟเจชเจŸ เจตเจฟเฉฑเจš เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจธเฉฐเจฐเจšเจจเจพ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจตเจฟเฉฑเจš เจฒเจชเฉ‡เจŸเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจœเฉ‡เจ•เจฐ เจ‡เจฎเจฆเจพเจฆเจคเจพ เจฒเจˆ เจธเจผเจฐเจคเจพเจ‚: เจธเจ•เฉเจฐเจฟเจชเจŸ เจจเฉ‚เฉฐ เจชเจนเจฟเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจฎเฉŒเจœเฉ‚เจฆ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฃ เจฆเฉ‡ เจœเฉ‹เจ–เจฎ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจ•เจˆ เจตเจพเจฐ เจšเจฒเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค
  • เจธเจ•เฉเจฐเจฟเจชเจŸ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจคเฉ‹เจ‚ เจธเจพเจซเจŸเจตเฉ‡เจ…เจฐ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเจฆเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจœเฉ‹ เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจ•เจฎเจพเจ‚เจก เจตเจฟเฉฑเจš เจธเจฟเจธเจŸเจฎ เจ…เฉฑเจชเจกเฉ‡เจŸ เจฒเจพเจ—เฉ‚ เจ•เจฐ เจธเจ•เฉ‹ (apt upgrade เจ‰เจฌเฉฐเจŸเฉ‚ เจฒเจˆ).
  • เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจ‡เจน เจชเจคเจพ เจฒเจ—เจพเจ‰เจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเจฆเฉ€เจ†เจ‚ เจนเจจ เจ•เจฟ เจ‰เจน เจ•เฉฐเจŸเฉ‡เจจเจฐ เจตเจฟเฉฑเจš เจšเฉฑเจฒ เจฐเจนเฉ€เจ†เจ‚ เจนเจจ เจคเจพเจ‚ เจœเฉ‹ เจ‰เจน เจ‰เจธ เจ…เจจเฉเจธเจพเจฐ เจ†เจชเจฃเฉ€เจ†เจ‚ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฆเจฒ เจธเจ•เจฃเฅค
  • เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจตเจฟเฉฑเจš เจธเจผเฉเจฐเฉ‚ เจนเฉ‹เจฃ เจฒเจˆ เจฅเจฐเจฟเฉฑเจก เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจจเฉ‚เฉฐ เจธเฉˆเฉฑเจŸ เจ•เจฐเจจ เจฒเจˆ, เจธเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉฐเจŸเฉ‡เจจเจฐเจพเจ‚, เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจเจพเจ‚, เจ…เจคเฉ‡ เจนเจพเจฐเจกเจตเฉ‡เจ…เจฐ เจธเจฐเจตเจฐเจพเจ‚ เจตเจฟเฉฑเจš เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ• เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจฆเจพ เจ…เจจเฉเจฎเจพเจจ เจฒเจ—เจพเจ‰เจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค
  • เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚, เจ…เจธเฉ€เจ‚ เจนเจฎเฉ‡เจธเจผเจพ เจธเจญ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจ†เจŸเฉ‹เจฎเฉ‡เจธเจผเจจ เจฌเจพเจฐเฉ‡ เจธเฉ‹เจšเจฆเฉ‡ เจนเจพเจ‚, เจœเฉ‹ เจธเจพเจจเฉ‚เฉฐ เจ‰เจฎเฉ€เจฆ เจนเฉˆ เจ•เจฟ เจ•เฉ‹เจก เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจคเฉเจนเจพเจกเฉ‡ เจ†เจชเจฃเฉ‡ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเฉ‡ เจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจฃ เจฆเจพ เจ†เจงเจพเจฐ เจฌเจฃ เจœเจพเจตเฉ‡เจ—เจพเฅค
  • เจธเจพเจฐเฉ€เจ†เจ‚ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจตเจœเฉ‹เจ‚ เจšเจฒเจพเจˆเจ†เจ‚ เจœเจพเจ‚เจฆเฉ€เจ†เจ‚ เจนเจจ เจฐเฉ‚เจŸ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‰เจน เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจธเจฟเจธเจŸเจฎ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฆเฉ‡ เจนเจจ, เจชเจฐ เจธเจฟเฉฑเจงเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจตเจฐเจกเจชเจฐเฉˆเจธ เจ‡เฉฑเจ• เจจเจฟเจฏเจฎเจค เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจตเจœเฉ‹เจ‚ เจšเฉฑเจฒเจฆเจพ เจนเฉˆ.

เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจธเฉˆเฉฑเจŸ เจ•เจฐเจจเจพ

เจธเจ•เฉเจฐเจฟเจชเจŸ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจธเฉˆเฉฑเจŸ เจ•เจฐเฉ‹:

  • WORDPRESS_DB_PASSWORD - เจตเจฐเจกเจชเจฐเฉˆเจธ เจกเจพเจŸเจพเจฌเฉ‡เจธ เจชเจพเจธเจตเจฐเจก
  • WORDPRESS_ADMIN_USER - เจตเจฐเจกเจชเจฐเฉˆเจธ เจเจกเจฎเจฟเจจ เจจเจพเจฎ
  • WORDPRESS_ADMIN_PASSWORD - เจตเจฐเจกเจชเจฐเฉˆเจธ เจเจกเจฎเจฟเจจ เจชเจพเจธเจตเจฐเจก
  • WORDPRESS_ADMIN_EMAIL - เจตเจฐเจกเจชเจฐเฉˆเจธ เจเจกเจฎเจฟเจจ เจˆเจฎเฉ‡เจฒ
  • WORDPRESS_URL เจตเจฐเจกเจชเจฐเฉˆเจธ เจธเจพเจˆเจŸ เจฆเจพ เจชเฉ‚เจฐเจพ URL เจนเฉˆ, เจคเฉ‹เจ‚ เจธเจผเฉเจฐเฉ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆ https://.
  • LETS_ENCRYPT_STAGING - เจกเจฟเจซเฉŒเจฒเจŸ เจคเฉŒเจฐ 'เจคเฉ‡ เจ–เจพเจฒเฉ€ เจนเฉˆ, เจชเจฐ เจฎเฉเฉฑเจฒ เจจเฉ‚เฉฐ 1 'เจคเฉ‡ เจธเฉˆเฉฑเจŸ เจ•เจฐเจ•เฉ‡, เจคเฉเจธเฉ€เจ‚ เจฒเฉˆเจŸเจธ เจเจจเจ•เฉเจฐเจฟเจชเจŸ เจธเจŸเฉ‡เจœเจฟเฉฐเจ— เจธเจฐเจตเจฐเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‹เจ—เฉ‡, เจœเฉ‹ เจคเฉเจนเจพเจกเฉ€เจ†เจ‚ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸเจพเจ‚ เจฆเฉ€ เจ…เจ•เจธเจฐ เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐเจจ เจฒเจˆ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉเฉฐเจฆเฉ‡ เจนเจจ, เจจเจนเฉ€เจ‚ เจคเจพเจ‚ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเฉ‡ เจ•เจพเจฐเจจ เจšเจฒเฉ‹ เจ‡เจจเจ•เฉเจฐเจฟเจชเจŸ เจคเฉเจนเจพเจกเฉ‡ เจ†เจˆเจชเฉ€ เจเจกเจฐเฉˆเฉฑเจธ เจจเฉ‚เฉฐ เจ…เจธเจฅเจพเจˆ เจคเฉŒเจฐ 'เจคเฉ‡ เจฌเจฒเฉŒเจ• เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆเฅค .

เจธเจ•เฉเจฐเจฟเจชเจŸ เจœเจพเจ‚เจš เจ•เจฐเจฆเฉ€ เจนเฉˆ เจ•เจฟ เจ‡เจน เจตเจฐเจกเจชเจฐเฉˆเจธ-เจธเจฌเฉฐเจงเจค เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจธเฉˆเฉฑเจŸ เจ•เฉ€เจคเฉ‡ เจ—เจ เจนเจจ เจ…เจคเฉ‡ เจœเฉ‡ เจจเจนเฉ€เจ‚ เจคเจพเจ‚ เจฌเจพเจนเจฐ เจจเจฟเจ•เจฒเจฆเฉ‡ เจนเจจเฅค
เจธเจ•เฉเจฐเจฟเจชเจŸ เจฒเจพเจˆเจจเจพเจ‚ 572-576 เจฎเฉเฉฑเจฒ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเฉ‹ LETS_ENCRYPT_STAGING.

เจชเฉเจฐเจพเจชเจค เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจธเฉˆเฉฑเจŸ เจ•เจฐเจจเจพ

เจฒเจพเจˆเจจเจพเจ‚ 55-61 'เจคเฉ‡ เจธเจ•เฉเจฐเจฟเจชเจŸ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจธเฉˆเฉฑเจŸ เจ•เจฐเจฆเฉ€ เจนเฉˆ, เจœเจพเจ‚ เจคเจพเจ‚ เจ•เฉเจ เจนเจพเจฐเจก-เจ•เฉ‹เจก เจ•เฉ€เจคเฉ‡ เจฎเฉเฉฑเจฒ เจฒเจˆ เจœเจพเจ‚ เจชเจฟเจ›เจฒเฉ‡ เจญเจพเจ— เจตเจฟเฉฑเจš เจธเฉˆเฉฑเจŸ เจ•เฉ€เจคเฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจชเฉเจฐเจพเจชเจค เจฎเฉเฉฑเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡:

  • DEBIAN_FRONTEND="noninteractive" โ€” เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฆเฉฑเจธเจฆเจพ เจนเฉˆ เจ•เจฟ เจ‰เจน เจ‡เฉฑเจ• เจธเจ•เฉเจฐเจฟเจชเจŸ เจตเจฟเฉฑเจš เจšเฉฑเจฒ เจฐเจนเฉ‡ เจนเจจ เจ…เจคเฉ‡ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฆเฉ‡ เจ†เจชเจธเฉ€ เจคเจพเจฒเจฎเฉ‡เจฒ เจฆเฉ€ เจ•เฉ‹เจˆ เจธเฉฐเจญเจพเจตเจจเจพ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค
  • WORDPRESS_CLI_VERSION="2.4.0" เจตเจฐเจกเจชเจฐเฉˆเจธ CLI เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเจพ เจธเฉฐเจธเจ•เจฐเจฃ เจนเฉˆเฅค
  • WORDPRESS_CLI_MD5= "dedd5a662b80cda66e9e25d44c23b25c" โ€” เจตเจฐเจกเจชเจฐเฉˆเจธ CLI 2.4.0 เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจŸเฉ‡เจฌเจฒ เจซเจพเจˆเจฒ เจฆเจพ เจšเฉˆเฉฑเจ•เจธเจฎ (เจตเจฐเจœเจจ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจตเจฟเฉฑเจš เจฆเจฟเฉฑเจคเจพ เจ—เจฟเจ† เจนเฉˆ WORDPRESS_CLI_VERSION). เจฒเจพเจˆเจจ 162 'เจคเฉ‡ เจธเจ•เฉเจฐเจฟเจชเจŸ เจ‡เจน เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ เจ‡เจธ เจฎเฉเฉฑเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ€ เจนเฉˆ เจ•เจฟ เจธเจนเฉ€ เจตเจฐเจกเจชเจฐเฉˆเจธ CLI เจซเจพเจˆเจฒ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เฉ€เจคเฉ€ เจ—เจˆ เจนเฉˆเฅค
  • UPLOAD_MAX_FILESIZE="16M" - เจตเฉฑเจง เจคเฉ‹เจ‚ เจตเฉฑเจง เจซเจพเจˆเจฒ เจฆเจพ เจ†เจ•เจพเจฐ เจœเฉ‹ เจตเจฐเจกเจชเจฐเฉˆเจธ เจตเจฟเฉฑเจš เจ…เจชเจฒเฉ‹เจก เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ‡เจน เจธเฉˆเจŸเจฟเฉฐเจ— เจ•เจˆ เจฅเจพเจตเจพเจ‚ 'เจคเฉ‡ เจตเจฐเจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจ‡เจธเจฒเจˆ เจ‡เจธเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฅเจพเจ‚ 'เจคเฉ‡ เจธเฉˆเฉฑเจŸ เจ•เจฐเจจเจพ เจ†เจธเจพเจจ เจนเฉˆเฅค
  • TLS_HOSTNAME= "$(echo ${WORDPRESS_URL} | cut -d'/' -f3)" - เจธเจฟเจธเจŸเจฎ เจฆเจพ เจนเฉ‹เจธเจŸเจจเจพเจฎ, WORDPRESS_URL เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจคเฉ‹เจ‚ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ†เฅค Let's Encrypt เจฆเฉ‡ เจจเจพเจฒ เจจเจพเจฒ เจ…เฉฐเจฆเจฐเฉ‚เจจเฉ€ เจตเจฐเจกเจชเจฐเฉˆเจธ เจคเจธเจฆเฉ€เจ• เจคเฉ‹เจ‚ เจ‰เจšเจฟเจค TLS/SSL เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค
  • NGINX_CONF_DIR="/etc/nginx" - เจฎเฉเฉฑเจ– เจซเจพเจˆเจฒ เจธเจฎเฉ‡เจค NGINX เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจตเจพเจฒเฉ€ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจฆเจพ เจฎเจพเจฐเจ— nginx.conf.
  • CERT_DIR="/etc/letsencrypt/live/${TLS_HOSTNAME}" - เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจคเฉ‹เจ‚ เจชเฉเจฐเจพเจชเจค เจตเจฐเจกเจชเจฐเฉˆเจธ เจธเจพเจˆเจŸ เจฒเจˆ เจฒเฉˆเจŸเจธ เจ‡เจจเจ•เฉเจฐเจฟเจชเจŸ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจฆเจพ เจฎเจพเจฐเจ— TLS_HOSTNAME.

เจ‡เฉฑเจ• เจตเจฐเจกเจชเจฐเฉˆเจธ เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจนเฉ‹เจธเจŸเจจเจพเจฎ เจธเฉŒเจ‚เจชเจฃเจพ

เจธเจ•เฉเจฐเจฟเจชเจŸ เจธเจพเจˆเจŸ เจฆเฉ‡ เจกเฉ‹เจฎเฉ‡เจจ เจจเจพเจฎ เจจเจพเจฒ เจฎเฉ‡เจฒ เจ•เจฐเจจ เจฒเจˆ เจธเจฐเจตเจฐ เจฆเฉ‡ เจนเฉ‹เจธเจŸเจจเจพเจฎ เจจเฉ‚เฉฐ เจธเฉˆเฉฑเจŸ เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค เจ‡เจน เจฒเฉ‹เฉœเฉ€เจ‚เจฆเจพ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจชเจฐ เจธเจ•เฉเจฐเจฟเจชเจŸ เจฆเฉเจ†เจฐเจพ เจธเฉฐเจฐเจšเจฟเจค เจ•เฉ€เจคเฉ‡ เจ…เจจเฉเจธเจพเจฐ, เจ‡เฉฑเจ• เจธเจฟเฉฐเจ—เจฒ เจธเจฐเจตเจฐ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡ SMTP เจฐเจพเจนเฉ€เจ‚ เจ†เจŠเจŸเจ—เฉ‹เจ‡เฉฐเจ— เจฎเฉ‡เจฒ เจญเฉ‡เจœเจฃเจพ เจตเจงเฉ‡เจฐเฉ‡ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจนเฉˆเฅค

เจธเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉ‹เจก

# Change the hostname to be the same as the WordPress hostname
if [ ! "$(hostname)" == "${TLS_HOSTNAME}" ]; then
  echo " Changing hostname to ${TLS_HOSTNAME}"
  hostnamectl set-hostname "${TLS_HOSTNAME}"
fi

เจนเฉ‹เจธเจŸ-เจจเจพเจ‚ เจจเฉ‚เฉฐ /etc/hosts เจตเจฟเฉฑเจš เจœเฉ‹เฉœเจจเจพ

เจชเฉ‚เจฐเจ• WP-เจ•เฉเจฐเฉ‹เจจ เจ†เจตเจฐเจคเฉ€ เจ•เจพเจฐเจœเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจตเจฐเจกเจชเจฐเฉˆเจธ เจจเฉ‚เฉฐ HTTP เจฆเฉเจ†เจฐเจพ เจ†เจชเจฃเฉ‡ เจ†เจช เจจเฉ‚เฉฐ เจเจ•เจธเฉˆเจธ เจ•เจฐเจจ เจฆเฉ‡ เจฏเฉ‹เจ— เจนเฉ‹เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจ‡เจน เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ•เจฟ WP-Cron เจธเจพเจฐเฉ‡ เจตเจพเจคเจพเจตเจฐเจฃเจพเจ‚ 'เจคเฉ‡ เจธเจนเฉ€ เจขเฉฐเจ— เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ, เจธเจ•เฉเจฐเจฟเจชเจŸ เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฒเจพเจˆเจจ เจœเฉ‹เฉœเจฆเฉ€ เจนเฉˆ / etc / hostsเจคเจพเจ‚ เจœเฉ‹ เจตเจฐเจกเจชเจฐเฉˆเจธ เจฒเฉ‚เจชเจฌเฉˆเจ• เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจฆเฉเจ†เจฐเจพ เจ†เจชเจฃเฉ‡ เจ†เจช เจจเฉ‚เฉฐ เจเจ•เจธเฉˆเจธ เจ•เจฐ เจธเจ•เฉ‡:

เจธเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉ‹เจก

# Add the hostname to /etc/hosts
if [ "$(grep -m1 "${TLS_HOSTNAME}" /etc/hosts)" = "" ]; then
  echo " Adding hostname ${TLS_HOSTNAME} to /etc/hosts so that WordPress can ping itself"
  printf "::1 %sn127.0.0.1 %sn" "${TLS_HOSTNAME}" "${TLS_HOSTNAME}" >> /etc/hosts
fi

เจ…เจ—เจฒเฉ‡ เจชเฉœเจพเจตเจพเจ‚ เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจŸเฉ‚เจฒเจธ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจเจพ

เจฌเจพเจ•เฉ€ เจธเจ•เฉเจฐเจฟเจชเจŸ เจจเฉ‚เฉฐ เจ•เฉเจ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจพเจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจน เจฎเฉฐเจจเจฆเจพ เจนเฉˆ เจ•เจฟ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจ…เฉฑเจช เจŸเฉ‚ เจกเฉ‡เจŸ เจนเจจเฅค เจ…เจธเฉ€เจ‚ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจจเฉ‚เฉฐ เจ…เจชเจกเฉ‡เจŸ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจœเจฟเจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจ…เจธเฉ€เจ‚ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจŸเฉ‚เจฒ เจธเจฅเจพเจชเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚:

เจธเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉ‹เจก

# Make sure tools needed for install are present
echo " Installing prerequisite tools"
apt-get -qq update
apt-get -qq install -y 
  bc 
  ca-certificates 
  coreutils 
  curl 
  gnupg2 
  lsb-release

NGINX เจฏเฉ‚เจจเจฟเจŸ เจ…เจคเฉ‡ NGINX เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจเจพ

เจธเจ•เฉเจฐเจฟเจชเจŸ NGINX เจฏเฉ‚เจจเจฟเจŸ เจ…เจคเฉ‡ เจ“เจชเจจ เจธเฉ‹เจฐเจธ NGINX เจจเฉ‚เฉฐ เจ…เจงเจฟเจ•เจพเจฐเจค NGINX เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจคเฉ‹เจ‚ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจฆเฉ€ เจนเฉˆ เจคเจพเจ‚ เจœเฉ‹ เจ‡เจน เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‡เจ† เจœเจพ เจธเจ•เฉ‡ เจ•เจฟ เจจเจตเฉ€เจจเจคเจฎ เจธเฉเจฐเฉฑเจ–เจฟเจ† เจชเฉˆเจš เจ…เจคเฉ‡ เจฌเฉฑเจ— เจซเจฟเจ•เจธ เจตเจพเจฒเฉ‡ เจธเฉฐเจธเจ•เจฐเจฃ เจตเจฐเจคเฉ‡ เจ—เจ เจนเจจเฅค

เจธเจ•เฉเจฐเจฟเจชเจŸ NGINX เจฏเฉ‚เจจเจฟเจŸ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจ…เจคเฉ‡ เจซเจฟเจฐ NGINX เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจœเฉ‹เฉœเจฆเฉ€ เจนเฉˆ, เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจ•เฉเฉฐเจœเฉ€ เจ…เจคเฉ‡ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจฆเฉ€ เจนเฉˆ apt, เจ‡เฉฐเจŸเจฐเจจเฉˆเฉฑเจŸ เจฐเจพเจนเฉ€เจ‚ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจจเฉ‚เฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เจฐเจจเจพเฅค

NGINX เจฏเฉ‚เจจเจฟเจŸ เจ…เจคเฉ‡ NGINX เจฆเฉ€ เจ…เจธเจฒ เจธเจฅเจพเจชเจจเจพ เจ…เจ—เจฒเฉ‡ เจญเจพเจ— เจตเจฟเฉฑเจš เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจชเจนเจฟเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจœเฉ‹เฉœเจฆเฉ‡ เจนเจพเจ‚ เจคเจพเจ‚ เจœเฉ‹ เจธเจพเจจเฉ‚เฉฐ เจฎเฉˆเจŸเจพเจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจ•เจˆ เจตเจพเจฐ เจ…เฉฑเจชเจกเฉ‡เจŸ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจพ เจชเจตเฉ‡, เจœเจฟเจธ เจจเจพเจฒ เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ เจคเฉ‡เจœเจผ เจนเฉ‹ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค

เจธเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉ‹เจก

# Install the NGINX Unit repository
if [ ! -f /etc/apt/sources.list.d/unit.list ]; then
  echo " Installing NGINX Unit repository"
  curl -fsSL https://nginx.org/keys/nginx_signing.key | apt-key add -
  echo "deb https://packages.nginx.org/unit/ubuntu/ $(lsb_release -cs) unit" > /etc/apt/sources.list.d/unit.list
fi

# Install the NGINX repository
if [ ! -f /etc/apt/sources.list.d/nginx.list ]; then
  echo " Installing NGINX repository"
  curl -fsSL https://nginx.org/keys/nginx_signing.key | apt-key add -
  echo "deb https://nginx.org/packages/mainline/ubuntu $(lsb_release -cs) nginx" > /etc/apt/sources.list.d/nginx.list
fi

NGINX, NGINX เจฏเฉ‚เจจเจฟเจŸ, PHP เจฎเจพเจฐเฉ€เจ†เจกเฉ€เจฌเฉ€, เจธเจฐเจŸเจฌเฉ‹เจŸ (เจ†เจ“ เจเจจเจ•เฉเจฐเจฟเจชเจŸ เจ•เจฐเฉ€เจ) เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจจเจฟเจฐเจญเจฐเจคเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจเจพ

เจ‡เฉฑเจ• เจตเจพเจฐ เจธเจพเจฐเฉ€เจ†เจ‚ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจœเฉ‹เฉœเฉ€เจ†เจ‚ เจœเจพเจฃ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจฎเฉˆเจŸเจพเจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจ…เฉฑเจชเจกเฉ‡เจŸ เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเฉ‹เฅค เจธเจ•เฉเจฐเจฟเจชเจŸ เจฆเฉเจ†เจฐเจพ เจธเจฅเจพเจชเจค เจ•เฉ€เจคเฉ‡ เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจตเจฟเฉฑเจš เจตเจฐเจกเจชเจฐเฉˆเจธ.org เจšเจฒเจพเจ‰เจฃ เจตเฉ‡เจฒเฉ‡ เจธเจฟเจซเจพเจฐเจธเจผ เจ•เฉ€เจคเฉ‡ PHP เจเจ•เจธเจŸเฉˆเจ‚เจธเจผเจจ เจตเฉ€ เจธเจผเจพเจฎเจฒ เจนเฉเฉฐเจฆเฉ‡ เจนเจจ

เจธเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉ‹เจก

echo " Updating repository metadata"
apt-get -qq update

# Install PHP with dependencies and NGINX Unit
echo " Installing PHP, NGINX Unit, NGINX, Certbot, and MariaDB"
apt-get -qq install -y --no-install-recommends 
  certbot 
  python3-certbot-nginx 
  php-cli 
  php-common 
  php-bcmath 
  php-curl 
  php-gd 
  php-imagick 
  php-mbstring 
  php-mysql 
  php-opcache 
  php-xml 
  php-zip 
  ghostscript 
  nginx 
  unit 
  unit-php 
  mariadb-server

NGINX เจฏเฉ‚เจจเจฟเจŸ เจ…เจคเฉ‡ เจตเจฐเจกเจชเจฐเฉˆเจธ เจจเจพเจฒ เจตเจฐเจคเจฃ เจฒเจˆ PHP เจธเฉˆเจŸ เจ…เจช เจ•เจฐเจจเจพ

เจธเจ•เฉเจฐเจฟเจชเจŸ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเฉˆเจŸเจฟเฉฐเจ— เจซเจพเจˆเจฒ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆ conf.d. เจ‡เจน PHP เจ…เฉฑเจชเจฒเฉ‹เจกเจพเจ‚ เจฒเจˆ เจ…เจงเจฟเจ•เจคเจฎ เจซเจผเจพเจˆเจฒ เจ†เจ•เจพเจฐ เจธเฉˆเฉฑเจŸ เจ•เจฐเจฆเจพ เจนเฉˆ, PHP เจคเจฐเฉเฉฑเจŸเฉ€ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจจเฉ‚เฉฐ STDERR 'เจคเฉ‡ เจšเจพเจฒเฉ‚ เจ•เจฐเจฆเจพ เจนเฉˆ เจคเจพเจ‚ เจœเฉ‹ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ NGINX เจฏเฉ‚เจจเจฟเจŸ เจฒเฉŒเจ— เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจœเจพ เจธเจ•เฉ‡, เจ…เจคเฉ‡ NGINX เจฏเฉ‚เจจเจฟเจŸ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจšเจพเจฒเฉ‚ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เฉ‡เฅค

เจธเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉ‹เจก

# Find the major and minor PHP version so that we can write to its conf.d directory
PHP_MAJOR_MINOR_VERSION="$(php -v | head -n1 | cut -d' ' -f2 | cut -d'.' -f1,2)"

if [ ! -f "/etc/php/${PHP_MAJOR_MINOR_VERSION}/embed/conf.d/30-wordpress-overrides.ini" ]; then
  echo " Configuring PHP for use with NGINX Unit and WordPress"
  # Add PHP configuration overrides
  cat > "/etc/php/${PHP_MAJOR_MINOR_VERSION}/embed/conf.d/30-wordpress-overrides.ini" << EOM
; Set a larger maximum upload size so that WordPress can handle
; bigger media files.
upload_max_filesize=${UPLOAD_MAX_FILESIZE}
post_max_size=${UPLOAD_MAX_FILESIZE}
; Write error log to STDERR so that error messages show up in the NGINX Unit log
error_log=/dev/stderr
EOM
fi

# Restart NGINX Unit because we have reconfigured PHP
echo " Restarting NGINX Unit"
service unit restart

เจตเจฐเจกเจชเจฐเฉˆเจธ เจฒเจˆ เจฎเจพเจฐเฉ€เจ†เจกเฉ€เจฌเฉ€ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจเจพ

เจ…เจธเฉ€เจ‚ MySQL เจ‰เฉฑเจคเฉ‡ เจฎเจพเจฐเฉ€เจ†เจกเฉ€เจฌเฉ€ เจจเฉ‚เฉฐ เจšเฉเจฃเจฟเจ† เจนเฉˆ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจธ เจตเจฟเฉฑเจš เจตเจงเฉ‡เจฐเฉ‡ เจ•เจฎเจฟเจŠเจจเจฟเจŸเฉ€ เจ—เจคเฉ€เจตเจฟเจงเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจนเฉ‹เจฃ เจฆเฉ€ เจธเฉฐเจญเจพเจตเจจเจพ เจตเฉ€ เจนเฉˆ เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจฌเจฟเจนเจคเจฐ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆ (เจธเจผเจพเจ‡เจฆ, เจ‡เฉฑเจฅเฉ‡ เจธเจญ เจ•เฉเจ เจธเฉŒเจ–เจพ เจนเฉˆ: MySQL เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจœเฉ‹เฉœเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ, เจฒเจ—เจญเจ— เจ…เจจเฉเจตเจพเจฆเจ•)

เจธเจ•เฉเจฐเจฟเจชเจŸ เจ‡เฉฑเจ• เจจเจตเจพเจ‚ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจฒเฉ‚เจชเจฌเฉˆเจ• เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจฆเฉเจ†เจฐเจพ เจตเจฐเจกเจชเจฐเฉˆเจธ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจ•เจฐเจจ เจฒเจˆ เจชเฉเจฐเจฎเจพเจฃ เจชเฉฑเจคเจฐ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆ:

เจธเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉ‹เจก

# Set up the WordPress database
echo " Configuring MariaDB for WordPress"
mysqladmin create wordpress || echo "Ignoring above error because database may already exist"
mysql -e "GRANT ALL PRIVILEGES ON wordpress.* TO "wordpress"@"localhost" IDENTIFIED BY "$WORDPRESS_DB_PASSWORD"; FLUSH PRIVILEGES;"

เจตเจฐเจกเจชเจฐเฉˆเจธ CLI เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจเจพ

เจ‡เจธ เจชเฉœเจพเจ… 'เจคเฉ‡, เจธเจ•เฉเจฐเจฟเจชเจŸ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจฆเฉ€ เจนเฉˆ WP-CLI. เจ‡เจธเจฆเฉ‡ เจจเจพเจฒ, เจคเฉเจธเฉ€เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจฆเจธเจคเฉ€ เจธเฉฐเจชเจพเจฆเจฟเจค เจ•เจฐเจจ, เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเฉ‚เฉฐ เจ…เจชเจกเฉ‡เจŸ เจ•เจฐเจจ, เจœเจพเจ‚ เจ•เฉฐเจŸเจฐเฉ‹เจฒ เจชเฉˆเจจเจฒ เจตเจฟเฉฑเจš เจฆเจพเจ–เจฒ เจนเฉ‹เจฃ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจตเจฐเจกเจชเจฐเฉˆเจธ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ…เจคเฉ‡ เจชเฉเจฐเจฌเฉฐเจงเจฟเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจฅเฉ€เจฎ เจ…เจคเฉ‡ เจเจก-เจ†เจจ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจ…เจคเฉ‡ เจตเจฐเจกเจชเจฐเฉˆเจธ เจจเฉ‚เฉฐ เจ…เจชเจกเฉ‡เจŸ เจ•เจฐเจจ เจฒเจˆ เจตเฉ€ เจ•เฉ€เจคเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค

เจธเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉ‹เจก

if [ ! -f /usr/local/bin/wp ]; then
  # Install the WordPress CLI
  echo " Installing the WordPress CLI tool"
  curl --retry 6 -Ls "https://github.com/wp-cli/wp-cli/releases/download/v${WORDPRESS_CLI_VERSION}/wp-cli-${WORDPRESS_CLI_VERSION}.phar" > /usr/local/bin/wp
  echo "$WORDPRESS_CLI_MD5 /usr/local/bin/wp" | md5sum -c -
  chmod +x /usr/local/bin/wp
fi

เจตเจฐเจกเจชเจฐเฉˆเจธ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ…เจคเฉ‡ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเจจเจพ

เจธเจ•เฉเจฐเจฟเจชเจŸ เจ‡เฉฑเจ• เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจตเจฐเจกเจชเจฐเฉˆเจธ เจฆเฉ‡ เจจเจตเฉ€เจจเจคเจฎ เจธเฉฐเจธเจ•เจฐเจฃ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจฆเฉ€ เจนเฉˆ /var/www/wordpressเจ…เจคเฉ‡ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจตเฉ€ เจฌเจฆเจฒเจฆเจพ เจนเฉˆ:

  • เจกเจพเจŸเจพเจฌเฉ‡เจธ เจ•เจจเฉˆเจ•เจธเจผเจจ เจŸเฉ€เจธเฉ€เจชเฉ€ เจŸเฉเจฐเฉˆเจซเจฟเจ• เจจเฉ‚เฉฐ เจ˜เจŸเจพเจ‰เจฃ เจฒเจˆ เจฒเฉ‚เจชเจฌเฉˆเจ• เจ‰เฉฑเจคเฉ‡ TCP เจฆเฉ€ เจฌเจœเจพเจ เจฏเฉ‚เจจเจฟเจ•เจธ เจกเฉ‹เจฎเฉ‡เจจ เจธเจพเจ•เจŸ เจ‰เฉฑเจคเฉ‡ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆเฅค
  • เจตเจฐเจกเจชเจฐเฉˆเจธ เจ‡เฉฑเจ• เจ…เจ—เฉ‡เจคเจฐ เจœเฉ‹เฉœเจฆเจพ เจนเฉˆ https:// URL เจคเฉ‡ เจœเฉ‡เจ•เจฐ เจ•เจฒเจพเจ‡เฉฐเจŸ HTTPS เจ‰เฉฑเจคเฉ‡ NGINX เจจเจพเจฒ เจ•เจจเฉˆเจ•เจŸ เจ•เจฐเจฆเฉ‡ เจนเจจ, เจ…เจคเฉ‡ เจฐเจฟเจฎเฉ‹เจŸ เจนเฉ‹เจธเจŸเจจเจพเจฎ (เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ NGINX เจฆเฉเจ†เจฐเจพ เจชเฉเจฐเจฆเจพเจจ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ) PHP เจจเฉ‚เฉฐ เจตเฉ€ เจญเฉ‡เจœเจฆเจพ เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจธเฉˆเฉฑเจŸ เจ•เจฐเจจ เจฒเจˆ เจ•เฉ‹เจก เจฆเฉ‡ เจ‡เฉฑเจ• เจŸเฉเจ•เฉœเฉ‡ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค
  • เจตเจฐเจกเจชเจฐเฉˆเจธ เจจเฉ‚เฉฐ เจฒเฉŒเจ—เจ‡เจจ เจฒเจˆ HTTPS เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ
  • เจกเจฟเจซเฉŒเจฒเจŸ URL เจฌเจฃเจคเจฐ เจธเจฐเฉ‹เจคเจพเจ‚ 'เจคเฉ‡ เจ…เจงเจพเจฐเจค เจนเฉˆ
  • เจตเจฐเจกเจชเจฐเฉˆเจธ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจฒเจˆ เจซเจพเจˆเจฒ เจธเจฟเจธเจŸเจฎ เจคเฉ‡ เจธเจนเฉ€ เจ…เจจเฉเจฎเจคเฉ€เจ†เจ‚ เจธเฉˆเจŸ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจธเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉ‹เจก

if [ ! -d /var/www/wordpress ]; then
  # Create WordPress directories
  mkdir -p /var/www/wordpress
  chown -R www-data:www-data /var/www

  # Download WordPress using the WordPress CLI
  echo " Installing WordPress"
  su -s /bin/sh -c 'wp --path=/var/www/wordpress core download' www-data

  WP_CONFIG_CREATE_CMD="wp --path=/var/www/wordpress config create --extra-php --dbname=wordpress --dbuser=wordpress --dbhost="localhost:/var/run/mysqld/mysqld.sock" --dbpass="${WORDPRESS_DB_PASSWORD}""

  # This snippet is injected into the wp-config.php file when it is created;
  # it informs WordPress that we are behind a reverse proxy and as such
  # allows it to generate links using HTTPS
  cat > /tmp/wp_forwarded_for.php << 'EOM'
/* Turn HTTPS 'on' if HTTP_X_FORWARDED_PROTO matches 'https' */
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
    $_SERVER['HTTPS'] = 'on';
}
if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
}
EOM

  # Create WordPress configuration
  su -s /bin/sh -p -c "cat /tmp/wp_forwarded_for.php | ${WP_CONFIG_CREATE_CMD}" www-data
  rm /tmp/wp_forwarded_for.php
  su -s /bin/sh -p -c "wp --path=/var/www/wordpress config set 'FORCE_SSL_ADMIN' 'true'" www-data

  # Install WordPress
  WP_SITE_INSTALL_CMD="wp --path=/var/www/wordpress core install --url="${WORDPRESS_URL}" --title="${WORDPRESS_SITE_TITLE}" --admin_user="${WORDPRESS_ADMIN_USER}" --admin_password="${WORDPRESS_ADMIN_PASSWORD}" --admin_email="${WORDPRESS_ADMIN_EMAIL}" --skip-email"
  su -s /bin/sh -p -c "${WP_SITE_INSTALL_CMD}" www-data

  # Set permalink structure to a sensible default that isn't in the UI
  su -s /bin/sh -p -c "wp --path=/var/www/wordpress option update permalink_structure '/%year%/%monthnum%/%postname%/'" www-data

  # Remove sample file because it is cruft and could be a security problem
  rm /var/www/wordpress/wp-config-sample.php

  # Ensure that WordPress permissions are correct
  find /var/www/wordpress -type d -exec chmod g+s {} ;
  chmod g+w /var/www/wordpress/wp-content
  chmod -R g+w /var/www/wordpress/wp-content/themes
  chmod -R g+w /var/www/wordpress/wp-content/plugins
fi

NGINX เจฏเฉ‚เจจเจฟเจŸ เจฆเฉ€ เจธเจฅเจพเจชเจจเจพ เจ•เฉ€เจคเฉ€ เจœเจพ เจฐเจนเฉ€ เจนเฉˆ

เจธเจ•เฉเจฐเจฟเจชเจŸ PHP เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจ…เจคเฉ‡ เจตเจฐเจกเจชเจฐเฉˆเจธ เจฎเจพเจฐเจ—เจพเจ‚ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจจ เจฒเจˆ NGINX เจฏเฉ‚เจจเจฟเจŸ เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐเจฆเฉ€ เจนเฉˆ, PHP เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‡เจฎเจธเจชเฉ‡เจธ เจจเฉ‚เฉฐ เจ…เจฒเฉฑเจ— เจ•เจฐเจฆเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจ…เจจเฉเจ•เฉ‚เจฒ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆเฅค เจ‡เฉฑเจฅเฉ‡ เจฆเฉ‡เจ–เจฃ เจฒเจˆ เจคเจฟเฉฐเจจ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจนเจจ:

  • เจจเฉ‡เจฎ-เจธเจชเฉ‡เจธ เจฒเจˆ เจธเจฎเจฐเจฅเจจ เจธเจผเจฐเจค เจฆเฉเจ†เจฐเจพ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ‡เจน เจœเจพเจ‚เจš เจ•เจฐเจจ เจฆเฉ‡ เจ†เจงเจพเจฐ 'เจคเฉ‡ เจ•เจฟ เจธเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉฐเจŸเฉ‡เจจเจฐ เจตเจฟเฉฑเจš เจšเฉฑเจฒ เจฐเจนเฉ€ เจนเฉˆเฅค เจ‡เจน เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉˆ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจ•เฉฐเจŸเฉ‡เจจเจฐ เจธเฉˆเฉฑเจŸเจ…เฉฑเจช เจ•เฉฐเจŸเฉ‡เจจเจฐเจพเจ‚ เจฆเฉ‡ เจจเฉ‡เจธเจŸเจก เจฒเจพเจ‚เจš เจฆเจพ เจธเจฎเจฐเจฅเจจ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค
  • เจœเฉ‡เจ•เจฐ เจจเฉ‡เจฎเจธเจชเฉ‡เจธ เจฒเจˆ เจธเจฎเจฐเจฅเจจ เจนเฉˆ, เจคเจพเจ‚ เจจเฉ‡เจฎเจธเจชเฉ‡เจธ เจจเฉ‚เฉฐ เจ…เจฏเฉ‹เจ— เจ•เจฐเฉ‹ เจจเฉˆเฉฑเจŸเจตเจฐเจ•. เจ‡เจน เจตเจฐเจกเจชเจฐเฉˆเจธ เจจเฉ‚เฉฐ เจ‡เฉฑเจ•เฉ‹ เจธเจฎเฉ‡เจ‚ เจ…เฉฐเจคเจฎ เจฌเจฟเฉฐเจฆเฉ‚เจ†เจ‚ เจจเจพเจฒ เจœเฉเฉœเจจ เจ…เจคเฉ‡ เจ‡เฉฐเจŸเจฐเจจเฉˆเจŸ 'เจคเฉ‡ เจชเจนเฉเฉฐเจšเจฏเฉ‹เจ— เจนเฉ‹เจฃ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเฉ‡เจฃ เจฒเจˆ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉˆเฅค
  • เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจฆเฉ€ เจ…เจงเจฟเจ•เจคเจฎ เจธเฉฐเจ–เจฟเจ† เจจเฉ‚เฉฐ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ: (MariaDB เจ…เจคเฉ‡ NGINX Uniy เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจ‰เจชเจฒเจฌเจง เจฎเฉˆเจฎเฉ‹เจฐเฉ€)/(PHP + 5 เจตเจฟเฉฑเจš RAM เจธเฉ€เจฎเจพ)
    เจ‡เจน เจฎเฉเฉฑเจฒ NGINX เจฏเฉ‚เจจเจฟเจŸ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจตเจฟเฉฑเจš เจธเฉˆเฉฑเจŸ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค

เจ‡เจน เจฎเฉเฉฑเจฒ เจ‡เจน เจตเฉ€ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจ•เจฟ เจ‡เฉฑเจฅเฉ‡ เจนเจฎเฉ‡เจธเจผเจพเจ‚ เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจฆเฉ‹ PHP เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจšเฉฑเจฒ เจฐเจนเฉ€เจ†เจ‚ เจนเจจ, เจœเฉ‹ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเฉˆ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจตเจฐเจกเจชเจฐเฉˆเจธ เจ†เจชเจฃเฉ‡ เจ†เจช เจฒเจˆ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจ…เจธเจฟเฉฐเจ•เจฐเฉ‹เจจเจธ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจตเจพเจงเฉ‚ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ WP-Cron เจŸเฉเฉฑเจŸ เจœเจพเจตเฉ‡เจ—เจพเฅค เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเฉ€เจ†เจ‚ เจธเจฅเจพเจจเจ• เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจฆเฉ‡ เจ†เจงเจพเจฐ 'เจคเฉ‡ เจ‡เจนเจจเจพเจ‚ เจธเฉ€เจฎเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจตเจงเจพเจ‰เจฃเจพ เจœเจพเจ‚ เจ˜เจŸเจพเจ‰เจฃเจพ เจšเจพเจน เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เฉฑเจฅเฉ‡ เจฌเจฃเจพเจˆเจ†เจ‚ เจ—เจˆเจ†เจ‚ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจฐเฉ‚เฉœเฉเจนเฉ€เจตเจพเจฆเฉ€ เจนเจจเฅค เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจ‰เจคเจชเจพเจฆเจจ เจชเฉเจฐเจฃเจพเจฒเฉ€เจ†เจ‚ 'เจคเฉ‡, เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ 10 เจ…เจคเฉ‡ 100 เจฆเฉ‡ เจตเจฟเจšเจ•เจพเจฐ เจนเฉเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจเฅค

เจธเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉ‹เจก

if [ "${container:-unknown}" != "lxc" ] && [ "$(grep -m1 -a container=lxc /proc/1/environ | tr -d '')" == "" ]; then
  NAMESPACES='"namespaces": {
        "cgroup": true,
        "credential": true,
        "mount": true,
        "network": false,
        "pid": true,
        "uname": true
    }'
else
  NAMESPACES='"namespaces": {}'
fi

PHP_MEM_LIMIT="$(grep 'memory_limit' /etc/php/7.4/embed/php.ini | tr -d ' ' | cut -f2 -d= | numfmt --from=iec)"
AVAIL_MEM="$(grep MemAvailable /proc/meminfo | tr -d ' kB' | cut -f2 -d: | numfmt --from-unit=K)"
MAX_PHP_PROCESSES="$(echo "${AVAIL_MEM}/${PHP_MEM_LIMIT}+5" | bc)"
echo " Calculated the maximum number of PHP processes as ${MAX_PHP_PROCESSES}. You may want to tune this value due to variations in your configuration. It is not unusual to see values between 10-100 in production configurations."

echo " Configuring NGINX Unit to use PHP and WordPress"
cat > /tmp/wordpress.json << EOM
{
  "settings": {
    "http": {
      "header_read_timeout": 30,
      "body_read_timeout": 30,
      "send_timeout": 30,
      "idle_timeout": 180,
      "max_body_size": $(numfmt --from=iec ${UPLOAD_MAX_FILESIZE})
    }
  },
  "listeners": {
    "127.0.0.1:8080": {
      "pass": "routes/wordpress"
    }
  },
  "routes": {
    "wordpress": [
      {
        "match": {
          "uri": [
            "*.php",
            "*.php/*",
            "/wp-admin/"
          ]
        },
        "action": {
          "pass": "applications/wordpress/direct"
        }
      },
      {
        "action": {
          "share": "/var/www/wordpress",
          "fallback": {
            "pass": "applications/wordpress/index"
          }
        }
      }
    ]
  },
  "applications": {
    "wordpress": {
      "type": "php",
      "user": "www-data",
      "group": "www-data",
      "processes": {
        "max": ${MAX_PHP_PROCESSES},
        "spare": 1
      },
      "isolation": {
        ${NAMESPACES}
      },
      "targets": {
        "direct": {
          "root": "/var/www/wordpress/"
        },
        "index": {
          "root": "/var/www/wordpress/",
          "script": "index.php"
        }
      }
    }
  }
}
EOM

curl -X PUT --data-binary @/tmp/wordpress.json --unix-socket /run/control.unit.sock http://localhost/config

NGINX เจธเฉˆเฉฑเจŸเจ…เฉฑเจช เจ•เฉ€เจคเจพ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ

เจฎเฉ‚เจฒ NGINX เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐเจจเจพ

เจธเจ•เฉเจฐเจฟเจชเจŸ NGINX เจ•เฉˆเจธเจผ เจฒเจˆ เจ‡เฉฑเจ• เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจซเจฟเจฐ เจฎเฉเฉฑเจ– เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจˆเจฒ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆ nginx.conf. เจนเฉˆเจ‚เจกเจฒเจฐ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจ…เจคเฉ‡ เจ…เฉฑเจชเจฒเฉ‹เจก เจฒเจˆ เจตเฉฑเจง เจคเฉ‹เจ‚ เจตเฉฑเจง เจซเจพเจˆเจฒ เจ†เจ•เจพเจฐ เจฆเฉ€ เจธเฉˆเจŸเจฟเฉฐเจ— เจตเฉฑเจฒ เจงเจฟเจ†เจจ เจฆเจฟเจ“เฅค เจ‡เฉฑเจฅเฉ‡ เจ‡เฉฑเจ• เจฒเจพเจˆเจจ เจตเฉ€ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจ…เจ—เจฒเฉ‡ เจญเจพเจ— เจตเจฟเฉฑเจš เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เฉฐเจชเจฐเฉˆเจธเจผเจจ เจธเฉˆเจŸเจฟเฉฐเจ—เจœเจผ เจซเจพเจˆเจฒ เจธเจผเจพเจฎเจฒ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจ‡เจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจ•เฉˆเจšเจฟเฉฐเจ— เจธเฉˆเจŸเจฟเฉฐเจ—เจœเจผเฅค

เจธเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉ‹เจก

# Make directory for NGINX cache
mkdir -p /var/cache/nginx/proxy

echo " Configuring NGINX"
cat > ${NGINX_CONF_DIR}/nginx.conf << EOM
user nginx;
worker_processes auto;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       ${NGINX_CONF_DIR}/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    client_max_body_size ${UPLOAD_MAX_FILESIZE};
    keepalive_timeout  65;
    # gzip settings
    include ${NGINX_CONF_DIR}/gzip_compression.conf;
    # Cache settings
    proxy_cache_path /var/cache/nginx/proxy
        levels=1:2
        keys_zone=wp_cache:10m
        max_size=10g
        inactive=60m
        use_temp_path=off;
    include ${NGINX_CONF_DIR}/conf.d/*.conf;
}
EOM

NGINX เจ•เฉฐเจชเจฐเฉˆเจธเจผเจจ เจธเฉˆเฉฑเจŸเจ…เฉฑเจช เจ•เฉ€เจคเจพ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ

เจ—เจพเจนเจ•เจพเจ‚ เจจเฉ‚เฉฐ เจญเฉ‡เจœเจฃ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจธเจฎเฉฑเจ—เจฐเฉ€ เจจเฉ‚เฉฐ เจธเฉฐเจ•เฉเจšเจฟเจค เจ•เจฐเจจเจพ เจธเจพเจˆเจŸ เจฆเฉ€ เจ•เจพเจฐเจ—เฉเจœเจผเจพเจฐเฉ€ เจจเฉ‚เฉฐ เจฌเจฟเจนเจคเจฐ เจฌเจฃเจพเจ‰เจฃ เจฆเจพ เจ‡เฉฑเจ• เจตเจงเฉ€เจ† เจคเจฐเฉ€เจ•เจพ เจนเฉˆ, เจชเจฐ เจธเจฟเจฐเจซ เจคเจพเจ‚ เจนเฉ€ เจœเฉ‡เจ•เจฐ เจ•เฉฐเจชเจฐเฉˆเจธเจผเจจ เจจเฉ‚เฉฐ เจธเจนเฉ€ เจขเฉฐเจ— เจจเจพเจฒ เจธเฉฐเจฐเจšเจฟเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค เจธเจ•เฉเจฐเจฟเจชเจŸ เจฆเจพ เจ‡เจน เจญเจพเจ— เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ 'เจคเฉ‡ เจ…เจงเจพเจฐเจค เจนเฉˆ เจ‡เฉฑเจฅเฉ‹เจ‚.

เจธเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉ‹เจก

cat > ${NGINX_CONF_DIR}/gzip_compression.conf << 'EOM'
# Credit: https://github.com/h5bp/server-configs-nginx/
# ----------------------------------------------------------------------
# | Compression                                                        |
# ----------------------------------------------------------------------
# https://nginx.org/en/docs/http/ngx_http_gzip_module.html
# Enable gzip compression.
# Default: off
gzip on;
# Compression level (1-9).
# 5 is a perfect compromise between size and CPU usage, offering about 75%
# reduction for most ASCII files (almost identical to level 9).
# Default: 1
gzip_comp_level 6;
# Don't compress anything that's already small and unlikely to shrink much if at
# all (the default is 20 bytes, which is bad as that usually leads to larger
# files after gzipping).
# Default: 20
gzip_min_length 256;
# Compress data even for clients that are connecting to us via proxies,
# identified by the "Via" header (required for CloudFront).
# Default: off
gzip_proxied any;
# Tell proxies to cache both the gzipped and regular version of a resource
# whenever the client's Accept-Encoding capabilities header varies;
# Avoids the issue where a non-gzip capable client (which is extremely rare
# today) would display gibberish if their proxy gave them the gzipped version.
# Default: off
gzip_vary on;
# Compress all output labeled with one of the following MIME-types.
# `text/html` is always compressed by gzip module.
# Default: text/html
gzip_types
  application/atom+xml
  application/geo+json
  application/javascript
  application/x-javascript
  application/json
  application/ld+json
  application/manifest+json
  application/rdf+xml
  application/rss+xml
  application/vnd.ms-fontobject
  application/wasm
  application/x-web-app-manifest+json
  application/xhtml+xml
  application/xml
  font/eot
  font/otf
  font/ttf
  image/bmp
  image/svg+xml
  text/cache-manifest
  text/calendar
  text/css
  text/javascript
  text/markdown
  text/plain
  text/xml
  text/vcard
  text/vnd.rim.location.xloc
  text/vtt
  text/x-component
  text/x-cross-domain-policy;
EOM

เจตเจฐเจกเจชเจฐเฉˆเจธ เจฒเจˆ NGINX เจธเฉˆเจŸ เจ…เจช เจ•เจฐเจจเจพ

เจ…เฉฑเจ—เฉ‡, เจธเจ•เฉเจฐเจฟเจชเจŸ เจตเจฐเจกเจชเจฐเฉˆเจธ เจฒเจˆ เจ‡เฉฑเจ• เจ•เฉŒเจ‚เจซเจฟเจ—เจฐเฉ‡เจธเจผเจจ เจซเจพเจˆเจฒ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆ default.conf เจ•เฉˆเจŸเจพเจฒเจพเจ— เจตเจฟเจš conf.d. เจ‡เจน เจ‡เฉฑเจฅเฉ‡ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ:

  • Certbot เจฆเฉเจ†เจฐเจพ Let's Encrypt เจคเฉ‹เจ‚ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ‡ TLS เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฐเจ—เจฐเจฎ เจ•เจฐเจจเจพ (เจ‡เจธ เจจเฉ‚เฉฐ เจธเฉˆเฉฑเจŸ เจ•เจฐเจจเจพ เจ…เจ—เจฒเฉ‡ เจญเจพเจ— เจตเจฟเฉฑเจš เจนเฉ‹เจตเฉ‡เจ—เจพ)
  • Let's Encrypt เจฆเฉ€เจ†เจ‚ เจธเจฟเจซเจผเจพเจฐเจธเจผเจพเจ‚ เจฆเฉ‡ เจ†เจงเจพเจฐ 'เจคเฉ‡ TLS เจธเฉเจฐเฉฑเจ–เจฟเจ† เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐเจจเจพ
  • เจชเฉ‚เจฐเจต-เจจเจฟเจฐเจงเจพเจฐเจค เจคเฉŒเจฐ 'เจคเฉ‡ 1 เจ˜เฉฐเจŸเฉ‡ เจฒเจˆ เจ•เฉˆเจšเจฟเฉฐเจ— เจ›เฉฑเจกเจฃ เจฆเฉ€เจ†เจ‚ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจธเจฎเจฐเฉฑเจฅ เจฌเจฃเจพเจ“
  • เจฆเฉ‹ เจ†เจฎ เจฌเฉ‡เจจเจคเฉ€ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจฒเจˆ เจเจ•เจธเฉˆเจธ เจฒเฉŒเจ—เจฟเฉฐเจ—, เจจเจพเจฒ เจนเฉ€ เจ—เจฒเจคเฉ€ เจฒเฉŒเจ—เจฟเฉฐเจ— เจจเฉ‚เฉฐ เจ…เจธเจฎเจฐเฉฑเจฅ เจฌเจฃเจพเจ“ เจœเฉ‡เจ•เจฐ เจซเจพเจˆเจฒ เจจเจนเฉ€เจ‚ เจฎเจฟเจฒเจฆเฉ€ เจนเฉˆ: favicon.ico เจ…เจคเฉ‡ robots.txt
  • เจฒเฉเจ•เฉ€เจ†เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจ…เจคเฉ‡ เจ•เฉเจ เจซเจพเจˆเจฒเจพเจ‚ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจจเฉ‚เฉฐ เจฐเฉ‹เจ•เฉ‹ .phpเจ—เฉˆเจฐ-เจ•เจพเจจเฉ‚เฉฐเจจเฉ€ เจชเจนเฉเฉฐเจš เจœเจพเจ‚ เจ…เจฃเจ‡เฉฑเจ›เจค เจธเจผเฉเจฐเฉ‚เจ†เจค เจจเฉ‚เฉฐ เจฐเฉ‹เจ•เจฃ เจฒเจˆ
  • เจธเจฅเจฟเจฐ เจ…เจคเฉ‡ เจซเฉŒเจ‚เจŸ เจซเจพเจˆเจฒเจพเจ‚ เจฒเจˆ เจชเจนเฉเฉฐเจš เจฒเฉŒเจ—เจฟเฉฐเจ— เจจเฉ‚เฉฐ เจ…เจธเจฎเจฐเฉฑเจฅ เจฌเจฃเจพเจ“
  • เจธเจฟเจฐเจฒเฉ‡เจ– เจธเฉˆเจŸเจฟเฉฐเจ— เจชเจนเฉเฉฐเจš-เจจเจฟเจฏเฉฐเจคเจฐเจฃ-เจฎเจจเจœเจผเฉ‚เจฐ-เจฎเฉ‚เจฒ เจซเฉŒเจ‚เจŸ เจซเจพเจˆเจฒเจพเจ‚ เจฒเจˆ
  • index.php เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจธเจŸเฉˆเจŸเจฟเจ•เจธ เจฒเจˆ เจฐเฉ‚เจŸเจฟเฉฐเจ— เจœเฉ‹เฉœเจจเจพ.

เจธเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉ‹เจก

cat > ${NGINX_CONF_DIR}/conf.d/default.conf << EOM
upstream unit_php_upstream {
    server 127.0.0.1:8080;
    keepalive 32;
}
server {
    listen 80;
    listen [::]:80;
    # ACME-challenge used by Certbot for Let's Encrypt
    location ^~ /.well-known/acme-challenge/ {
      root /var/www/certbot;
    }
    location / {
      return 301 https://${TLS_HOSTNAME}$request_uri;
    }
}
server {
    listen      443 ssl http2;
    listen [::]:443 ssl http2;
    server_name ${TLS_HOSTNAME};
    root        /var/www/wordpress/;
    # Let's Encrypt configuration
    ssl_certificate         ${CERT_DIR}/fullchain.pem;
    ssl_certificate_key     ${CERT_DIR}/privkey.pem;
    ssl_trusted_certificate ${CERT_DIR}/chain.pem;
    include ${NGINX_CONF_DIR}/options-ssl-nginx.conf;
    ssl_dhparam ${NGINX_CONF_DIR}/ssl-dhparams.pem;
    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    # Proxy caching
    proxy_cache wp_cache;
    proxy_cache_valid 200 302 1h;
    proxy_cache_valid 404 1m;
    proxy_cache_revalidate on;
    proxy_cache_background_update on;
    proxy_cache_lock on;
    proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # Deny all attempts to access hidden files such as .htaccess, .htpasswd,
    # .DS_Store (Mac)
    # Keep logging the requests to parse later (or to pass to firewall utilities
    # such as fail2ban)
    location ~ /. {
        deny all;
    }
    # Deny access to any files with a .php extension in the uploads directory;
    # works in subdirectory installs and also in multi-site network.
    # Keep logging the requests to parse later (or to pass to firewall utilities
    # such as fail2ban).
    location ~* /(?:uploads|files)/.*.php$ {
        deny all;
    }
    # WordPress: deny access to wp-content, wp-includes PHP files
    location ~* ^/(?:wp-content|wp-includes)/.*.php$ {
        deny all;
    }
    # Deny public access to wp-config.php
    location ~* wp-config.php {
        deny all;
    }
    # Do not log access for static assets, media
    location ~* .(?:css(.map)?|js(.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
        access_log off;
    }
    location ~* .(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
        add_header Access-Control-Allow-Origin "*";
        access_log off;
    }
    location / {
        try_files $uri @index_php;
    }
    location @index_php {
        proxy_socket_keepalive on;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass       http://unit_php_upstream;
    }
    location ~* .php$ {
        proxy_socket_keepalive on;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        try_files        $uri =404;
        proxy_pass       http://unit_php_upstream;
    }
}
EOM

Let's Encrypt เจคเฉ‹เจ‚ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸเจพเจ‚ เจฒเจˆ Certbot เจธเฉˆเจŸ เจ…เจช เจ•เจฐเจจเจพ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจธเจตเฉˆ-เจจเจตเฉ€เจจเฉ€เจ•เจฐเจจ เจ•เจฐเจจเจพ

Certbot เจ‡เจฒเฉˆเจ•เจŸเฉเจฐเจพเจจเจฟเจ• เจซเจฐเฉฐเจŸเฉ€เจ…เจฐ เจซเจพเจŠเจ‚เจกเฉ‡เจธเจผเจจ (EFF) เจฆเจพ เจ‡เฉฑเจ• เจฎเฉเจซเจค เจŸเฉ‚เจฒ เจนเฉˆ เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ Let's Encrypt เจคเฉ‹เจ‚ TLS เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจ…เจคเฉ‡ เจ†เจชเจฃเฉ‡ เจ†เจช เจฐเฉ€เจจเจฟเจŠ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค เจธเจ•เฉเจฐเจฟเจชเจŸ NGINX เจตเจฟเฉฑเจš Let's Encrypt เจคเฉ‹เจ‚ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸเจพเจ‚ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจจ เจฒเจˆ Certbot เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐเจจ เจฒเจˆ เจนเฉ‡เจ  เจฒเจฟเจ–เฉ€เจ†เจ‚ เจ—เฉฑเจฒเจพเจ‚ เจ•เจฐเจฆเฉ€ เจนเฉˆ:

  • NGINX เจจเฉ‚เฉฐ เจฐเฉ‹เจ•เจฆเจพ เจนเฉˆ
  • เจธเจฟเจซเจผเจพเจฐเจฟเจธเจผ เจ•เฉ€เจคเฉ€เจ†เจ‚ TLS เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจกเจพเจŠเจจเจฒเฉ‹เจก
  • เจธเจพเจˆเจŸ เจฒเจˆ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจธเจฐเจŸเจฌเฉ‹เจŸ เจšเจฒเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ
  • เจชเฉเจฐเจฎเจพเจฃ-เจชเฉฑเจคเจฐเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฒเจˆ NGINX เจจเฉ‚เฉฐ เจฎเฉเฉœ-เจšเจพเจฒเฉ‚ เจ•เจฐเจฆเจพ เจนเฉˆ
  • Certbot เจจเฉ‚เฉฐ เจฐเฉ‹เจœเจผเจพเจจเจพ เจธเจตเฉ‡เจฐเฉ‡ 3:24 เจตเจœเฉ‡ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐเจฆเจพ เจนเฉˆ เจ•เจฟ เจ•เฉ€ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸเจพเจ‚ เจจเฉ‚เฉฐ เจจเจตเจฟเจ†เจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ, เจ…เจคเฉ‡ เจœเฉ‡ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡, เจคเจพเจ‚ เจจเจตเฉ‡เจ‚ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐเฉ‹ เจ…เจคเฉ‡ NGINX เจจเฉ‚เฉฐ เจฎเฉเฉœ เจšเจพเจฒเฉ‚ เจ•เจฐเฉ‹เฅค

เจธเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉ‹เจก

echo " Stopping NGINX in order to set up Let's Encrypt"
service nginx stop

mkdir -p /var/www/certbot
chown www-data:www-data /var/www/certbot
chmod g+s /var/www/certbot

if [ ! -f ${NGINX_CONF_DIR}/options-ssl-nginx.conf ]; then
  echo " Downloading recommended TLS parameters"
  curl --retry 6 -Ls -z "Tue, 14 Apr 2020 16:36:07 GMT" 
    -o "${NGINX_CONF_DIR}/options-ssl-nginx.conf" 
    "https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf" 
    || echo "Couldn't download latest options-ssl-nginx.conf"
fi

if [ ! -f ${NGINX_CONF_DIR}/ssl-dhparams.pem ]; then
  echo " Downloading recommended TLS DH parameters"
  curl --retry 6 -Ls -z "Tue, 14 Apr 2020 16:49:18 GMT" 
    -o "${NGINX_CONF_DIR}/ssl-dhparams.pem" 
    "https://raw.githubusercontent.com/certbot/certbot/master/certbot/certbot/ssl-dhparams.pem" 
    || echo "Couldn't download latest ssl-dhparams.pem"
fi

# If tls_certs_init.sh hasn't been run before, remove the self-signed certs
if [ ! -d "/etc/letsencrypt/accounts" ]; then
  echo " Removing self-signed certificates"
  rm -rf "${CERT_DIR}"
fi

if [ "" = "${LETS_ENCRYPT_STAGING:-}" ] || [ "0" = "${LETS_ENCRYPT_STAGING}" ]; then
  CERTBOT_STAGING_FLAG=""
else
  CERTBOT_STAGING_FLAG="--staging"
fi

if [ ! -f "${CERT_DIR}/fullchain.pem" ]; then
  echo " Generating certificates with Let's Encrypt"
  certbot certonly --standalone 
         -m "${WORDPRESS_ADMIN_EMAIL}" 
         ${CERTBOT_STAGING_FLAG} 
         --agree-tos --force-renewal --non-interactive 
         -d "${TLS_HOSTNAME}"
fi

echo " Starting NGINX in order to use new configuration"
service nginx start

# Write crontab for periodic Let's Encrypt cert renewal
if [ "$(crontab -l | grep -m1 'certbot renew')" == "" ]; then
  echo " Adding certbot to crontab for automatic Let's Encrypt renewal"
  (crontab -l 2>/dev/null; echo "24 3 * * * certbot renew --nginx --post-hook 'service nginx reload'") | crontab -
fi

เจคเฉเจนเจพเจกเฉ€ เจธเจพเจˆเจŸ เจฆเฉ€ เจตเจพเจงเฉ‚ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ

เจ…เจธเฉ€เจ‚ เจ‰เฉฑเจชเจฐ เจ—เฉฑเจฒ เจ•เฉ€เจคเฉ€ เจนเฉˆ เจ•เจฟ เจธเจพเจกเฉ€ เจธเจ•เฉเจฐเจฟเจชเจŸ NGINX เจ…เจคเฉ‡ NGINX เจฏเฉ‚เจจเจฟเจŸ เจจเฉ‚เฉฐ TLSSSL เจธเจฎเจฐเจฅเจฟเจค เจชเฉเจฐเฉ‹เจกเจ•เจธเจผเจจ-เจคเจฟเจ†เจฐ เจธเจพเจˆเจŸ เจฆเฉ€ เจธเฉ‡เจตเจพ เจ•เจฐเจจ เจฒเจˆ เจ•เจฟเจตเฉ‡เจ‚ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเฉ€เจ†เจ‚ เจฒเฉ‹เฉœเจพเจ‚ เจฆเฉ‡ เจ†เจงเจพเจฐ 'เจคเฉ‡, เจญเจตเจฟเฉฑเจ– เจตเจฟเฉฑเจš เจตเฉ€ เจธเจผเจพเจฎเจฒ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

  • เจธเจนเจฟเจฏเฉ‹เจ— เจฌเฉเจฐเฉ‹เจŸเฉ€เจฒเฉ€, HTTPS เจ‰เฉฑเจคเฉ‡ เจ‰เฉฑเจกเจฆเฉ‡ เจนเฉ‹เจ เจธเฉฐเจ•เฉเจšเจจ เจตเจฟเฉฑเจš เจธเฉเจงเจพเจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ
  • เจฎเจพเจก เจธเฉเจฐเฉฑเจ–เจฟเจ† ั เจตเจฐเจกเจชเจฐเฉˆเจธ เจฒเจˆ เจจเจฟเจฏเจฎเจคเฉเจนเจพเจกเฉ€ เจธเจพเจˆเจŸ 'เจคเฉ‡ เจธเจตเฉˆเจšเจฒเจฟเจค เจนเจฎเจฒเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจฐเฉ‹เจ•เจฃ เจฒเจˆ
  • เจฌเฉˆเจ• เจ…เจช เจตเจฐเจกเจชเจฐเฉˆเจธ เจฒเจˆ เจœเฉ‹ เจคเฉเจนเจพเจกเฉ‡ เจฒเจˆ เจ…เจจเฉเจ•เฉ‚เจฒ เจนเฉˆ
  • เจธเฉเจฐเฉฑเจ–เจฟเจ† เจฆเฉ€ เจธเจนเจพเจ‡เจคเจพ เจจเจพเจฒ เจเจชเจ…เจฐเจฎเฉ‹เจฐ (เจ‰เจฌเฉฐเจŸเฉ‚ เจ‰เฉฑเจคเฉ‡)
  • เจชเฉ‹เจธเจŸเจซเจฟเจ•เจธ เจœเจพเจ‚ msmtp เจคเจพเจ‚ เจ•เจฟ เจตเจฐเจกเจชเจฐเฉˆเจธ เจฎเฉ‡เจฒ เจญเฉ‡เจœ เจธเจ•เฉ‡
  • เจคเฉเจนเจพเจกเฉ€ เจธเจพเจˆเจŸ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจœเจพ เจฐเจนเฉ€ เจนเฉˆ เจคเจพเจ‚ เจœเฉ‹ เจคเฉเจธเฉ€เจ‚ เจธเจฎเจ เจธเจ•เฉ‹ เจ•เจฟ เจ‡เจน เจ•เจฟเฉฐเจจเฉ€ เจŸเฉเจฐเฉˆเจซเจฟเจ• เจจเฉ‚เฉฐ เจธเฉฐเจญเจพเจฒ เจธเจ•เจฆเฉ€ เจนเฉˆ

เจนเฉ‹เจฐ เจตเฉ€ เจฌเจฟเจนเจคเจฐ เจธเจพเจˆเจŸ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจ‡เจธ 'เจคเฉ‡ เจ…เฉฑเจชเจ—เฉเจฐเฉ‡เจก เจ•เจฐเจจ เจฆเฉ€ เจธเจฟเจซเจผเจพเจฐเจฟเจธเจผ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ NGINX เจชเจฒเฉฑเจธ, เจ“เจชเจจ เจธเฉ‹เจฐเจธ NGINX 'เจคเฉ‡ เจ†เจงเจพเจฐเจฟเจค เจธเจพเจกเจพ เจตเจชเจพเจฐเจ•, โ€‹โ€‹เจเจ‚เจŸเจฐเจชเฉเจฐเจพเจˆเจœเจผ-เจ—เจฐเฉ‡เจก เจ‰เจคเจชเจพเจฆเฅค เจ‡เจธเจฆเฉ‡ เจ—เจพเจนเจ•เจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ—เจคเฉ€เจธเจผเฉ€เจฒ เจคเฉŒเจฐ 'เจคเฉ‡ เจฒเฉ‹เจก เจ•เฉ€เจคเฉ‡ เจฌเจฐเฉ‹เจŸเจฒเฉ€ เจฎเฉ‹เจกเฉ€เจŠเจฒ เจฆเฉ‡ เจจเจพเจฒ-เจจเจพเจฒ (เจ‡เฉฑเจ• เจตเจพเจงเฉ‚ เจซเฉ€เจธ เจฒเจˆ) เจชเฉเจฐเจพเจชเจค เจนเฉ‹เจตเฉ‡เจ—เจพเฅค NGINX ModSecurity WAF. เจ…เจธเฉ€เจ‚ เจตเฉ€ เจชเฉ‡เจธเจผ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ NGINX เจเจช เจชเฉเจฐเฉ‹เจŸเฉˆเจ•เจŸ, F5 เจคเฉ‹เจ‚ เจ‰เจฆเจฏเฉ‹เจ—-เจชเฉเจฐเจฎเฉเฉฑเจ– เจธเฉเจฐเฉฑเจ–เจฟเจ† เจคเจ•เจจเจพเจฒเฉ‹เจœเฉ€ 'เจคเฉ‡ เจ†เจงเจพเจฐเจฟเจค NGINX Plus เจฒเจˆ เจ‡เฉฑเจ• WAF เจฎเฉ‹เจกเฉ€เจŠเจฒเฅค

NB เจ‡เฉฑเจ• เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจฒเฉ‹เจก เจ•เฉ€เจคเฉ€ เจธเจพเจˆเจŸ เจฆเฉ‡ เจธเจฎเจฐเจฅเจจ เจฒเจˆ, เจคเฉเจธเฉ€เจ‚ เจฎเจพเจนเจฐเจพเจ‚ เจจเจพเจฒ เจธเฉฐเจชเจฐเจ• เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจธเจพ Southเจฅเจฌเฉเจฐเจฟเจœ. เจ…เจธเฉ€เจ‚ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจฒเฉ‹เจก เจฆเฉ‡ เจ…เจงเฉ€เจจ เจคเฉเจนเจพเจกเฉ€ เจตเฉˆเจฌเจธเจพเจˆเจŸ เจœเจพเจ‚ เจธเฉ‡เจตเจพ เจฆเฉ‡ เจคเฉ‡เจœเจผ เจ…เจคเฉ‡ เจญเจฐเฉ‹เจธเฉ‡เจฎเฉฐเจฆ เจธเฉฐเจšเจพเจฒเจจ เจจเฉ‚เฉฐ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจตเจพเจ‚เจ—เฉ‡เฅค

เจธเจฐเฉ‹เจค: www.habr.com