Ansible เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ‡เฉฑเจ• เจฐเฉ‡เจฒ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจคเฉˆเจจเจพเจค เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจธเจฐเจตเจฐ เจธเฉˆเจŸ เจ•เจฐเจจเจพ

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

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

เจธเจพเจจเฉ‚เฉฐ เจ•เฉ€ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ?

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจฎเฉˆเจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ•เจฟเจนเจพ เจนเฉˆ, เจ‡เฉฑเจ• เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจฒเจฟเจ–เจฃ เจฒเจˆ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจน เจœเจพเจฃเจจ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจ•เฉ€ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเจจเจพ เจนเฉˆเฅค เจ†เจ“ เจซเฉˆเจธเจฒเจพ เจ•เจฐเฉ€เจ เจ•เจฟ เจธเจพเจจเฉ‚เฉฐ เจ•เฉ€ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจฐเฉ‡เจฒเจœเจผ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฒเจˆ เจธเจพเจจเฉ‚เฉฐ เจ•เจˆ เจธเจฟเจธเจŸเจฎ เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡เจ—เฉ€: nginx, postgresql (redis, เจ†เจฆเจฟ)เฅค เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจธเจพเจจเฉ‚เฉฐ เจฐเฉ‚เจฌเฉ€ เจฆเฉ‡ เจ‡เฉฑเจ• เจ–เจพเจธ เจธเฉฐเจธเจ•เจฐเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ. เจ‡เจธเจจเฉ‚เฉฐ rbenv (rvm, asdf...) เจฐเจพเจนเฉ€เจ‚ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเจจเจพ เจธเจญ เจคเฉ‹เจ‚ เจตเจงเฉ€เจ† เจนเฉˆเฅค เจ‡เฉฑเจ• เจฐเฉ‚เจŸ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฆเฉ‡ เจคเฉŒเจฐ เจคเฉ‡ เจ‡เจน เจธเจญ เจšเจฒเจพเจ‰เจฃเจพ เจนเจฎเฉ‡เจธเจผเจพเจ‚ เจ‡เฉฑเจ• เจฌเฉเจฐเจพ เจตเจฟเจšเจพเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจ‡เจธ เจฒเจˆ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเจพ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฌเจฃเจพเจ‰เจฃ เจ…เจคเฉ‡ เจ‰เจธเจฆเฉ‡ เจ…เจงเจฟเจ•เจพเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจ‡เจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจพเจกเฉ‡ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจธเจฐเจตเจฐ 'เจคเฉ‡ เจ…เจชเจฒเฉ‹เจก เจ•เจฐเจจ, nginx, postgres, เจ†เจฆเจฟ เจฒเจˆ เจธเฉฐเจฐเจšเจจเจพ เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเจจ เจ…เจคเฉ‡ เจ‡เจน เจธเจพเจฐเฉ€เจ†เจ‚ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚, เจ•เจพเจฐเจตเจพเจˆเจ†เจ‚ เจฆเจพ เจ•เฉเจฐเจฎ เจนเฉ‡เจ  เจฒเจฟเจ–เฉ‡ เจ…เจจเฉเจธเจพเจฐ เจนเฉˆ:

  1. เจฐเฉ‚เจŸ เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจฒเจพเจ—เจ‡เจจ เจ•เจฐเฉ‹
  2. เจธเจฟเจธเจŸเจฎ เจชเฉˆเจ•เฉ‡เจœ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเฉ‹
  3. เจ‡เฉฑเจ• เจจเจตเจพเจ‚ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฌเจฃเจพเจ“, เจ…เจงเจฟเจ•เจพเจฐเจพเจ‚ เจฆเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจ•เจฐเฉ‹, ssh เจ•เฉเฉฐเจœเฉ€
  4. เจธเจฟเจธเจŸเจฎ เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ (nginx เจ†เจฆเจฟ) เจจเฉ‚เฉฐ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ“
  5. เจ…เจธเฉ€เจ‚ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ (เจคเฉเจธเฉ€เจ‚ เจคเฉเจฐเฉฐเจค เจ‡เฉฑเจ• เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฌเจฃเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹)
  6. เจ‡เฉฑเจ• เจจเจตเฉ‡เจ‚ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจตเจœเฉ‹เจ‚ เจฒเฉŒเจ—เจ‡เจจ เจ•เจฐเฉ‹
  7. rbenv เจ…เจคเฉ‡ ruby โ€‹โ€‹เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเฉ‹
  8. เจฌเฉฐเจกเจฒ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เฉ€เจคเจพ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ
  9. เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจ•เฉ‹เจก เจ…เฉฑเจชเจฒเฉ‹เจก เจ•เฉ€เจคเจพ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ
  10. Puma เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจฒเจพเจ‚เจš เจ•เฉ€เจคเจพ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ

เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจ†เจ–เจฐเฉ€ เจชเฉœเจพเจ… เจ•เฉˆเจชเจฟเจธเจŸเฉเจฐเจพเจจเฉ‹ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ•เฉ€เจคเฉ‡ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเจจ, เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจฌเจ•เจธเฉ‡ เจคเฉ‹เจ‚ เจฌเจพเจนเจฐ เจ‡เจน เจฐเฉ€เจฒเฉ€เจœเจผ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจ•เฉ‹เจก เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ, เจธเจซเจฒ เจคเฉˆเจจเจพเจคเฉ€ 'เจคเฉ‡ เจธเจฟเจฎเจฒเจฟเฉฐเจ• เจจเจพเจฒ เจฐเฉ€เจฒเฉ€เจœเจผ เจจเฉ‚เฉฐ เจธเจตเจฟเจš เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ, เจธเจพเจ‚เจเฉ€ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจคเฉ‹เจ‚ เจ•เฉŒเจ‚เจซเจฟเจ—เจธ เจ•เจพเจชเฉ€ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ, เจชเฉเจฎเจพ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจšเจพเจฒเฉ‚ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ, เจ†เจฆเจฟเฅค เจ‡เจน เจธเจญ Ansible เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจชเจฐ เจ•เจฟเจ‰เจ‚?

เจซเจพเจˆเจฒ เจฌเจฃเจคเจฐ

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

เจธเจงเจพเจฐเจจ เจชเจฒเฉ‡เจฌเฉเฉฑเจ•

เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจ‡เฉฑเจ• yml เจซเจพเจˆเจฒ เจนเฉˆ เจœเฉ‹, เจตเจฟเจธเจผเฉ‡เจธเจผ เจธเฉฐเจŸเฉˆเจ•เจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ, เจตเจฐเจฃเจจ เจ•เจฐเจฆเฉ€ เจนเฉˆ เจ•เจฟ Ansible เจจเฉ‚เฉฐ เจ•เฉ€ เจ•เจฐเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจ†เจ“ เจชเจนเจฟเจฒเฉ€ เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจฌเจฃเจพเจˆเจ เจœเฉ‹ เจ•เฉเจ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเฉ€:

---
- name: Simple playbook
  hosts: all

เจ‡เฉฑเจฅเฉ‡ เจ…เจธเฉ€เจ‚ เจธเจฟเจฐเจซเจผ เจ‡เจน เจ•เจนเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจธเจพเจกเฉ€ เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจจเฉ‚เฉฐ เจ•เจฟเจนเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ Simple Playbook เจ…เจคเฉ‡ เจ‡เจน เจ•เจฟ เจ‡เจธเจฆเฉ€ เจธเจฎเฉฑเจ—เจฐเฉ€ เจจเฉ‚เฉฐ เจธเจพเจฐเฉ‡ เจฎเฉ‡เจœเจผเจฌเจพเจจเจพเจ‚ เจฒเจˆ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ /ansible เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจจเจพเจฎ เจจเจพเจฒ เจธเฉ‡เจต เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ playbook.yml เจ…เจคเฉ‡ เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ‹:

ansible-playbook ./playbook.yml

PLAY [Simple Playbook] ************************************************************************************************************************************
skipping: no hosts matched

เจœเจตเจพเจฌเจฆเฉ‡เจน เจ•เจนเจฟเฉฐเจฆเจพ เจนเฉˆ เจ•เจฟ เจ‡เจน เจ•เจฟเจธเฉ‡ เจตเฉ€ เจฎเฉ‡เจœเจผเจฌเจพเจจ เจจเฉ‚เฉฐ เจจเจนเฉ€เจ‚ เจœเจพเจฃเจฆเจพ เจœเฉ‹ เจธเจพเจฐเฉ€ เจธเฉ‚เจšเฉ€ เจจเจพเจฒ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจตเจฟเจธเจผเฉ‡เจธเจผ เจตเจฟเฉฑเจš เจธเฉ‚เจšเฉ€เจฌเฉฑเจง เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ เจตเจธเจคเฉ‚ เจธเฉ‚เจšเฉ€.

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

123.123.123.123

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

ansible-playbook ./playbook.yml -i inventory
PLAY [Simple Playbook] ************************************************************************************************************************************

