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. เดชเตเดฏเต‚เดฎ เดธเต†เตผเดตเตผ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต

เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เด…เดตเดธเดพเดจ เด˜เดŸเตเดŸเด™เตเด™เตพ capistrano เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดšเต†เดฏเตเดฏเดพเด‚, เด•เตเดฑเดžเตเดžเดคเต เดฌเต‹เด•เตโ€Œเดธเดฟเดจเต เดชเตเดฑเดคเตเดคเต เด•เต‹เดกเต เดฑเดฟเดฒเต€เดธเต เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดชเด•เตผเดคเตเดคเดพเดจเตเด‚ เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏ เดตเดฟเดจเตเดฏเดพเดธเดคเตเดคเดฟเดจเต เดถเต‡เดทเด‚ เด’เดฐเต เดธเดฟเด‚เดฒเดฟเด™เตเด•เต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฑเดฟเดฒเต€เดธเต เดฎเดพเดฑเตเดฑเดพเดจเตเด‚ เดชเด™เตเด•เดฟเดŸเตเดŸ เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เต‹เตบเดซเดฟเด—เดฑเตเด•เตพ เดชเด•เตผเดคเตเดคเดพเดจเตเด‚ เดชเตเดฏเต‚เดฎ เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚. เด‡เดคเต†เดฒเตเดฒเดพเด‚ เด…เตปเดธเดฟเดฌเดฟเตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดšเต†เดฏเตเดฏเดพเด‚, เดชเด•เตเดทเต‡ เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต?

เดซเดฏเตฝ เด˜เดŸเดจ

เด…เตปเดธเดฟเดฌเดฟเดณเดฟเดจเต เด•เตผเดถเดจเดฎเตเดฃเตเดŸเต เดซเดฏเตฝ เด˜เดŸเดจ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดŽเดฒเตเดฒเดพ เดซเดฏเดฒเตเด•เตพเด•เตเด•เตเด‚, เด…เดคเดฟเดจเดพเตฝ เด…เดตเดฏเต†เดฒเตเดฒเดพเด‚ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดกเดฏเดฑเด•เตเดŸเดฑเดฟเดฏเดฟเตฝ เดธเต‚เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต. เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เด‡เดคเต เดฑเต†เดฏเดฟเตฝ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเตฝ เดคเดจเตเดจเต†เดฏเดพเดฃเต‹ เด…เดคเต‹ เดตเต†เดตเตเดตเต‡เดฑเต†เดฏเดพเดฃเต‹ เดŽเดจเตเดจเดคเต เด…เดคเตเดฐ เดชเตเดฐเดงเดพเดจเดฎเดฒเตเดฒ. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดœเดฟเดฑเตเดฑเต เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเตฝ เดซเดฏเดฒเตเด•เตพ เดธเด‚เดญเดฐเดฟเด•เตเด•เดพเดจเดพเด•เตเด‚. เดตเตเดฏเด•เตเดคเดฟเดชเดฐเดฎเดพเดฏเดฟ, เดฑเต†เดฏเดฟเตฝเดธเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† / เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟเดฏเดฟเตฝ เด’เดฐเต เด…เตปเดธเดฟเดฌเดฟเตพ เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เดพเดจเตเด‚ เดŽเดฒเตเดฒเดพเด‚ เด’เดฐเต เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเตฝ เดธเต‚เด•เตเดทเดฟเด•เตเด•เดพเดจเตเด‚ เดžเดพเตป เดเดฑเตเดฑเดตเตเด‚ เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฃเต†เดจเตเดจเต เด•เดฃเตเดŸเต†เดคเตเดคเดฟ.

เดฒเดณเดฟเดคเดฎเดพเดฏ เดชเตเดฒเต‡เดฌเตเด•เตเด•เต