TASK [Gathering Facts] ************************************************************************************************************************************

PLAY RECAP ************************************************************************************************************************************

เจœเฉ‡เจ•เจฐ เจคเฉเจนเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจจเจฟเจธเจผเจšเจฟเจค เจนเฉ‹เจธเจŸ เจคเฉฑเจ• ssh เจชเจนเฉเฉฐเจš เจนเฉˆ, เจคเจพเจ‚ ansible เจฐเจฟเจฎเฉ‹เจŸ เจธเจฟเจธเจŸเจฎ เจฌเจพเจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจจเฉ‚เฉฐ เจ•เจจเฉˆเจ•เจŸ เจ…เจคเฉ‡ เจ‡เจ•เฉฑเจคเจฐ เจ•เจฐเฉ‡เจ—เจพเฅค (เจกเจฟเจซเจพเจฒเจŸ เจŸเจพเจธเจ• [เจ—เฉˆเจฆเจฐเจฟเฉฐเจ— เจซเฉˆเจ•เจŸเจธ]) เจœเจฟเจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจ‡เจน เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ (เจชเจฒเฉ‡ เจฐเฉ€เจ•เฉˆเจช) 'เจคเฉ‡ เจ‡เฉฑเจ• เจ›เฉ‹เจŸเฉ€ เจฐเจฟเจชเฉ‹เจฐเจŸ เจฆเฉ‡เจตเฉ‡เจ—เจพเฅค

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

---
- name: Simple playbook
  hosts: all
  remote_user: root
  become: true
  gather_facts: no

เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจจเฉ‚เฉฐ เจฆเฉเจฌเจพเจฐเจพ เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ“ เจ•เจฟ เจ•เจจเฉˆเจ•เจธเจผเจจ เจ•เฉฐเจฎ เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆเฅค (เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจฐเฉ‚เจŸ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจจเฉ‚เฉฐ เจจเจฟเจธเจผเจšเจฟเจค เจ•เฉ€เจคเจพ เจนเฉˆ, เจคเจพเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‰เฉฑเจšเฉ‡ เจ…เจงเจฟเจ•เจพเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ become: true directive เจจเฉ‚เฉฐ เจตเฉ€ เจจเจฟเจธเจผเจšเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจ—เจฟเจ† เจนเฉˆ: become set to โ€˜trueโ€™/โ€™yesโ€™ to activate privilege escalation. เจนเจพเจฒเจพเจ‚เจ•เจฟ เจ‡เจน เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจธเจชเฉฑเจธเจผเจŸ เจจเจนเฉ€เจ‚ เจนเฉˆ เจ•เจฟ เจ•เจฟเจ‰เจ‚)เฅค

เจธเจผเจพเจ‡เจฆ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจคเฉฑเจฅ เจฆเฉ‡ เจ•เจพเจฐเจจ เจ‡เฉฑเจ• เจ—เจฒเจคเฉ€ เจชเฉเจฐเจพเจชเจค เจ•เจฐเฉ‹เจ—เฉ‡ เจ•เจฟ ansible เจชเจพเจˆเจฅเจจ เจฆเฉเจญเจพเจธเจผเฉ€เจ เจจเฉ‚เฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจจเจนเฉ€เจ‚ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ, เจซเจฟเจฐ เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจนเฉฑเจฅเฉ€เจ‚ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

ansible_python_interpreter: /usr/bin/python3 

เจคเฉเจธเฉ€เจ‚ เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ เจชเจคเจพ เจฒเจ—เจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ•เจฟ เจคเฉเจนเจพเจกเฉ‡ เจ•เฉ‹เจฒ python เจ•เจฟเฉฑเจฅเฉ‡ เจนเฉˆ whereis python.

เจธเจฟเจธเจŸเจฎ เจชเฉˆเจ•เฉ‡เจœ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเจจเจพ

Ansible เจฆเฉ€ เจธเจŸเฉˆเจ‚เจกเจฐเจก เจกเจฟเจธเจŸเฉเจฐเฉ€เจฌเจฟเจŠเจธเจผเจจ เจตเจฟเฉฑเจš เจตเฉฑเจ–-เจตเฉฑเจ– เจธเจฟเจธเจŸเจฎ เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจฎเฉ‹เจกเฉ€เจŠเจฒ เจธเจผเจพเจฎเจฒ เจนเฉเฉฐเจฆเฉ‡ เจนเจจ, เจ‡เจธเจฒเจˆ เจธเจพเจจเฉ‚เฉฐ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจ•เจพเจฐเจจ เจ•เจฐเจ•เฉ‡ เจฌเฉˆเจธเจผ เจธเจ•เฉเจฐเจฟเจชเจŸเจพเจ‚ เจฒเจฟเจ–เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจนเฉเจฃ เจธเจพเจจเฉ‚เฉฐ เจธเจฟเจธเจŸเจฎ เจจเฉ‚เฉฐ เจ…เฉฑเจชเจกเฉ‡เจŸ เจ•เจฐเจจ เจ…เจคเฉ‡ เจธเจฟเจธเจŸเจฎ เจชเฉˆเจ•เฉ‡เจœ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเจจ เจฒเจˆ เจ‡เจนเจจเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจฎเฉ‹เจกเฉ€เจŠเจฒ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจฎเฉ‡เจฐเฉ‡ เจ•เฉ‹เจฒ เจฎเฉ‡เจฐเฉ‡ VPS 'เจคเฉ‡ เจ‰เจฌเฉฐเจŸเฉ‚ เจฒเฉ€เจจเจ•เจธ เจนเฉˆ, เจ‡เจธเจฒเจˆ เจฎเฉ‡เจฐเฉ‡ เจฆเฉเจ†เจฐเจพ เจตเจฐเจคเฉ‡ เจ—เจ เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ เจฒเจˆ apt-get ะธ เจ‡เจธ เจฒเจˆ เจฎเฉ‹เจกเฉ€เจŠเจฒ. เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเฉ‡ เจ“เจชเจฐเฉ‡เจŸเจฟเฉฐเจ— เจธเจฟเจธเจŸเจฎ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจฐเจนเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเฉ‡ เจฎเฉ‹เจกเฉ€เจŠเจฒ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹ เจธเจ•เจฆเฉ€ เจนเฉˆ (เจฏเจพเจฆ เจฐเฉฑเจ–เฉ‹, เจฎเฉˆเจ‚ เจธเจผเฉเจฐเฉ‚ เจตเจฟเฉฑเจš เจ•เจฟเจนเจพ เจธเฉ€ เจ•เจฟ เจธเจพเจจเฉ‚เฉฐ เจชเจนเจฟเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจ‡เจน เจœเจพเจฃเจจ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจ•เฉ€ เจ…เจคเฉ‡ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเจพเจ‚เจ—เฉ‡)เฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจธเฉฐเจŸเฉˆเจ•เจธ เจธเฉฐเจญเจพเจตเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจธเจฎเจพเจจ เจนเฉ‹เจตเฉ‡เจ—เจพเฅค

เจ†เจ‰ เจธเจพเจกเฉ€ เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจจเฉ‚เฉฐ เจชเจนเจฟเจฒเฉ‡ เจ•เฉฐเจฎเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจชเฉ‚เจฐเจ• เจ•เจฐเฉ€เจ:

---
- name: Simple playbook
  hosts: all
  remote_user: root
  become: true
  gather_facts: no

  tasks:
    - name: Update system
      apt: update_cache=yes
    - name: Install system dependencies
      apt:
        name: git,nginx,redis,postgresql,postgresql-contrib
        state: present

เจŸเจพเจธเจ• เจฌเจฟเจฒเจ•เฉเจฒ เจ‰เจน เจ•เฉฐเจฎ เจนเฉˆ เจœเฉ‹ เจœเจตเจพเจฌเฉ€ เจฐเจฟเจฎเฉ‹เจŸ เจธเจฐเจตเจฐเจพเจ‚ 'เจคเฉ‡ เจ•เจฐเฉ‡เจ—เจพเฅค เจ…เจธเฉ€เจ‚ เจ•เฉฐเจฎ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจจเจพเจฎ เจฆเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚ เจคเจพเจ‚ เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจฒเฉŒเจ— เจตเจฟเฉฑเจš เจ‡เจธเจฆเฉ‡ เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจจเฉ‚เฉฐ เจŸเฉเจฐเฉˆเจ• เจ•เจฐ เจธเจ•เฉ€เจเฅค เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจ–เจพเจธ เจฎเฉ‹เจกเฉ€เจŠเจฒ เจฆเฉ‡ เจธเฉฐเจŸเฉˆเจ•เจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจตเจฐเจฃเจจ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ‡เจธเจจเฉ‚เฉฐ เจ•เฉ€ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจ‡เจธ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš apt: update_cache=yes - apt เจฎเฉ‹เจกเฉ€เจŠเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจธเจฟเจธเจŸเจฎ เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจจเฉ‚เฉฐ เจ…เจชเจกเฉ‡เจŸ เจ•เจฐเจจ เจฒเจˆ เจ•เจนเจฟเฉฐเจฆเจพ เจนเฉˆเฅค เจฆเฉ‚เจœเฉ€ เจ•เจฎเจพเจ‚เจก เจฅเฉ‹เฉœเฉ€ เจนเฉ‹เจฐ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจนเฉˆ. เจ…เจธเฉ€เจ‚ เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ apt เจฎเฉ‹เจกเฉ€เจŠเจฒ เจจเฉ‚เฉฐ เจญเฉ‡เจœเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ•เจนเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจ‰เจน เจนเจจ state เจฌเจฃเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ present, เจญเจพเจต, เจ…เจธเฉ€เจ‚ เจ•เจนเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจ‡เจน เจชเฉˆเจ•เฉ‡เจœ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเฉ‹เฅค เจ‡เจธเฉ‡ เจคเจฐเฉเจนเจพเจ‚, เจ…เจธเฉ€เจ‚ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฎเจฟเจŸเจพเจ‰เจฃ เจฒเจˆ เจ•เจนเจฟ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚, เจœเจพเจ‚ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฆเจฒ เจ•เฉ‡ เจ…เจชเจกเฉ‡เจŸ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ state. เจ•เจฟเจฐเจชเจพ เจ•เจฐเจ•เฉ‡ เจงเจฟเจ†เจจ เจฆเจฟเจ“ เจ•เจฟ เจฐเฉ‡เจฒเจพเจ‚ เจฒเจˆ postgresql เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจธเจพเจจเฉ‚เฉฐ postgresql-contrib เจชเฉˆเจ•เฉ‡เจœ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ, เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจนเฉเจฃ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐ เจฐเจนเฉ‡ เจนเจพเจ‚เฅค เจฆเฉเจฌเจพเจฐเจพ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจน เจœเจพเจฃเจจ เจ…เจคเฉ‡ เจ•เจฐเจจ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ; เจœเจตเจพเจฌเจฆเฉ‡เจน เจ†เจชเจฃเฉ‡ เจ†เจช เจ‡เจน เจจเจนเฉ€เจ‚ เจ•เจฐเฉ‡เจ—เจพ.

เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจจเฉ‚เฉฐ เจฆเฉเจฌเจพเจฐเจพ เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจœเจพเจ‚เจš เจ•เจฐเฉ‹ เจ•เจฟ เจชเฉˆเจ•เฉ‡เจœ เจ‡เฉฐเจธเจŸเจพเจฒ เจนเจจเฅค

เจจเจตเฉ‡เจ‚ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฌเจฃเจพเจ‰เจฃเจพ.

เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ, Ansible เจ•เฉ‹เจฒ เจ‡เฉฑเจ• เจฎเฉ‹เจกเฉ€เจŠเจฒ เจตเฉ€ เจนเฉˆ - เจ‰เจชเจญเฉ‹เจ—เจคเจพ. เจšเจฒเฉ‹ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจ•เฉฐเจฎ เจœเฉ‹เฉœเฉ€เจ (เจฎเฉˆเจ‚ เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจฆเฉ‡ เจชเจนเจฟเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจœเจพเจฃเฉ‡-เจชเจ›เจพเจฃเฉ‡ เจนเจฟเฉฑเจธเฉ‡ เจจเฉ‚เฉฐ เจŸเจฟเฉฑเจชเจฃเฉ€เจ†เจ‚ เจฆเฉ‡ เจชเจฟเฉฑเจ›เฉ‡ เจฒเฉเจ•เจพ เจฆเจฟเฉฑเจคเจพ เจนเฉˆ เจคเจพเจ‚ เจœเฉ‹ เจนเจฐ เจตเจพเจฐ เจ‡เจธเจจเฉ‚เฉฐ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจ•เจพเจชเฉ€ เจจเจพ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เฉ‡):

---
- name: Simple playbook
  # ...
  tasks:
    # ...
    - name: Add a new user
      user:
        name: my_user
        shell: /bin/bash
        password: "{{ 123qweasd | password_hash('sha512') }}"

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

---
- name: Simple playbook
  # ...
  tasks:
    # ...
    - name: Add a new user
      user:
        name: "{{ user }}"
        shell: /bin/bash
        password: "{{ user_password | password_hash('sha512') }}"

เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจกเจฌเจฒ เจ•เจฐเจฒเฉ€ เจฌเจฐเฉ‡เจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจตเจฟเฉฑเจš เจธเฉˆเฉฑเจŸ เจ•เฉ€เจคเฉ‡ เจ—เจ เจนเจจเฅค

เจ…เจธเฉ€เจ‚ เจตเจธเจคเฉ‚ เจธเฉ‚เจšเฉ€ เจตเจฟเฉฑเจš เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจฆเฉ‡ เจฎเฉเฉฑเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจตเจพเจ‚เจ—เฉ‡:

123.123.123.123

[all:vars]
user=my_user
user_password=123qweasd

เจจเจฟเจฐเจฆเฉ‡เจธเจผ เจตเฉฑเจฒ เจงเจฟเจ†เจจ เจฆเจฟเจ“ [all:vars] - เจ‡เจน เจ•เจนเจฟเฉฐเจฆเจพ เจนเฉˆ เจ•เจฟ เจŸเฉˆเจ•เจธเจŸ เจฆเจพ เจ…เจ—เจฒเจพ เจฌเจฒเจพเจ• เจตเฉ‡เจฐเฉ€เจเจฌเจฒ (เจตเจฐ) เจนเฉˆ เจ…เจคเฉ‡ เจ‰เจน เจธเจพเจฐเฉ‡ เจฎเฉ‡เจœเจผเจฌเจพเจจเจพเจ‚ (เจธเจพเจฐเฉ‡) 'เจคเฉ‡ เจฒเจพเจ—เฉ‚ เจนเฉเฉฐเจฆเฉ‡ เจนเจจเฅค

เจกเจฟเจœเจผเจพเจˆเจจ เจตเฉ€ เจฆเจฟเจฒเจšเจธเจช เจนเฉˆ "{{ user_password | password_hash('sha512') }}". เจ—เฉฑเจฒ เจ‡เจน เจนเฉˆ เจ•เจฟ เจœเจตเจพเจฌเจฆเฉ‡เจน เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฆเฉเจ†เจฐเจพ เจธเจฅเจพเจชเจฟเจค เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ user_add เจœเจฟเจตเฉ‡เจ‚ เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจนเฉฑเจฅเฉ€เจ‚ เจ•เจฐเฉ‹เจ—เฉ‡เฅค เจ…เจคเฉ‡ เจ‡เจน เจธเจพเจฐเฉ‡ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเจพ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เจฐเจฆเจพ เจนเฉˆ, เจ‡เจธ เจฒเจˆ เจธเจพเจจเฉ‚เฉฐ เจชเจพเจธเจตเจฐเจก เจจเฉ‚เฉฐ เจชเจนเจฟเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจนเฉˆเจธเจผ เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจ‡เจน เจ•เจฎเจพเจ‚เจก เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค

เจ†เจ‰ เจ†เจชเจฃเฉ‡ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจจเฉ‚เฉฐ sudo เจธเจฎเฉ‚เจน เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ€เจเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจ‡เจธ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจธเจพเจจเฉ‚เฉฐ เจ‡เจน เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ เจ•เจฟ เจ…เจœเจฟเจนเจพ เจ•เฉ‹เจˆ เจธเจฎเฉ‚เจน เจฎเฉŒเจœเฉ‚เจฆ เจนเฉˆ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ•เฉ‹เจˆ เจตเฉ€ เจธเจพเจกเฉ‡ เจฒเจˆ เจ…เจœเจฟเจนเจพ เจจเจนเฉ€เจ‚ เจ•เจฐเฉ‡เจ—เจพ:

---
- name: Simple playbook
  # ...
  tasks:
    # ...
    - name: Ensure a 'sudo' group
      group:
        name: sudo
        state: present
    - name: Add a new user
      user:
        name: "{{ user }}"
        shell: /bin/bash
        password: "{{ user_password | password_hash('sha512') }}"
        groups: "sudo"