เดชเตเดฐเดคเตเดฏเต‡เด• เดตเดพเด•เตเดฏเด˜เดŸเดจ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เตปเดธเดฟเดฌเดฟเตพ เดŽเดจเตเดคเตเดšเต†เดฏเตเดฏเดฃเดฎเต†เดจเตเดจเตเด‚ เดŽเด™เตเด™เดจเต† เดšเต†เดฏเตเดฏเดฃเดฎเต†เดจเตเดจเตเด‚ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต yml เดซเดฏเดฒเดพเดฃเต Playbook. เด’เดจเตเดจเตเด‚ เดšเต†เดฏเตเดฏเดพเดคเตเดค เด†เดฆเตเดฏเดคเตเดคเต† เดชเตเดฒเต‡เดฌเตเด•เตเด•เต เดจเดฎเตเด•เตเด•เต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเด‚:

---
- 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 เด†เด•เตโ€Œเดธเดธเต เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เด…เตปเดธเดฟเดฌเดฟเตพ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดšเต เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเดฟเดตเดฐเด™เตเด™เตพ เดถเต‡เด–เดฐเดฟเด•เตเด•เตเด‚. (เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดŸเดพเดธเตโ€Œเด•เต [เดถเต‡เด–เดฐเดฟเด•เตเด•เตฝ เดตเดธเตเดคเตเดคเด•เตพ]) เด…เดคเดฟเดจเตเดถเต‡เดทเด‚ เด…เดคเต เดจเดฟเตผเดตเตเดตเดนเดฃเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด’เดฐเต เดšเต†เดฑเดฟเดฏ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเต เดจเตฝเด•เตเด‚ (เดชเตเดฒเต‡ เดฑเต€เด•เดพเดชเตเดชเต).

เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ, เดจเดฟเด™เตเด™เตพ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเตฝ เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตโ€Œเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด‰เดชเดฏเต‹เด•เตเดคเตƒเดจเดพเดฎเด‚ เด•เดฃเด•เตเดทเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดคเต เดฎเดฟเด•เตเด•เดตเดพเดฑเตเด‚ เดนเต‹เดธเตเดฑเตเดฑเดฟเตฝ เด†เดฏเดฟเดฐเดฟเด•เตเด•เดฟเดฒเตเดฒ. เดชเตเดฒเต‡เดฌเตเด•เตเด•เต เดซเดฏเดฒเดฟเตฝ, remote_user เดกเดฏเดฑเด•เตโ€ŒเดŸเต€เดตเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด•เดฃเด•เตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเดพเตป เดเดคเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต† เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฃเดฎเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดพเด‚. เด•เต‚เดŸเดพเดคเต†, เด’เดฐเต เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเดฟเดตเดฐเด™เตเด™เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เด…เดจเดพเดตเดถเตเดฏเดฎเดพเดฏเต‡เด•เตเด•เดพเด‚, เด…เดคเต เดถเต‡เด–เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฟเด™เตเด™เตพ เดธเดฎเดฏเด‚ เดชเดพเดดเดพเด•เตเด•เดฐเตเดคเต. เดˆ เดŸเดพเดธเตโ€Œเด•เต เด…เดชเตเดฐเดพเดชเตโ€Œเดคเดฎเดพเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚:

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

เดชเตเดฒเต‡เดฌเตเด•เตเด•เต เดตเต€เดฃเตเดŸเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เตเด•, เด•เดฃเด•เตเดทเตป เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เตเด•. (เดจเดฟเด™เตเด™เตพ เดฑเต‚เดŸเตเดŸเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต†เดฏเดพเดฃเต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเดคเต†เด™เตเด•เดฟเตฝ, เด‰เดฏเตผเดจเตเดจ เด…เดตเด•เดพเดถเด™เตเด™เตพ เดจเต‡เดŸเตเดจเตเดจเดคเดฟเดจเต เดจเดฟเด™เตเด™เตพ เด†เด•เตเด•: true เดจเดฟเตผเดฆเตเดฆเต‡เดถเดตเตเด‚ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเตเดชเต‹เดฒเต†: become set to โ€˜trueโ€™/โ€™yesโ€™ to activate privilege escalation. เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต†เดจเตเดจเต เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเตเด‚ เดตเตเดฏเด•เตเดคเดฎเดฒเตเดฒเต†เด™เตเด•เดฟเดฒเตเด‚).

เด…เตปเดธเดฟเดฌเดฟเดณเดฟเดจเต เดชเตˆเดคเตเดคเตบ เด‡เดจเตเดฑเตผเดชเตเดฐเต†เดฑเตเดฑเดฑเดฟเดจเต† เดจเดฟเตผเดฃเตเดฃเดฏเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดพเดคเตเดคเดคเดฟเดจเดพเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดชเดฟเดถเด•เต เดฒเดญเดฟเดšเตเดšเต‡เด•เตเด•เดพเด‚, เดคเตเดŸเตผเดจเตเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดคเต เดธเตเดตเดฎเต‡เดงเดฏเดพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚:

ansible_python_interpreter: /usr/bin/python3 

เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเตˆเดคเตเดคเตบ เดŽเดตเดฟเดŸเต†เดฏเดพเดฃเต†เดจเตเดจเต เด•เดฃเตเดŸเต†เดคเตเดคเดพเดจเดพเด•เตเด‚ whereis python.

เดธเดฟเดธเตเดฑเตเดฑเด‚ เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เด…เตปเดธเดฟเดฌเดฟเดณเดฟเดจเตเดฑเต† เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เดกเดฟเดธเตเดŸเตเดฐเดฟเดฌเตเดฏเต‚เดทเดจเดฟเตฝ เดตเดฟเดตเดฟเดง เดธเดฟเดธเตเดฑเตเดฑเด‚ เดชเดพเด•เตเด•เต‡เดœเตเด•เตพเด•เตเด•เตŠเดชเตเดชเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดจเดฟเดฐเดตเดงเดฟ เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เตพ เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เด’เดฐเต เด•เดพเดฐเดฃเดตเดถเดพเดฒเตเด‚ เดžเด™เตเด™เตพ เดฌเดพเดทเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ เดŽเดดเตเดคเต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒ. เดธเดฟเดธเตเดฑเตเดฑเด‚ เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เดธเดฟเดธเตเดฑเตเดฑเด‚ เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เด‡เดชเตเดชเต‹เตพ เดˆ เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เดณเดฟเตฝ เด’เดจเตเดจเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดŽเดจเตเดฑเต† เดตเดฟเดชเดฟเดŽเดธเดฟเตฝ เด‰เดฌเตเดฃเตเดŸเต เดฒเดฟเดจเด•เตเดธเต เด‰เดฃเตเดŸเต, เด…เดคเดฟเดจเดพเตฝ เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเดพเตป เดžเดพเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต 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 เดชเดพเด•เตเด•เต‡เดœเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต†เดจเตเดจเต เดฆเดฏเดตเดพเดฏเดฟ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเด•. เดตเต€เดฃเตเดŸเตเด‚, เดจเดฟเด™เตเด™เตพ เด‡เดคเต เด…เดฑเดฟเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเดฃเด‚; เด…เตปเดธเดฟเดฌเดฟเตพ เดธเตเดตเดจเตเดคเดฎเดพเดฏเดฟ เด‡เดคเต เดšเต†เดฏเตเดฏเดฟเดฒเตเดฒ.

เดชเตเดฒเต‡เดฌเตเด•เตเด•เต เดตเต€เดฃเตเดŸเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เตเด•, เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต‹เดฏเต†เดจเตเดจเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด•.

เดชเตเดคเดฟเดฏ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเต† เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต.

เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป, เด…เตปเดธเดฟเดฌเดฟเดณเดฟเดจเต เด’เดฐเต เดฎเตŠเดกเตเดฏเต‚เดณเตเด‚ เด‰เดฃเตเดŸเต - เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต. เดจเดฎเตเด•เตเด•เต เด’เดฐเต เดŸเดพเดธเตโ€Œเด•เต เด•เต‚เดŸเดฟ เดšเต‡เตผเด•เตเด•เดพเด‚ (เดŽเดฒเตเดฒเดพ เดคเดตเดฃเดฏเตเด‚ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเดฟ เดชเด•เตผเดคเตเดคเดพเดคเดฟเดฐเดฟเด•เตเด•เดพเตป เดžเดพเตป เดชเตเดฒเต‡เดฌเตเด•เตเด•เดฟเดจเตเดฑเต† เด‡เดคเดฟเดจเด•เด‚ เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจ เดญเดพเด—เด™เตเด™เตพ เด•เดฎเดจเตเดฑเตเด•เตพเด•เตเด•เต เดชเดฟเดจเตเดจเดฟเตฝ เดฎเดฑเดšเตเดšเต):