เจนเจฐ เจšเฉ€เจœเจผ เจ•เจพเจซเจผเฉ€ เจธเจงเจพเจฐเจจ เจนเฉˆ, เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ—เจฐเฉเฉฑเจช เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ‡เฉฑเจ• เจธเจฎเฉ‚เจน เจฎเฉ‹เจกเฉ€เจŠเจฒ เจตเฉ€ เจนเฉˆ, เจœเจฟเจธเจฆเจพ เจธเฉฐเจŸเฉˆเจ•เจธ apt เจฆเฉ‡ เจธเจฎเจพเจจ เจนเฉˆเฅค เจซเจฟเจฐ เจ‡เจธ เจธเจฎเฉ‚เจน เจจเฉ‚เฉฐ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจจเฉ‚เฉฐ เจฐเจœเจฟเจธเจŸเจฐ เจ•เจฐเจจ เจฒเจˆ เจ•เจพเจซเจผเฉ€ เจนเฉˆ (groups: "sudo").
เจ‡เจธ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฒเจˆ เจ‡เฉฑเจ• ssh เจ•เฉเฉฐเจœเฉ€ เจœเฉ‹เฉœเจจเจพ เจตเฉ€ เจฒเจพเจญเจฆเจพเจ‡เจ• เจนเฉˆ เจคเจพเจ‚ เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจฌเจฟเจจเจพเจ‚ เจชเจพเจธเจตเจฐเจก เจฆเฉ‡ เจตเจฐเจค เจ•เฉ‡ เจฒเฉŒเจ—เจ‡เจจ เจ•เจฐ เจธเจ•เฉ€เจ:

---
- name: Simple playbook
  # ...
  tasks:
    # ...
    - name: Ensure a 'sudo' group
      group:
      name: sudo
        state: present
    - name: Add a new user
      user:
        name: "{{ user }}"
        shell: /bin/bash
        password: "{{ user_password | password_hash('sha512') }}"
        groups: "sudo"
    - name: Deploy SSH Key
      authorized_key:
        user: "{{ user }}"
        key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
        state: present

เจ‡เจธ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš, เจกเจฟเจœเจผเจพเจˆเจจ เจฆเจฟเจฒเจšเจธเจช เจนเฉˆ "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" โ€” เจ‡เจน id_rsa.pub เจซเจพเจˆเจฒ (เจคเฉเจนเจพเจกเจพ เจจเจพเจฎ เจตเฉฑเจ–เจฐเจพ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ) เจฆเฉ‡ เจญเจพเจ—เจพเจ‚ เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเจฆเจพ เจนเฉˆ, เจฏเจพเจจเฉ€ ssh เจ•เฉเฉฐเจœเฉ€ เจฆเจพ เจœเจจเจคเจ• เจนเจฟเฉฑเจธเจพ เจ…เจคเฉ‡ เจธเจฐเจตเจฐ เจ‰เฉฑเจคเฉ‡ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฒเจˆ เจ…เจงเจฟเจ•เจพเจฐเจค เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจตเจฟเฉฑเจš เจ‡เจธเจจเฉ‚เฉฐ เจ…เฉฑเจชเจฒเฉ‹เจก เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจญเฉ‚เจฎเจฟเจ•เจพเจตเจพเจ‚

เจตเจฐเจคเฉ‹เจ‚ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจธเจพเจฐเฉ‡ เจคเจฟเฉฐเจจ เจ•เจพเจฐเจœเจพเจ‚ เจจเฉ‚เฉฐ เจ†เจธเจพเจจเฉ€ เจจเจพเจฒ เจ•เจพเจฐเจœเจพเจ‚ เจฆเฉ‡ เจ‡เฉฑเจ• เจธเจฎเฉ‚เจน เจตเจฟเฉฑเจš เจธเจผเฉเจฐเฉ‡เจฃเฉ€เจฌเฉฑเจง เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เจธ เจธเจฎเฉ‚เจน เจจเฉ‚เฉฐ เจฎเฉเฉฑเจ– เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจคเฉ‹เจ‚ เจตเฉฑเจ–เจฐเจพ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจเจพ เจ‡เฉฑเจ• เจšเฉฐเจ—เจพ เจตเจฟเจšเจพเจฐ เจนเฉ‹เจตเฉ‡เจ—เจพ เจคเจพเจ‚ เจœเฉ‹ เจ‡เจน เจฌเจนเฉเจค เจตเฉฑเจกเจพ เจจเจพ เจนเฉ‹เจตเฉ‡เฅค เจ‡เจธ เจฎเฉฐเจคเจต เจฒเจˆ, Ansible เจ•เฉ‹เจฒ เจนเฉˆ เจญเฉ‚เจฎเจฟเจ•เจพเจตเจพเจ‚.
เจธเจผเฉเจฐเฉ‚ เจตเจฟเฉฑเจš เจฆเจฐเจธเจพเจ เจ—เจ เจซเจพเจˆเจฒ เจขเจพเจ‚เจšเฉ‡ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ, เจฐเฉ‹เจฒ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเฉ€ เจฐเฉ‹เจฒ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจฐเฉฑเจ–เฉ‡ เจœเจพเจฃเฉ‡ เจšเจพเจนเฉ€เจฆเฉ‡ เจนเจจ, เจนเจฐเฉ‡เจ• เจฐเฉ‹เจฒ เจฒเจˆ เจ‡เฉฑเจ•เฉ‹ เจจเจพเจฎ เจฆเฉ€ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเฉ€ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจŸเจพเจธเจ•, เจซเจพเจˆเจฒเจพเจ‚, เจŸเฉˆเจ‚เจชเจฒเฉ‡เจŸเจธ, เจ†เจฆเจฟ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจฆเฉ‡ เจ…เฉฐเจฆเจฐเฅค
เจ†เจ‰ เจ‡เฉฑเจ• เจซเจพเจˆเจฒ เจฌเจฃเจคเจฐ เจฌเจฃเจพเจˆเจ: ./ansible/roles/user/tasks/main.yml (เจฎเฉเฉฑเจ– เจฎเฉเฉฑเจ– เจซเจพเจˆเจฒ เจนเฉˆ เจœเฉ‹ เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจจเจพเจฒ เจ•เจจเฉˆเจ•เจŸ เจนเฉ‹เจฃ 'เจคเฉ‡ เจฒเฉ‹เจก เจ…เจคเฉ‡ เจšเจฒเจพเจ‡เจ† เจœเจพเจตเฉ‡เจ—เจพ; เจนเฉ‹เจฐ เจฐเฉ‹เจฒ เจซเจพเจˆเจฒเจพเจ‚ เจ‡เจธ เจจเจพเจฒ เจ•เจจเฉˆเจ•เจŸ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจœเจพ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจ)เฅค เจนเฉเจฃ เจคเฉเจธเฉ€เจ‚ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจจเจพเจฒ เจธเจฌเฉฐเจงเจค เจธเจพเจฐเฉ‡ เจ•เจพเจฐเจœเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เจธ เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

# Create user and add him to groups
- name: Ensure a 'sudo' group
  group:
    name: sudo
    state: present

- name: Add a new user
  user:
    name: "{{ user }}"
    shell: /bin/bash
    password: "{{ user_password | password_hash('sha512') }}"
    groups: "sudo"

- name: Deploy SSH Key
  authorized_key:
    user: "{{ user }}"
    key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
    state: present

เจฎเฉเฉฑเจ– เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจตเจฟเฉฑเจš, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจญเฉ‚เจฎเจฟเจ•เจพ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฒเจˆ เจจเจฟเจธเจผเจšเจฟเจค เจ•เจฐเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ:

---
- name: Simple playbook
  hosts: all
  remote_user: root
  gather_facts: no

  tasks:
    - name: Update system
      apt: update_cache=yes
    - name: Install system dependencies
      apt:
        name: git,nginx,redis,postgresql,postgresql-contrib
        state: present

  roles:
    - user

เจจเจพเจฒ เจนเฉ€, เจนเฉ‹เจฐ เจธเจพเจฐเฉ‡ เจ•เจพเจฐเจœเจพเจ‚ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจธเจฟเจธเจŸเจฎ เจจเฉ‚เฉฐ เจ…เฉฑเจชเจกเฉ‡เจŸ เจ•เจฐเจจเจพ เจธเจฎเจเจฆเจพเจฐ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ; เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, เจคเฉเจธเฉ€เจ‚ เจฌเจฒเจพเจ• เจฆเจพ เจจเจพเจฎ เจฌเจฆเจฒ เจธเจ•เจฆเฉ‡ เจนเฉ‹ tasks เจœเจฟเจธ เจตเจฟเฉฑเจš เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ pre_tasks.

nginx เจธเฉˆเจŸ เจ…เจช เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ

เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ Nginx เจธเจฅเจพเจชเจฟเจค เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ; เจธเจพเจจเฉ‚เฉฐ เจ‡เจธเจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐเจจ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ. เจšเจฒเฉ‹ เจ‡เจธ เจจเฉ‚เฉฐ เจคเฉเจฐเฉฐเจค เจญเฉ‚เจฎเจฟเจ•เจพ เจตเจฟเจš เจ•เจฐเฉ€เจ. เจ†เจ‰ เจ‡เฉฑเจ• เจซเจพเจˆเจฒ เจฌเจฃเจคเจฐ เจฌเจฃเจพเจˆเจ:

- ansible
  - roles
    - nginx
      - files
      - tasks
        - main.yml
      - templates

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

เจšเจฒเฉ‹ nginx เจจเฉ‚เฉฐ เจ‡เจจ เจฏเฉ‹เจ— เจ•เจฐเฉ€เจ main.yml เจซเจพเจˆเจฒเฅค เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ‡เฉฑเจ• systemd เจฎเฉ‹เจกเฉ€เจŠเจฒ เจนเฉˆ:

# Copy nginx configs and start it
- name: enable service nginx and start
  systemd:
    name: nginx
    state: started
    enabled: yes

เจ‡เฉฑเจฅเฉ‡ เจ…เจธเฉ€เจ‚ เจจเจพ เจธเจฟเจฐเจซ เจ‡เจน เจ•เจนเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ nginx เจจเฉ‚เฉฐ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ (เจญเจพเจต, เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจฒเจพเจ‚เจš เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚), เจชเจฐ เจ…เจธเฉ€เจ‚ เจคเฉเจฐเฉฐเจค เจ•เจนเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจ‡เจน เจธเจฎเจฐเฉฑเจฅ เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ.
เจ†เจ‰ เจนเฉเจฃ เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเฉ€เจ:

# Copy nginx configs and start it
- name: enable service nginx and start
  systemd:
    name: nginx
    state: started
    enabled: yes

- name: Copy the nginx.conf
  copy:
    src: nginx.conf
    dest: /etc/nginx/nginx.conf
    owner: root
    group: root
    mode: '0644'
    backup: yes

- name: Copy template my_app.conf
  template:
    src: my_app_conf.j2
    dest: /etc/nginx/sites-available/my_app.conf
    owner: root
    group: root
    mode: '0644'

เจ…เจธเฉ€เจ‚ เจฎเฉเฉฑเจ– nginx เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจˆเจฒ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ (เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเฉ‡ เจธเจฐเจตเจฐ เจคเฉ‹เจ‚ เจฒเฉˆ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจœเจพเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจ†เจชเจฃเฉ‡ เจ†เจช เจฒเจฟเจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹)เฅค เจ…เจคเฉ‡ เจธเจพเจˆเจŸเจพเจ‚_เจ‰เจชเจฒเจฌเจง เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจธเจพเจกเฉ€ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฒเจˆ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐเฉ‡เจธเจผเจจ เจซเจพเจˆเจฒ เจตเฉ€ (เจ‡เจน เจœเจผเจฐเฉ‚เจฐเฉ€ เจจเจนเฉ€เจ‚ เจนเฉˆ เจชเจฐ เจ‰เจชเจฏเฉ‹เจ—เฉ€ เจนเฉˆ)เฅค เจชเจนเจฟเจฒเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเจจ เจฒเจˆ เจ•เจพเจชเฉ€ เจฎเฉ‹เจกเฉ€เจŠเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ (เจซเจพเจ‡เจฒ เจตเจฟเฉฑเจš เจนเฉ‹เจฃเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆ /ansible/roles/nginx/files/nginx.conf). เจฆเฉ‚เจœเฉ‡ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฆเฉ‡ เจฎเฉเฉฑเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฆเฉ‡ เจนเฉ‹เจ, เจŸเฉˆเจ‚เจชเจฒเฉ‡เจŸ เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค เจŸเฉˆเจ‚เจชเจฒเฉ‡เจŸ เจตเจฟเฉฑเจš เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ /ansible/roles/nginx/templates/my_app.j2). เจ…เจคเฉ‡ เจ‡เจน เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡ เจธเจ•เจฆเจพ เจนเฉˆ:

upstream {{ app_name }} {
  server unix:{{ app_path }}/shared/tmp/sockets/puma.sock;
}

server {
  listen 80;
  server_name {{ server_name }} {{ inventory_hostname }};
  root {{ app_path }}/current/public;

  try_files $uri/index.html $uri.html $uri @{{ app_name }};
  ....
}

เจธเฉฐเจฎเจฟเจฒเจจเจพเจ‚ เจตเฉฑเจฒ เจงเจฟเจ†เจจ เจฆเจฟเจ“ {{ app_name }}, {{ app_path }}, {{ server_name }}, {{ inventory_hostname }} โ€” เจ‡เจน เจธเจพเจฐเฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจนเจจ เจœเจฟเจจเฉเจนเจพเจ‚ เจฆเฉ‡ เจฎเฉเฉฑเจฒ Ansible เจ•เจพเจชเฉ€ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจŸเฉˆเจ‚เจชเจฒเฉ‡เจŸ เจตเจฟเฉฑเจš เจฌเจฆเจฒ เจœเจพเจฃเจ—เฉ‡เฅค เจ‡เจน เจฒเจพเจญเจฆเจพเจ‡เจ• เจนเฉˆ เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจฎเฉ‡เจœเจผเจฌเจพเจจเจพเจ‚ เจฆเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเจฎเฉ‚เจนเจพเจ‚ เจฒเจˆ เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เฅค เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ€ เจตเจธเจคเฉ‚ เจธเฉ‚เจšเฉ€ เจœเฉ‹เฉœ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚:

[production]
123.123.123.123

[staging]
231.231.231.231

[all:vars]
user=my_user
user_password=123qweasd

[production:vars]
server_name=production
app_path=/home/www/my_app
app_name=my_app

[staging:vars]
server_name=staging
app_path=/home/www/my_stage
app_name=my_stage_app

เจœเฉ‡เจ•เจฐ เจ…เจธเฉ€เจ‚ เจนเฉเจฃ เจ†เจชเจฃเฉ€ เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจฒเจพเจ‚เจš เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจคเจพเจ‚ เจ‡เจน เจฆเฉ‹เจตเฉ‡เจ‚ เจฎเฉ‡เจœเจผเจฌเจพเจจเจพเจ‚ เจฒเจˆ เจจเจฟเจธเจผเจšเจฟเจค เจ•เจพเจฐเจœ เจ•เจฐเฉ‡เจ—เจพเฅค เจชเจฐ เจ‰เจธเฉ‡ เจธเจฎเฉ‡เจ‚, เจ‡เฉฑเจ• เจธเจŸเฉ‡เจœเจฟเฉฐเจ— เจนเฉ‹เจธเจŸ เจฒเจˆ, เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจชเฉเจฐเฉ‹เจกเจ•เจธเจผเจจ เจจเจพเจฒเฉ‹เจ‚ เจตเฉฑเจ–เจฐเฉ‡ เจนเฉ‹เจฃเจ—เฉ‡, เจ…เจคเฉ‡ เจจเจพ เจธเจฟเจฐเจซ เจฐเฉ‹เจฒ เจ…เจคเฉ‡ เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจตเจฟเฉฑเจš, เจฌเจฒเจ•เจฟ เจเจจเจœเฉ€เจจเฉˆเจ•เจธ เจ•เฉŒเจ‚เจซเจฟเจ—เจธ เจตเจฟเฉฑเจš เจตเฉ€เฅค {{ inventory_hostname }} เจตเจธเจคเฉ‚ เจธเฉ‚เจšเฉ€ เจตเจฟเฉฑเจš เจฆเจฐเจธเจพเจ เจœเจพเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆ - เจ‡เจน เจตเจฟเจธเจผเฉ‡เจธเจผ เจœเจตเจพเจฌเจฆเฉ‡เจน เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจ…เจคเฉ‡ เจนเฉ‹เจธเจŸ เจœเจฟเจธ เจฒเจˆ เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจš เจšเฉฑเจฒ เจฐเจนเฉ€ เจนเฉˆ เจ‰เฉฑเจฅเฉ‡ เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค
เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจ•เจˆ เจฎเฉ‡เจœเจผเจฌเจพเจจเจพเจ‚ เจฒเจˆ เจ‡เฉฑเจ• เจตเจธเจคเฉ‚ เจซเจพเจˆเจฒ เจฐเฉฑเจ–เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹, เจชเจฐ เจธเจฟเจฐเจซ เจ‡เฉฑเจ• เจธเจฎเฉ‚เจน เจฒเจˆ เจšเจฒเจพเจ‰เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจ‡เจน เจนเฉ‡เจ  เจฆเจฟเฉฑเจคเฉ€ เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ:

ansible-playbook -i inventory ./playbook.yml -l "staging"

เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจตเจฟเจ•เจฒเจช เจตเฉฑเจ–-เจตเฉฑเจ– เจธเจฎเฉ‚เจนเจพเจ‚ เจฒเจˆ เจตเฉฑเจ–เจฐเฉ€เจ†เจ‚ เจตเจธเจคเฉ‚เจ†เจ‚ เจฆเฉ€เจ†เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจนเฉ‹เจฃ เจฆเจพ เจนเฉˆเฅค เจœเจพเจ‚ เจœเฉ‡เจ•เจฐ เจคเฉเจนเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจฎเฉ‡เจœเจผเจฌเจพเจจ เจนเจจ เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจฆเฉ‹ เจชเจนเฉเฉฐเจšเจพเจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจšเจฒเฉ‹ nginx เจธเฉˆเจŸ เจ…เจช เจ•เจฐเจจ เจฒเจˆ เจตเจพเจชเจธ เจšเจฒเฉ€เจเฅค เจ•เฉŒเจ‚เจซเจฟเจ—เจฐเฉ‡เจธเจผเจจ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจธเจพเจจเฉ‚เฉฐ sites_available เจคเฉ‹เจ‚ my_app.conf เจตเจฟเฉฑเจš sitest_enabled เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเจฟเจฎเจฒเจฟเฉฐเจ• เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจ…เจคเฉ‡ nginx เจจเฉ‚เฉฐ เจฎเฉเฉœ เจšเจพเจฒเฉ‚ เจ•เจฐเฉ‹.

... # old code in mail.yml

- name: Create symlink to sites-enabled
  file:
    src: /etc/nginx/sites-available/my_app.conf
    dest: /etc/nginx/sites-enabled/my_app.conf
    state: link

- name: restart nginx
  service:
    name: nginx
    state: restarted

เจ‡เฉฑเจฅเฉ‡ เจธเจญ เจ•เฉเจ เจธเจงเจพเจฐเจจ เจนเฉˆ - เจ‡เฉฑเจ• เจ•เจพเจซเจผเฉ€ เจฎเจฟเจ†เจฐเฉ€ เจธเฉฐเจŸเฉˆเจ•เจธ เจฆเฉ‡ เจจเจพเจฒ เจฆเฉเจฌเจพเจฐเจพ เจœเจตเจพเจฌเจฆเฉ‡เจน เจฎเฉ‹เจกเฉ€เจŠเจฒ. เจชเจฐ เจ‡เฉฑเจ• เจฌเจฟเฉฐเจฆเฉ‚ เจนเฉˆ. เจนเจฐ เจตเจพเจฐ nginx เจจเฉ‚เฉฐ เจฎเฉเฉœ เจšเจพเจฒเฉ‚ เจ•เจฐเจจ เจฆเจพ เจ•เฉ‹เจˆ เจฎเจคเจฒเจฌ เจจเจนเฉ€เจ‚ เจนเฉˆ. เจ•เฉ€ เจคเฉเจธเฉ€เจ‚ เจฆเฉ‡เจ–เจฟเจ† เจนเฉˆ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจจเจนเฉ€เจ‚ เจฒเจฟเจ–เจฆเฉ‡ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ: โ€œเจ‡เจธ เจจเฉ‚เฉฐ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจ•เจฐเฉ‹โ€, เจธเฉฐเจŸเฉˆเจ•เจธ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ เจœเจฟเจตเฉ‡เจ‚ โ€œเจ‡เจธ เจฆเฉ€ เจ‡เจน เจ…เจตเจธเจฅเจพ เจนเฉ‹เจฃเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆโ€เฅค เจ…เจคเฉ‡ เจ…เจ•เจธเจฐ เจ‡เจน เจฌเจฟเจฒเจ•เฉเจฒ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจนเฉˆ เจ•เจฟ เจœเจตเจพเจฌเจฆเฉ‡เจน เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ. เจœเฉ‡เจ•เจฐ เจ—เจฐเฉเฉฑเจช เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจฎเฉŒเจœเฉ‚เจฆ เจนเฉˆ, เจœเจพเจ‚ เจธเจฟเจธเจŸเจฎ เจชเฉˆเจ•เฉ‡เจœ เจชเจนเจฟเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจนเฉ€ เจ‡เฉฐเจธเจŸเจพเจฒ เจนเฉˆ, เจคเจพเจ‚ ansible เจ‡เจธเจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเฉ‡เจ—เจพ เจ…เจคเฉ‡ เจ•เฉฐเจฎ เจจเฉ‚เฉฐ เจ›เฉฑเจก เจฆเฉ‡เจตเฉ‡เจ—เจพเฅค เจจเจพเจฒ เจนเฉ€, เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจจเจ•เจฒ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡เจ—เฉ€ เจœเฉ‡เจ•เจฐ เจ‰เจน เจธเจฐเจตเจฐ 'เจคเฉ‡ เจชเจนเจฟเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจฎเฉŒเจœเฉ‚เจฆ เจšเฉ€เจœเจผเจพเจ‚ เจจเจพเจฒ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเฉ€เจ†เจ‚ เจนเจจเฅค เจ…เจธเฉ€เจ‚ เจ‡เจธเจฆเจพ เจซเจพเจ‡เจฆเจพ เจ‰เจ เจพ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ nginx เจจเฉ‚เฉฐ เจธเจฟเจฐเจซ เจคเจพเจ‚ เจนเฉ€ เจฐเฉ€เจธเจŸเจพเจฐเจŸ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ เจœเฉ‡เจ•เจฐ เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจˆเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฟเจ† เจ—เจฟเจ† เจนเฉˆเฅค เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจ‡เฉฑเจ• เจฐเจœเจฟเจธเจŸเจฐ เจจเจฟเจฐเจฆเฉ‡เจธเจผ เจนเฉˆ:

# Copy nginx configs and start it
- name: enable service nginx and start
  systemd:
    name: nginx
    state: started
    enabled: yes

- name: Copy the nginx.conf
  copy:
    src: nginx.conf
    dest: /etc/nginx/nginx.conf
    owner: root
    group: root
    mode: '0644'
    backup: yes
  register: restart_nginx

- name: Copy template my_app.conf
  template:
    src: my_app_conf.j2
    dest: /etc/nginx/sites-available/my_app.conf
    owner: root
    group: root
    mode: '0644'
  register: restart_nginx

- name: Create symlink to sites-enabled
  file:
    src: /etc/nginx/sites-available/my_app.conf
    dest: /etc/nginx/sites-enabled/my_app.conf
    state: link

- name: restart nginx
  service:
    name: nginx
    state: restarted
  when: restart_nginx.changed

เจœเฉ‡เจ•เจฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐเฉ‡เจธเจผเจจ เจซเจพเจˆเจฒเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจฌเจฆเจฒเจฆเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจ‡เฉฑเจ• เจ•เจพเจชเฉ€ เจฌเจฃเจพเจˆ เจœเจพเจตเฉ‡เจ—เฉ€ เจ…เจคเฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฐเจœเจฟเจธเจŸเจฐ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพ restart_nginx. เจ…เจคเฉ‡ เจ•เฉ‡เจตเจฒ เจคเจพเจ‚ เจนเฉ€ เจœเฉ‡เจ•เจฐ เจ‡เจน เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฐเจœเจฟเจธเจŸเจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ เจคเจพเจ‚ เจธเฉ‡เจตเจพ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจšเจพเจฒเฉ‚ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพเฅค

เจ…เจคเฉ‡, เจฌเฉ‡เจธเจผเจ•, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฎเฉเฉฑเจ– เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจตเจฟเฉฑเจš nginx เจฐเฉ‹เจฒ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ.

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

เจธเจพเจจเฉ‚เฉฐ postgresql เจจเฉ‚เฉฐ systemd เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‰เจธเฉ‡ เจคเจฐเฉเจนเจพเจ‚ เจธเจฎเจฐเฉฑเจฅ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจœเจฟเจตเฉ‡เจ‚ เจ…เจธเฉ€เจ‚ nginx เจจเจพเจฒ เจ•เฉ€เจคเฉ€ เจธเฉ€, เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจตเฉ€ เจฌเจฃเจพเจ‰เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ เจœเจฟเจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ…เจธเฉ€เจ‚ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจ…เจคเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจ•เจฐเจจ เจฒเจˆ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค
เจ†เจ“ เจ‡เฉฑเจ• เจฐเฉ‹เจฒ เจฌเจฃเจพเจˆเจ /ansible/roles/postgresql/tasks/main.yml:

# Create user in postgresql
- name: enable postgresql and start
  systemd:
    name: postgresql
    state: started
    enabled: yes

- name: Create database user
  become_user: postgres
  postgresql_user:
    name: "{{ db_user }}"
    password: "{{ db_password }}"
    role_attr_flags: SUPERUSER

- name: Create database
  become_user: postgres
  postgresql_db:
    name: "{{ db_name }}"
    encoding: UTF-8
    owner: "{{ db_user }}"