---
- 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] - เดŸเต†เด•เตเดธเตเดฑเตเดฑเดฟเดจเตเดฑเต† เด…เดŸเตเดคเตเดค เดฌเตเดฒเต‹เด•เตเด•เต เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ (vars) เด†เดฃเต†เดจเตเดจเตเด‚ เด…เดต เดŽเดฒเตเดฒเดพ เดนเต‹เดธเตเดฑเตเดฑเตเด•เตพเด•เตเด•เตเด‚ (เดŽเดฒเตเดฒเดพเด‚) เดฌเดพเดงเด•เดฎเดพเดฃเต†เดจเตเดจเตเด‚ เดชเดฑเดฏเตเดจเตเดจเต.

เดกเดฟเดธเตˆเดจเตเด‚ เดฐเดธเด•เดฐเดฎเดพเดฃเต "{{ user_password | password_hash('sha512') }}". เด…เตปเดธเดฟเดฌเดฟเตพ เดตเดดเดฟ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต† เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเดจเตเดจเดฟเดฒเตเดฒ เดŽเดจเตเดจเดคเดพเดฃเต เด•เดพเดฐเตเดฏเด‚ user_add เดจเดฟเด™เตเด™เตพ เด…เดคเต เดธเตเดตเดฎเต‡เดงเดฏเดพ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเตเดชเต‹เดฒเต†. เด•เต‚เดŸเดพเดคเต† เด‡เดคเต เดŽเดฒเตเดฒเดพ เดกเดพเดฑเตเดฑเดฏเตเด‚ เดจเต‡เดฐเดฟเดŸเตเดŸเต เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเดพเดฒเดพเดฃเต เดจเดฎเตเดฎเตพ เดชเดพเดธเตโ€Œเดตเต‡เดกเต เดฎเตเตปเด•เต‚เดŸเตเดŸเดฟ เด’เดฐเต เดนเดพเดทเดฟเดฒเต‡เด•เตเด•เต เดชเดฐเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเต, เด…เดคเดพเดฃเต เดˆ เด•เดฎเดพเตปเดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต.

เดธเตเดกเต‹ เด—เตเดฐเต‚เดชเตเดชเดฟเดฒเต‡เด•เตเด•เต เดจเดฎเตเดฎเตเดŸเต† เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต† เดšเต‡เตผเด•เตเด•เดพเด‚. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด‡เดคเดฟเดจเต เดฎเตเดฎเตเดชเต, เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เด—เตเดฐเต‚เดชเตเดชเต เดจเดฟเดฒเดตเดฟเดฒเตเดฃเตเดŸเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต, เด•เดพเดฐเดฃเด‚ เด†เดฐเตเด‚ เดžเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ เด‡เดคเต เดšเต†เดฏเตเดฏเดฟเดฒเตเดฒ:

---
- 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"