เจฎเฉˆเจ‚ เจ‡เจน เจตเจฐเจฃเจจ เจจเจนเฉ€เจ‚ เจ•เจฐเจพเจ‚เจ—เจพ เจ•เจฟ เจตเจธเจคเฉ‚ เจธเฉ‚เจšเฉ€ เจตเจฟเฉฑเจš เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจœเฉ‹เฉœเจจเจพ เจนเฉˆ, เจ‡เจน เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ•เจˆ เจตเจพเจฐ เจ•เฉ€เจคเจพ เจœเจพ เจšเฉเฉฑเจ•เจพ เจนเฉˆ, เจจเจพเจฒ เจนเฉ€ postgresql_db เจ…เจคเฉ‡ postgresql_user เจฎเฉ‹เจกเฉ€เจŠเจฒ เจฆเจพ เจธเฉฐเจŸเฉˆเจ•เจธ. เจนเฉ‹เจฐ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจตเจฟเฉฑเจš เจฒเฉฑเจญเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆ. เจ‡เฉฑเจฅเฉ‡ เจธเจญ เจคเฉ‹เจ‚ เจฆเจฟเจฒเจšเจธเจช เจจเจฟเจฐเจฆเฉ‡เจธเจผ เจนเฉˆ become_user: postgres. เจคเฉฑเจฅ เจ‡เจน เจนเฉˆ เจ•เจฟ เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš, เจธเจฟเจฐเจซ เจชเฉ‹เจธเจŸเจ—เจฐเฉ‡เจธ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจ•เฉ‹เจฒ เจชเฉ‹เจธเจŸเจ—เจฐเฉ‡เจธเจ•เจฟเจเจฒ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจนเฉˆ เจ…เจคเฉ‡ เจธเจฟเจฐเจซ เจธเจฅเจพเจจเจ• เจคเฉŒเจฐ 'เจคเฉ‡เฅค เจ‡เจน เจจเจฟเจฐเจฆเฉ‡เจธเจผ เจธเจพเจจเฉ‚เฉฐ เจ‡เจธ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฆเฉ€ เจคเจฐเจซเฉ‹เจ‚ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ (เจœเฉ‡ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจชเจนเฉเฉฐเจš เจนเฉˆ, เจœเจผเจฐเฉ‚เจฐ)เฅค
เจจเจพเจฒ เจนเฉ€, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจกเจพเจŸเจพเจฌเฉ‡เจธ เจคเฉฑเจ• เจ‡เฉฑเจ• เจจเจตเฉ‡เจ‚ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฆเฉ€ เจชเจนเฉเฉฐเจš เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเฉ‡เจฃ เจฒเจˆ pg_hba.conf เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฒเจพเจˆเจจ เจœเฉ‹เฉœเจจเฉ€ เจชเฉˆ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค เจ‡เจน เจ‰เจธเฉ‡ เจคเจฐเฉเจนเจพเจ‚ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ เจœเจฟเจตเฉ‡เจ‚ เจ…เจธเฉ€เจ‚ nginx เจธเฉฐเจฐเจšเจจเจพ เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฟเจ† เจนเฉˆเฅค

เจ…เจคเฉ‡ เจฌเฉ‡เจธเจผเฉฑเจ•, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฎเฉเฉฑเจ– เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจตเจฟเฉฑเจš postgresql เจฐเฉ‹เจฒ เจœเฉ‹เฉœเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

rbenv เจฆเฉเจ†เจฐเจพ เจฐเฉ‚เจฌเฉ€ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจเจพ

Ansible เจ•เฉ‹เจฒ rbenv เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจฎเฉ‹เจกเฉ€เจŠเจฒ เจจเจนเฉ€เจ‚ เจนเจจ, เจชเจฐ เจ‡เจน เจ‡เฉฑเจ• git เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจจเฉ‚เฉฐ เจ•เจฒเฉ‹เจจ เจ•เจฐเจ•เฉ‡ เจธเจฅเจพเจชเจฟเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค เจ‡เจธ เจฒเจˆ, เจ‡เจน เจธเจฎเฉฑเจธเจฟเจ† เจธเจญ เจคเฉ‹เจ‚ เจ—เฉˆเจฐ-เจฎเจฟเจ†เจฐเฉ€ เจฌเจฃ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ. เจ†เจ“ เจ‰เจธเจฆเฉ‡ เจฒเจˆ เจ‡เฉฑเจ• เจฐเฉ‹เจฒ เจฌเจฃเจพเจˆเจ /ansible/roles/ruby_rbenv/main.yml เจ…เจคเฉ‡ เจ†เจ“ เจ‡เจธเจจเฉ‚เฉฐ เจญเจฐเจจเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ€เจ:

# Install rbenv and ruby
- name: Install rbenv
  become_user: "{{ user }}"
  git: repo=https://github.com/rbenv/rbenv.git dest=~/.rbenv

เจ…เจธเฉ€เจ‚ เจ‡เจนเจจเจพเจ‚ เจ‰เจฆเฉ‡เจธเจผเจพเจ‚ เจฒเจˆ เจฌเจฃเจพเจ เจ—เจ เจ‰เจชเจฏเฉ‹เจ—เจ•เจฐเจคเจพ เจฆเฉ‡ เจ…เจงเฉ€เจจ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจฆเฉเจฌเจพเจฐเจพ become_user เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฟเจต เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค เจ•เจฟเจ‰เจ‚เจ•เจฟ rbenv เจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ€ เจนเฉ‹เจฎ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจจเจพ เจ•เจฟ เจตเจฟเจธเจผเจต เจชเฉฑเจงเจฐ 'เจคเฉ‡เฅค เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจจเฉ‚เฉฐ เจ•เจฒเฉ‹เจจ เจ•เจฐเจจ เจฒเจˆ git เจฎเฉ‹เจกเฉ€เจŠเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจฐเฉˆเจชเฉ‹ เจ…เจคเฉ‡ เจกเฉˆเจธเจŸ เจจเฉ‚เฉฐ เจจเจฟเจธเจผเจšเจฟเจค เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจเฅค

เจ…เฉฑเจ—เฉ‡, เจธเจพเจจเฉ‚เฉฐ bashrc เจตเจฟเฉฑเจš rbenv init เจจเฉ‚เฉฐ เจฐเจœเจฟเจธเจŸเจฐ เจ•เจฐเจจ เจ…เจคเฉ‡ PATH เจตเจฟเฉฑเจš rbenv เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ lineinfile เจฎเฉ‹เจกเฉ€เจŠเจฒ เจนเฉˆ:

- name: Add rbenv to PATH
  become_user: "{{ user }}"
  lineinfile:
    path: ~/.bashrc
    state: present
    line: 'export PATH="${HOME}/.rbenv/bin:${PATH}"'

- name: Add rbenv init to bashrc
  become_user: "{{ user }}"
  lineinfile:
    path: ~/.bashrc
    state: present
    line: 'eval "$(rbenv init -)"'

เจซเจฟเจฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ ruby_build เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ:

- name: Install ruby-build
  become_user: "{{ user }}"
  git: repo=https://github.com/rbenv/ruby-build.git dest=~/.rbenv/plugins/ruby-build

เจ…เจคเฉ‡ เจ…เฉฐเจค เจตเจฟเฉฑเจš เจฐเฉ‚เจฌเฉ€ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเฉ‹. เจ‡เจน rbenv เจฆเฉเจ†เจฐเจพ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจญเจพเจต, เจฌเจธ bash เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ:

- name: Install ruby
  become_user: "{{ user }}"
  shell: |
    export PATH="${HOME}/.rbenv/bin:${PATH}"
    eval "$(rbenv init -)"
    rbenv install {{ ruby_version }}
  args:
    executable: /bin/bash

เจ…เจธเฉ€เจ‚ เจ•เจนเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจ•เจฟเจนเฉœเฉ€ เจ•เจฎเจพเจ‚เจก เจšเจฒเจพเจ‰เจฃเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจ•เจฟเจธ เจจเจพเจฒเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจ‡เฉฑเจฅเฉ‡ เจ…เจธเฉ€เจ‚ เจ‡เจธ เจคเฉฑเจฅ เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ ansible เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ bashrc เจตเจฟเฉฑเจš เจฎเฉŒเจœเฉ‚เจฆ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจจเจนเฉ€เจ‚ เจšเจฒเจพเจ‰เจ‚เจฆเจพ เจนเฉˆเฅค เจ‡เจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ เจ•เจฟ rbenv เจจเฉ‚เฉฐ เจ‰เจธเฉ‡ เจธเจ•เฉเจฐเจฟเจชเจŸ เจตเจฟเฉฑเจš เจธเจฟเฉฑเจงเจพ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เจฐเจจเจพ เจนเฉ‹เจตเฉ‡เจ—เจพเฅค

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

- name: Install ruby
  become_user: "{{ user }}"
  shell: |
    export PATH="${HOME}/.rbenv/bin:${PATH}"
    eval "$(rbenv init -)"
    if ! rbenv versions | grep -q {{ ruby_version }}
      then rbenv install {{ ruby_version }} && rbenv global {{ ruby_version }}
    fi
  args:
    executable: /bin/bash

เจœเฉ‹ เจ•เฉเจ เจฌเจšเจฟเจ† เจนเฉˆ เจ‰เจน เจฌเฉฐเจกเจฒเจฐ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจเจพ เจนเฉˆ:

- name: Install bundler
  become_user: "{{ user }}"
  shell: |
    export PATH="${HOME}/.rbenv/bin:${PATH}"
    eval "$(rbenv init -)"
    gem install bundler