เดŽเดฒเตเดฒเดพเด‚ เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเดฃเต, เด—เตเดฐเต‚เดชเตเดชเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เด—เตเดฐเต‚เดชเตเดชเต เดฎเตŠเดกเตเดฏเต‚เดณเตเด‚ เดžเด™เตเด™เตพเด•เตเด•เตเดฃเตเดŸเต, เด†เดชเตโ€Œเดฑเตเดฑเดฟเดจเต เดธเดฎเดพเดจเดฎเดพเดฏ เดตเดพเด•เตเดฏเด˜เดŸเดจเดฏเตเด‚. เด…เดชเตเดชเต‹เตพ เดˆ เด—เตเดฐเต‚เดชเตเดชเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต เดฐเดœเดฟเดธเตเดฑเตเดฑเตผ เดšเต†เดฏเตเดคเดพเตฝ เดฎเดคเดฟ (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/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 in เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เดพเด‚ 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 เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเตฝ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต (เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดคเต เดธเต†เตผเดตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดจเต‡เดฐเดฟเดŸเตเดŸเต เดŽเดŸเตเด•เตเด•เดพเด‚, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดธเตเดตเดฏเด‚ เดŽเดดเตเดคเดพเด‚). เด•เต‚เดŸเดพเดคเต† sites_available เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟเดฏเดฟเดฒเต† เดžเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดพเดฏเตเดณเตเดณ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเตเด‚ (เด‡เดคเต เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ, เดชเด•เตเดทเต‡ เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเดฃเต). เด†เดฆเตเดฏ เดธเดจเตเดฆเตผเดญเดคเตเดคเดฟเตฝ, เดซเดฏเดฒเตเด•เตพ เดชเด•เตผเดคเตเดคเดพเตป เดžเด™เตเด™เตพ เด•เต‹เดชเตเดชเดฟ เดฎเตŠเดกเตเดฏเต‚เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต (เดซเดฏเตฝ เด…เด•เดคเตเดคเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚ /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 }} - เด‡เดตเดฏเต†เดฒเตเดฒเดพเด‚ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเดพเดฃเต, เด…เดคเดฟเดจเตเดฑเต† เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดชเด•เตผเดคเตเดคเตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต เด…เตปเดธเดฟเดฌเดฟเตพ เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดชเด•เดฐเตเด‚. เดนเต‹เดธเตเดฑเตเดฑเตเด•เดณเตเดŸเต† เดตเดฟเดตเดฟเดง เด—เตเดฐเต‚เดชเตเดชเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดจเดฟเด™เตเด™เตพ เด’เดฐเต เดชเตเดฒเต‡เดฌเตเด•เตเด•เต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ เด‡เดคเต เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเดฃเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดจเดฎเตเด•เตเด•เต เดจเดฎเตเดฎเตเดŸเต† เด‡เตปเดตเต†เดจเตเดฑเดฑเดฟ เดซเดฏเตฝ เดšเต‡เตผเด•เตเด•เดพเด‚:

[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

เดžเด™เตเด™เตพ เด‡เดชเตเดชเต‹เตพ เดžเด™เตเด™เดณเตเดŸเต† เดชเตเดฒเต‡เดฌเตเด•เตเด•เต เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เด…เดคเต เดฐเดฃเตเดŸเต เดนเต‹เดธเตเดฑเตเดฑเตเด•เตพเด•เตเด•เตเด‚ เดจเดฟเตผเดฆเตเดฆเดฟเดทเตโ€ŒเดŸ เดŸเดพเดธเตโ€Œเด•เตเด•เตเด•เตพ เดจเดฟเตผเดตเดนเดฟเด•เตเด•เตเด‚. เดŽเดจเตเดจเดพเตฝ เด…เดคเต‡ เดธเดฎเดฏเด‚, เด’เดฐเต เดธเตเดฑเตเดฑเต‡เดœเดฟเด‚เด—เต เดนเต‹เดธเตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ, เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เดชเตเดฐเตŠเดกเด•เตเดทเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚, เด•เต‚เดŸเดพเดคเต† เดฑเต‹เดณเตเด•เดณเดฟเดฒเตเด‚ เดชเตเดฒเต‡เดฌเตเด•เตเด•เตเด•เดณเดฟเดฒเตเด‚ เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, nginx เด•เต‹เตบเดซเดฟเด—เดฑเตเด•เดณเดฟเดฒเตเด‚. {{ 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 เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เด…เตผเดคเตเดฅเดฎเดฟเดฒเตเดฒ. โ€œเด‡เดคเต เด‡เดคเตเดชเต‹เดฒเต† เดšเต†เดฏเตเดฏเตเด•โ€ เดŽเดจเตเดจเดคเตเดชเต‹เดฒเตเดณเตเดณ เด•เดฎเดพเตปเดกเตเด•เตพ เดžเด™เตเด™เตพ เดŽเดดเตเดคเตเดจเตเดจเดฟเดฒเตเดฒเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพ เดถเตเดฐเดฆเตเดงเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต‹, เดตเดพเด•เตเดฏเด˜เดŸเดจ โ€œเด‡เดคเดฟเดจเต เดˆ เด…เดตเดธเตเดฅ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚โ€ เดŽเดจเตเดจเต เดคเต‹เดจเตเดจเตเดจเตเดจเต. เดฎเดฟเด•เตเด•เดชเตเดชเต‹เดดเตเด‚ เด‡เด™เตเด™เดจเต†เดฏเดพเดฃเต เด…เตปเดธเดฟเดฌเดฟเตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต. เด—เตเดฐเต‚เดชเตเดชเต เด‡เดคเดฟเดจเด•เด‚ เดจเดฟเดฒเดตเดฟเดฒเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดธเดฟเดธเตเดฑเตเดฑเด‚ เดชเดพเด•เตเด•เต‡เดœเต เด‡เดคเดฟเดจเด•เด‚ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เด…เตปเดธเดฟเดฌเดฟเตพ เด‡เดคเต เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเต เดŸเดพเดธเตเด•เต เด’เดดเดฟเดตเดพเด•เตเด•เตเด‚. เด•เต‚เดŸเดพเดคเต†, เดธเต†เตผเดตเดฑเดฟเตฝ เด‡เดคเดฟเดจเด•เด‚ เด‰เดณเตเดณเดตเดฏเตเดฎเดพเดฏเดฟ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเตเด‚ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเดจเตเดจเต†เด™เตเด•เดฟเตฝ เดซเดฏเดฒเตเด•เตพ เดชเด•เตผเดคเตเดคเดชเตเดชเต†เดŸเดฟเดฒเตเดฒ. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเตเด•เตพ เดฎเดพเดฑเตเดฑเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ เดฎเดพเดคเตเดฐเดฎเต‡ เดจเดฎเตเด•เตเด•เต เด‡เดคเต เดชเตเดฐเดฏเต‹เดœเดจเดชเตเดชเต†เดŸเตเดคเตเดคเดพเดจเตเด‚ 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 เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต

เดจเดฎเตเดฎเตพ nginx-เตฝ เดšเต†เดฏเตเดค เด…เดคเต‡ เดฐเต€เดคเดฟเดฏเดฟเตฝ systemd เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต postgresql เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต, เด•เต‚เดŸเดพเดคเต† เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเด‚ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเด‚ เด†เด•เตเดธเดธเต เดšเต†เดฏเตเดฏเดพเตป เดžเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต† เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดตเต‡เดฃเด‚.
เดจเดฎเตเด•เตเด•เต เด’เดฐเต เดฑเต‹เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเด‚ /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. เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ, postgres เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต เดฎเดพเดคเตเดฐเดฎเต‡ postgresql เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เดชเตเดฐเดตเต‡เดถเดจเดฎเตเดณเตเดณเต‚, เดชเตเดฐเดพเดฆเต‡เดถเดฟเด•เดฎเดพเดฏเดฟ เดฎเดพเดคเตเดฐเด‚. เดˆ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต เดตเต‡เดฃเตเดŸเดฟ เด•เดฎเดพเตปเดกเตเด•เตพ เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเดพเตป เดˆ เดจเดฟเตผเดฆเตเดฆเต‡เดถเด‚ เดžเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต (เดžเด™เตเด™เตพเด•เตเด•เต เด†เด•เตเดธเดธเต เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚).
เด•เต‚เดŸเดพเดคเต†, เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดชเตเดคเดฟเดฏ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต เดชเตเดฐเดตเต‡เดถเดจเด‚ เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต pg_hba.conf เดŽเดจเตเดจเดคเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดตเดฐเดฟ เดšเต‡เตผเด•เตเด•เต‡เดฃเตเดŸเดฟ เดตเดจเตเดจเต‡เด•เตเด•เดพเด‚. เดžเด™เตเด™เตพ nginx เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฎเดพเดฑเตเดฑเดฟเดฏ เด…เดคเต‡ เดฐเต€เดคเดฟเดฏเดฟเตฝ เด‡เดคเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚.

เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดจเดฟเด™เตเด™เตพ เดชเตเดฐเดงเดพเดจ เดชเตเดฒเต‡เดฌเตเด•เตเด•เดฟเดฒเต‡เด•เตเด•เต postgresql เดฑเต‹เตพ เดšเต‡เตผเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

Rbenv เดตเดดเดฟ เดฑเต‚เดฌเดฟ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เด…เตปเดธเดฟเดฌเดฟเดณเดฟเดจเต 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 เด…เดคเดฟเดจเตเดฑเต† เดนเต‹เด‚ เดกเดฏเดฑเด•เตเดŸเดฑเดฟเดฏเดฟเตฝ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ, เด†เด—เต‹เดณเดคเดฒเดคเตเดคเดฟเตฝ เด…เดฒเตเดฒ. เดฑเดฟเดชเตเดชเต‹, เดกเต†เดธเตโ€Œเดฑเตเดฑเต เดŽเดจเตเดจเดฟเดต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจ เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟ เด•เตเดฒเต‹เตบ เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดžเด™เตเด™เตพ เดœเดฟเดฑเตเดฑเต เดฎเตŠเดกเตเดฏเต‚เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต.

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, 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 เดตเดดเดฟเดฏเดพเดฃเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต, เด…เดคเดพเดฏเดคเต, เดฌเดพเดทเต เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต:

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

เดเดคเต เด•เดฎเดพเตปเดกเต เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเดฃเดฎเต†เดจเตเดจเตเด‚ เดŽเดจเตเดคเตเดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดŸเดคเตเดคเดฃเดฎเต†เดจเตเดจเตเด‚ เดžเด™เตเด™เตพ เดชเดฑเดฏเตเดจเตเดจเต. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด•เดฎเดพเตปเดกเตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต bashrc-เตฝ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด•เต‹เดกเต ansible เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ เดŽเดจเตเดจ เดตเดธเตเดคเตเดค เด‡เดตเดฟเดŸเต† เด•เดพเดฃเดพเด‚. เด‡เดคเดฟเดจเตผเดคเตเดฅเด‚ 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 เดšเต‡เตผเด•เตเด•เตเด•.

เดชเด™เตเด•เดฟเดŸเตเดŸ เดซเดฏเดฒเตเด•เตพ.

เดชเตŠเดคเตเดตเต‡, เดธเดœเตเดœเต€เด•เดฐเดฃเด‚ เด‡เดตเดฟเดŸเต† เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เดพเด‚. เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เด•เดพเดชเตเดชเดฟเดธเตเดŸเตเดฐเดพเดจเต‹ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด• เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เด…เดตเดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจเดคเต, เด…เดคเต เด•เต‹เดกเต เดคเดจเตเดจเต† เดชเด•เตผเดคเตเดคเตเด•เดฏเตเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฏ เดกเดฏเดฑเด•เตเดŸเดฑเดฟเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚ (เดŽเดฒเตเดฒเดพเด‚ เดถเดฐเดฟเดฏเดพเดฏเดฟ เด•เตเดฐเดฎเต€เด•เดฐเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ). เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด•เตเดฏเดพเดชเดฟเดธเตเดŸเตเดฐเดพเดจเต‹เดฏเตเด•เตเด•เต เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เด…เดงเดฟเด• เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเตเด•เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต 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-playbook -i inventory ./playbook.yml -l "staging" --ask-vault-pass

เดŽเดจเตเดจเดพเตฝ เดชเตเดฒเต‡เดฌเตเด•เตเด•เตเด•เดณเตเดŸเต†เดฏเตเด‚ เดฑเต‹เดณเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดฎเตเดดเตเดตเตป เดตเดพเดšเด•เดตเตเด‚ เดžเดพเตป เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดจเตฝเด•เดฟเดฒเตเดฒ, เด…เดคเต เดธเตเดตเดฏเด‚ เดŽเดดเตเดคเตเด•. เด•เดพเดฐเดฃเด‚ เด…เตปเดธเดฟเดฌเดฟเตพ เด…เด™เตเด™เดจเต†เดฏเดพเดฃเต - เดŽเดจเตเดคเดพเดฃเต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเดจเตเดจเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด…เดคเต เดจเดฟเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ เดšเต†เดฏเตเดฏเดฟเดฒเตเดฒ.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•