เจ…เจคเฉ‡ เจฆเฉเจฌเจพเจฐเจพ, เจธเจพเจกเฉ€ เจญเฉ‚เจฎเจฟเจ•เจพ ruby_rbenv เจจเฉ‚เฉฐ เจฎเฉเฉฑเจ– เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹เฅค

เจธเจพเจ‚เจเฉ€เจ†เจ‚ เจซเจพเจˆเจฒเจพเจ‚เฅค

เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡, เจธเฉˆเฉฑเจŸเจ…เฉฑเจช เจ‡เฉฑเจฅเฉ‡ เจชเฉ‚เจฐเจพ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ…เฉฑเจ—เฉ‡, เจœเฉ‹ เจ•เฉเจ เจฌเจšเจฟเจ† เจนเฉˆ เจ‰เจน เจ•เฉˆเจชเจฟเจธเจŸเฉเจฐเจพเจจเฉ‹ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจน เจ†เจชเจฃเฉ‡ เจ†เจช เจ•เฉ‹เจก เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเฉ‡เจ—เจพ, เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€เจ†เจ‚ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€เจ†เจ‚ เจฌเจฃเจพเจเจ—เจพ เจ…เจคเฉ‡ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฒเจพเจ‚เจš เจ•เจฐเฉ‡เจ—เจพ (เจœเฉ‡ เจธเจญ เจ•เฉเจ เจธเจนเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ)เฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, capistrano เจจเฉ‚เฉฐ เจ…เจ•เจธเจฐ เจตเจพเจงเฉ‚ เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ database.yml เจœ .env เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ nginx เจฒเจˆ เจซเจพเจˆเจฒเจพเจ‚ เจ…เจคเฉ‡ เจŸเฉˆเจ‚เจชเจฒเฉ‡เจŸเจพเจ‚ เจตเจพเจ‚เจ— เจนเฉ€ เจ•เจพเจชเฉ€ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ. เจ•เฉ‡เจตเจฒ เจ‡เฉฑเจ• เจนเฉ€ เจธเฉ‚เจ–เจฎเจคเจพ เจนเฉˆ. เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‰เจนเจจเจพเจ‚ เจฒเจˆ เจ‡เฉฑเจ• เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจฌเจฃเจคเจฐ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ, เจ•เฉเจ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚:

# Copy shared files for deploy
- name: Ensure shared dir
  become_user: "{{ user }}"
  file:
    path: "{{ app_path }}/shared/config"
    state: directory

เจ…เจธเฉ€เจ‚ เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจœเฉ‡เจ•เจฐ เจฒเฉ‹เฉœ เจชเจตเฉ‡ เจคเจพเจ‚ เจœเจตเจพเจฌเจฆเฉ‡เจนเฉ€ เจ†เจชเจฃเฉ‡ เจ†เจช เจนเฉ€ เจชเฉ‡เจฐเฉˆเจ‚เจŸ เจฌเจฃเจพ เจฒเจตเฉ‡เจ—เฉ€เฅค

เจœเจตเจพเจฌเจฆเฉ‡เจน เจตเจพเจฒเจŸ

เจ…เจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ‡เจธ เจคเฉฑเจฅ เจฆเฉ‡ เจธเจพเจนเจฎเจฃเฉ‡ เจ† เจšเฉเฉฑเจ•เฉ‡ เจนเจพเจ‚ เจ•เจฟ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจตเจฟเฉฑเจš เจ—เฉเจชเจค เจกเฉ‡เจŸเจพ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฆเจพ เจชเจพเจธเจตเจฐเจกเฅค เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจฌเจฃเจพเจ‡เจ† เจนเฉˆ .env เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฒเจˆ เจซเจพเจˆเจฒ, เจ…เจคเฉ‡ database.yml เจซเจฟเจฐ เจ…เจœเจฟเจนเฉ‡ เจนเฉ‹เจฐ เจตเฉ€ เจจเจพเจœเจผเฉเจ• เจ…เฉฐเจ•เฉœเฉ‡ เจนเฉ‹เจฃเฉ‡ เจšเจพเจนเฉ€เจฆเฉ‡ เจนเจจเฅค เจ‰เจจเฉเจนเจพเจ‚ เจจเฉ‚เฉฐ เจญเฉœเจ•เจฆเฉ€เจ†เจ‚ เจ…เฉฑเจ–เจพเจ‚ เจคเฉ‹เจ‚ เจ›เฉเจชเจพเจ‰เจฃเจพ เจšเฉฐเจ—เจพ เจนเฉ‹เจตเฉ‡เจ—เจพ. เจ‡เจธ เจฎเจ•เจธเจฆ เจฒเจˆ เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ เจœเจตเจพเจฌเจฆเฉ‡เจน เจตเจพเจฒเจŸ.

เจšเจฒเฉ‹ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฒเจˆ เจ‡เฉฑเจ• เจซเจพเจˆเจฒ เจฌเจฃเจพเจˆเจ /ansible/vars/all.yml (เจ‡เฉฑเจฅเฉ‡ เจคเฉเจธเฉ€เจ‚ เจฎเฉ‡เจœเจผเจฌเจพเจจเจพเจ‚ เจฆเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเจฎเฉ‚เจนเจพเจ‚ เจฒเจˆ เจตเฉฑเจ–-เจตเฉฑเจ– เจซเจพเจˆเจฒเจพเจ‚ เจฌเจฃเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจตเจธเจคเฉ‚ เจธเฉ‚เจšเฉ€ เจตเจฟเฉฑเจš: production.yml, staging.yml, เจ†เจฆเจฟ)เฅค
เจธเจพเจฐเฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจœเจฟเจจเฉเจนเจพเจ‚ เจจเฉ‚เฉฐ เจเจจเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ, เจจเฉ‚เฉฐ เจฎเจฟเจ†เจฐเฉ€ yml เจธเฉฐเจŸเฉˆเจ•เจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‡เจธ เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ:

# System vars
user_password: 123qweasd
db_password: 123qweasd

# ENV vars
aws_access_key_id: xxxxx
aws_secret_access_key: xxxxxx
aws_bucket: bucket_name
rails_secret_key_base: very_secret_key_base

เจœเจฟเจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจ‡เจธ เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ เจเจจเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ:

ansible-vault encrypt ./vars/all.yml

เจ•เฉเจฆเจฐเจคเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡, เจ‡เจจเจ•เฉเจฐเจฟเจชเจŸ เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจกเฉ€เจ•เฉเจฐเจฟเจชเจธเจผเจจ เจฒเจˆ เจ‡เฉฑเจ• เจชเจพเจธเจตเจฐเจก เจธเฉˆเฉฑเจŸ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡เจ—เฉ€เฅค เจคเฉเจธเฉ€เจ‚ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ•เจฟ เจ‡เจธ เจ•เจฎเจพเจ‚เจก เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจซเจพเจˆเจฒ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจ•เฉ€ เจนเฉ‹เจตเฉ‡เจ—เจพ.

เจฆเฉ€ เจธเจนเจพเจ‡เจคเจพ เจจเจพเจฒ ansible-vault decrypt เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจกเฉ€เจ•เฉเจฐเจฟเจชเจŸ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจธเฉ‹เจงเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจซเจฟเจฐ เจฆเฉเจฌเจพเจฐเจพ เจเจจเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจซเจผเจพเจˆเจฒ เจจเฉ‚เฉฐ เจกเฉ€เจ•เฉเจฐเจฟเจชเจŸ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจเจจเจ•เฉเจฐเจฟเจชเจŸเจก เจธเจŸเฉ‹เจฐ เจ•เจฐเจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจฆเจฒเฉ€เจฒ เจจเจพเจฒ เจชเจฒเฉ‡เจฌเฉเฉฑเจ• เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจ‚เจฆเฉ‡ เจนเฉ‹ --ask-vault-pass. Ansible เจชเจพเจธเจตเจฐเจก เจฆเฉ€ เจฎเฉฐเจ— เจ•เจฐเฉ‡เจ—เจพ, เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฎเฉเฉœ เจชเฉเจฐเจพเจชเจค เจ•เจฐเฉ‡เจ—เจพ, เจ…เจคเฉ‡ เจ•เจพเจฐเจœเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจเจ—เจพเฅค เจธเจพเจฐเจพ เจกเจพเจŸเจพ เจเจจเจ•เฉเจฐเจฟเจชเจŸเจก เจฐเจนเฉ‡เจ—เจพเฅค

เจฎเฉ‡เจœเจผเจฌเจพเจจเจพเจ‚ เจ…เจคเฉ‡ เจœเจตเจพเจฌเจฆเฉ‡เจน เจตเจพเจฒเจŸ เจฆเฉ‡ เจ•เจˆ เจธเจฎเฉ‚เจนเจพเจ‚ เจฒเจˆ เจชเฉ‚เจฐเฉ€ เจ•เจฎเจพเจ‚เจก เจ•เฉเจ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เฉ€:

ansible-playbook -i inventory ./playbook.yml -l "staging" --ask-vault-pass

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

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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