เชฅเซเชกเชพ เชธเชฎเชฏ เชชเชนเซเชฒเชพ เชฎเชจเซ เชฐเซเชฒเซเชธ เชเชชเซเชฒเชฟเชเซเชถเชจ เชเชฎเชพเชตเชตเชพ เชฎเชพเชเซ เชธเชฐเซเชตเชฐเชจเซ เชคเซเชฏเชพเชฐ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชฃเซ เชเชตเชพเชฌเซ เชชเซเชฒเซเชฌเซเช เชฒเชเชตเชพเชจเซ เชเชฐเซเชฐ เชนเชคเซ. เช เชจเซ, เชเชถเซเชเชฐเซเชฏเชเชจเช เชฐเซเชคเซ, เชฎเชจเซ เชเช เชธเชฐเชณ เชชเชเชฒเซเช เชฆเซเชตเชพเชฐเชพ เชชเชเชฒเซเช เชฎเชพเชฐเซเชเชฆเชฐเซเชถเชฟเชเชพ เชฎเชณเซ เชจเชฅเซ. เชถเซเช เชฅเช เชฐเชนเซเชฏเซเช เชเซ เชคเซ เชธเชฎเชเซเชฏเชพ เชตเชฟเชจเชพ เชนเซเช เชเซเช เชฌเซเชเชพเชจเซ เชชเซเชฒเซเชฌเซเชเชจเซ เชจเชเชฒ เชเชฐเชตเชพ เชฎเชพเชเชเชคเซ เชจ เชนเชคเซ, เช เชจเซ เช เชเชคเซ เชฎเชพเชฐเซ เชฌเชงเซเช เชเชพเชคเซ เชเชเชคเซเชฐเชฟเชค เชเชฐเซเชจเซ เชฆเชธเซเชคเชพเชตเซเชเซ เชตเชพเชเชเชตเชพ เชชเชกเซเชฏเชพ. เชเชฆเชพเช เชนเซเช เช เชฒเซเชเชจเซ เชฎเชฆเชฆเชฅเซ เช เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชเชกเชชเซ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชเซเชเชจเซ เชฎเชฆเชฆ เชเชฐเซ เชถเชเซเช.
เชธเชฎเชเชตเชพ เชฎเชพเชเซเชจเซ เชชเซเชฐเชฅเชฎ เชตเชธเซเชคเซ เช เชเซ เชเซ เชเชตเชพเชฌเซ เช เชคเชฎเชจเซ SSH เชฎเชพเชฐเชซเชคเซ เชฐเซเชฎเซเช เชธเชฐเซเชตเชฐ(เช) เชชเชฐ เชเซเชฐเชฟเชฏเชพเชเชจเซ เชชเซเชฐเซเชตเชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชธเซเชเชฟ เชเชฐเชตเชพ เชฎเชพเชเซ เช เชจเซเชเซเชณ เชเชจเซเชเชฐเชซเซเชธ เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ. เช เชนเซเช เชเซเช เชเชพเชฆเซ เชจเชฅเซ, เชคเชฎเซ เชชเซเชฒเชเชเชจ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซ เชถเชเชคเชพ เชจเชฅเซ เช เชจเซ เชกเซเชเชฐ, เชฎเซเชจเชฟเชเชฐเชฟเชเช เช เชจเซ เชฌเซเชเซเชธเชจเซ เชฌเชนเชพเชฐเชจเซ เช เชจเซเชฏ เชเซเชกเซเช เชธเชพเชฅเซ เชคเชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชถเซเชจเซเชฏ เชกเชพเชเชจเชเชพเชเชฎ เชเชฎเชพเชตเช เชฎเซเชณเชตเซ เชถเชเชคเชพ เชจเชฅเซ. เชชเซเชฒเซเชฌเซเช เชฒเชเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชเชพเชฃเชตเซเช เชเซเชเช เชเซ เชคเชฎเซ เชฌเชฐเชพเชฌเชฐ เชถเซเช เชเชฐเชตเชพ เชฎเชพเชเชเซ เชเซ เช เชจเซ เชคเซ เชเซเชตเซ เชฐเซเชคเซ เชเชฐเชตเซเช. เชคเซเชฅเซ เช เชนเซเช GitHub เชคเชฐเชซเชฅเซ เชคเซเชฏเชพเชฐ เชชเซเชฒเซเชฌเซเช เช เชฅเชตเชพ เชฒเซเชเซเชฅเซ เชธเชเชคเซเชทเซเช เชจเชฅเซ เชเซเชฎ เชเซ: "เชเซเชชเชฟ เชเชฐเซ เช เชจเซ เชเชฒเชพเชตเซ, เชคเซ เชเชพเชฎ เชเชฐเชถเซ."
เชเชชเชฃเชจเซ เชถเซเช เชเซเชเช เชเซ?
เชฎเซเช เชชเชนเซเชฒเซเชฅเซ เช เชเชนเซเชฏเซเช เชคเซเชฎ, เชชเซเชฒเซเชฌเซเช เชฒเชเชตเชพ เชฎเชพเชเซ เชคเชฎเชพเชฐเซ เชเชพเชฃเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เชเซ เชคเชฎเซ เชถเซเช เชเชฐเชตเชพ เชฎเชพเชเชเซ เชเซ เช เชจเซ เชคเซ เชเซเชตเซ เชฐเซเชคเซ เชเชฐเชตเซเช. เชเชพเชฒเซ เชจเชเซเชเซ เชเชฐเซเช เชเซ เชเชชเชฃเชจเซ เชถเซเช เชเซเชเช เชเซ. เชฐเซเชฒเซเชธ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฎเชพเชเซ เช เชฎเชจเซ เชเชฃเชพ เชธเชฟเชธเซเชเชฎ เชชเซเชเซเชเซเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ: nginx, postgresql (redis, เชตเชเซเชฐเซ). เชตเชงเซเชฎเชพเช, เช เชฎเชจเซ เชฐเซเชฌเซเชจเชพ เชเซเชเซเชเชธ เชธเชเชธเซเชเชฐเชฃเชจเซ เชเชฐเซเชฐ เชเซ. เชคเซเชจเซ rbenv (rvm, asdf...) เชฆเซเชตเชพเชฐเชพ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเซเช เชถเซเชฐเซเชทเซเช เชเซ. เชฐเซเช เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชคเชฐเซเชเซ เช เชฌเชงเซเช เชเชฒเชพเชตเชตเซเช เช เชนเชเชฎเซเชถเชพ เชเชฐเชพเชฌ เชตเชฟเชเชพเชฐ เชเซ, เชคเซเชฅเซ เชคเชฎเชพเชฐเซ เชเช เช เชฒเช เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชฌเชจเชพเชตเชตเชพเชจเซ เช เชจเซ เชคเซเชจเชพ เช เชงเชฟเชเชพเชฐเซเชจเซ เชเซเช เชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เช เชชเชเซ, เชคเชฎเชพเชฐเซ เช เชฎเชพเชฐเซ เชเซเชก เชธเชฐเซเชตเชฐ เชชเชฐ เช เชชเชฒเซเชก เชเชฐเชตเซ เชชเชกเชถเซ, nginx, postgres, เชตเชเซเชฐเซ เชฎเชพเชเซ เชฐเซเชชเชฐเซเชเชพเชเชจเซ เชจเชเชฒ เชเชฐเชตเซ เชชเชกเชถเซ เช เชจเซ เช เชฌเชงเซ เชธเซเชตเชพเช เชถเชฐเซ เชเชฐเชตเซ เชชเชกเชถเซ.
เชชเชฐเชฟเชฃเชพเชฎเซ, เชเซเชฐเชฟเชฏเชพเชเชจเซ เชเซเชฐเชฎ เชจเซเชเซ เชฎเซเชเชฌ เชเซ:
- เชฐเซเช เชคเชฐเซเชเซ เชฒเซเชเชฟเชจ เชเชฐเซ
- เชธเชฟเชธเซเชเชฎ เชชเซเชเซเชเซ เชธเซเชฅเชพเชชเชฟเชค เชเชฐเซ
- เชจเชตเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชฌเชจเชพเชตเซ, เช เชงเชฟเชเชพเชฐเซ เชเซเช เชตเซ, ssh เชเซ
- เชธเชฟเชธเซเชเชฎ เชชเซเชเซเชเซ (nginx เชตเชเซเชฐเซ) เชฐเซเชชเชฐเซเชเชพเชเชเชฟเชค เชเชฐเซ เช เชจเซ เชคเซเชฎเชจเซ เชเชฒเชพเชตเซ
- เช เชฎเซ เชกเซเชเชพเชฌเซเชเชฎเชพเช เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชฌเชจเชพเชตเซเช เชเซเช (เชคเชฎเซ เชคเชฐเชค เช เชกเซเชเชพเชฌเซเช เชฌเชจเชพเชตเซ เชถเชเซ เชเซ)
- เชจเชตเชพ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชคเชฐเซเชเซ เชฒเซเชเชฟเชจ เชเชฐเซ
- rbenv เช เชจเซ ruby โโเชเชจเซเชธเซเชเซเชฒ เชเชฐเซ
- เชฌเชเชกเชฒเชฐ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซ เชฐเชนเซเชฏเซเช เชเซ
- เชเชชเซเชฒเชฟเชเซเชถเชจ เชเซเชก เช เชชเชฒเซเชก เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช
- เชชเซเชฎเชพ เชธเชฐเซเชตเชฐ เชฒเซเชเช เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช
เชตเชงเซเชฎเชพเช, เชเซเชฒเซเชฒเชพ เชคเชฌเชเซเชเชพเช เชเซเชชเชฟเชธเซเชเซเชฐเชพเชจเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชฐเซ เชถเชเชพเชฏ เชเซ, เชเชเชพเชฎเชพเช เชเชเชพ เชฌเซเชเซเชธเชจเซ เชฌเชนเชพเชฐ เชคเซ เชเซเชกเชจเซ เชฐเชฟเชฒเซเช เชกเชฟเชฐเซเชเซเชเชฐเซเชเชฎเชพเช เชเซเชชเชฟ เชเชฐเซ เชถเชเซ เชเซ, เชธเชซเชณ เชเชฎเชพเชตเช เชชเชฐ เชธเชฟเชฎเชฒเชฟเชเช เชธเชพเชฅเซ เชฐเชฟเชฒเซเชเชจเซ เชธเซเชตเชฟเช เชเชฐเซ เชถเชเซ เชเซ, เชถเซเชฐ เชเชฐเซเชฒเซ เชกเชฟเชฐเซเชเซเชเชฐเซเชฎเชพเชเชฅเซ เชเซเชชเชฟ เชเซเชชเชฟ เชเชฐเซ เชถเชเซ เชเซ, เชชเซเชฏเซเชฎเชพเชจเซ เชซเชฐเซเชฅเซ เชถเชฐเซ เชเชฐเซ เชถเชเซ เชเซ, เชตเชเซเชฐเซ. เช เชฌเชงเซเช Ansible เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชฐเซ เชถเชเชพเชฏ เชเซ, เชชเชฃ เชถเชพ เชฎเชพเชเซ?
เชซเชพเชเชฒ เชฎเชพเชณเชเซเช
Ansible เชเชกเช เชเซ
เชธเชฐเชณ เชชเซเชฒเซเชฌเซเช
เชชเซเชฒเซเชฌเซเช เช เชเช 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 เชเชเซเชธเซเชธ เชนเซเชฏ, เชคเซ เชเชตเชพเชฌเซเชฌเชฒ เชเชจเซเชเซเช เชเชฐเชถเซ เช เชจเซ เชฐเซเชฎเซเช เชธเชฟเชธเซเชเชฎ เชตเชฟเชถเซเชจเซ เชฎเชพเชนเชฟเชคเซ เชเชเชคเซเชฐเชฟเชค เชเชฐเชถเซ. (เชกเชฟเชซเซเชฒเซเช เชเชพเชธเซเช [เชเซเชงเชฐเชฟเชเช เชซเซเชเซเชเซเชธ]) เชเซ เชชเชเซ เชคเซ เชเชเซเชเซเชเซเชฏเซเชถเชจ เชชเชฐ เชเซเชเชเซ เชฐเชฟเชชเซเชฐเซเช เชเชชเชถเซ (RECAP เชชเซเชฒเซ เชเชฐเซ).
เชฎเซเชณเชญเซเชค เชฐเซเชคเซ, เชเซเชกเชพเชฃ เช เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเชพเชฎเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ เชเซ เชเซเชจเชพ เชนเซเช เชณ เชคเชฎเซ เชธเชฟเชธเซเชเชฎเชฎเชพเช เชฒเซเช เชเชจ เชฅเชฏเชพ เชเซ. เชคเซ เชฎเซเชเซ เชญเชพเชเซ เชนเซเชธเซเช เชชเชฐ เชฐเชนเซเชถเซ เชจเชนเซเช. เชชเซเชฒเซเชฌเซเช เชซเชพเชเชฒเชฎเชพเช, เชคเชฎเซ remote_user เชกเชพเชฏเชฐเซเชเซเชเชฟเชตเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชจเซเชเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชเชฏเชพ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเซ เชเชชเชฏเซเช เชเชฐเชตเซ เชคเซเชจเซ เชเชฒเซเชฒเซเช เชเชฐเซ เชถเชเซ เชเซ. เชเชชเชฐเชพเชเชค, เชฐเชฟเชฎเซเช เชธเชฟเชธเซเชเชฎ เชตเชฟเชถเซเชจเซ เชฎเชพเชนเชฟเชคเซ เชคเชฎเชพเชฐเชพ เชฎเชพเชเซ เชเชฃเซเชตเชพเชฐ เชฌเชฟเชจเชเชฐเซเชฐเซ เชนเซเช เชถเชเซ เชเซ เช เชจเซ เชคเชฎเชพเชฐเซ เชคเซเชจเซ เชเชเชคเซเชฐเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชธเชฎเชฏ เชฌเชเชพเชกเชตเซ เชเซเชเช เชจเชนเซเช. เช เชเชพเชฐเซเชฏเชจเซ เช เชเซเชทเชฎ เชชเชฃ เชเชฐเซ เชถเชเชพเชฏ เชเซ:
---
- name: Simple playbook
hosts: all
remote_user: root
become: true
gather_facts: no
เชชเซเชฒเซเชฌเซเชเชจเซ เชซเชฐเซเชฅเซ เชเชฒเชพเชตเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซ เช
เชจเซ เชเชพเชคเชฐเซ เชเชฐเซ เชเซ เชเชจเซเชเซเชถเชจ เชเชพเชฎ เชเชฐเซ เชฐเชนเซเชฏเซเช เชเซ. (เชเซ เชคเชฎเซ เชฐเซเช เชฏเซเชเชฐเชจเซ เชเชฒเซเชฒเซเช เชเชฐเซเชฏเซ เชเซ, เชคเซ เชคเชฎเชพเชฐเซ เชเชฒเชฟเชตเซเชเซเชก เช
เชงเชฟเชเชพเชฐเซ เชฎเซเชณเชตเชตเชพ เชฎเชพเชเซ become: true เชกเชพเชฏเชฐเซเชเซเชเชฟเชต เชชเชฃ เชธเซเชชเชทเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชฆเชธเซเชคเชพเชตเซเชเซเชเชฐเชฃเชฎเชพเช เชฒเชเซเชฏเชพ เชชเซเชฐเชฎเชพเชฃเซ: become set to โtrueโ/โyesโ to activate privilege escalation.
เชเซ เชเซ เชคเซ เชถเชพ เชฎเชพเชเซ เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เชธเซเชชเชทเซเช เชจเชฅเซ).
เชเชฆเชพเช เชคเชฎเชจเซ เช เชนเชเซเชเชคเชจเซ เชเชพเชฐเชฃเซ เชญเซเชฒ เชชเซเชฐเชพเชชเซเชค เชฅเชถเซ เชเซ เชเชตเชพเชฌเซ เชชเชพเชฏเชฅเซเชจ เชฆเซเชญเชพเชทเชฟเชฏเชพเชจเซ เชจเชฟเชฐเซเชงเชพเชฐเชฟเชค เชเชฐเซ เชถเชเชคเซเช เชจเชฅเซ, เชชเชเซ เชคเชฎเซ เชคเซเชจเซ เชเชพเชคเซ เช เชธเซเชชเชทเซเช เชเชฐเซ เชถเชเซ เชเซ:
ansible_python_interpreter: /usr/bin/python3
เชคเชฎเซ เชเชฆเซเชถ เชตเชกเซ เชถเซเชงเซ เชถเชเซ เชเซ เชเซ เชคเชฎเชพเชฐเซ เชชเชพเชธเซ เชชเชพเชฏเชฅเซเชจ เชเซเชฏเชพเช เชเซ 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
เชเชพเชธเซเช เชฌเชฐเชพเชฌเชฐ เช เช เชเชพเชฐเซเชฏ เชเซ เชเซ Ansible เชฐเชฟเชฎเซเช เชธเชฐเซเชตเชฐเซเชธ เชชเชฐ เชเชฐเชถเซ. เช
เชฎเซ เชเชพเชฐเซเชฏเชจเซ เชเช เชจเชพเชฎ เชเชชเซเช เชเซเช เชเซเชฅเซ เชเชฐเซเชจเซ เช
เชฎเซ เชฒเซเชเชฎเชพเช เชคเซเชจเชพ เช
เชฎเชฒเชจเซ เชเซเชฐเซ
เช เชเชฐเซ เชถเชเซเช. เช
เชจเซ เช
เชฎเซ เชตเชฟเชถเชฟเชทเซเช เชฎเซเชกเซเชฏเซเชฒเชจเชพ เชตเชพเชเซเชฏเชฐเชเชจเชพเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ, เชคเซเชจเซ เชถเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เชคเซเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเซเช เชเซเช. เช เชฌเชพเชฌเชคเซ apt: update_cache=yes
- เชเชชเซเช เชฎเซเชกเซเชฏเซเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชธเชฟเชธเซเชเชฎ เชชเซเชเซเชเซเชจเซ เช
เชชเชกเซเช เชเชฐเชตเชพเชจเซเช เชเชนเซ เชเซ. เชฌเซเชเซ เชเชฆเซเชถ เชฅเซเชกเซ เชตเชงเซ เชเชเชฟเชฒ เชเซ. เช
เชฎเซ 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]
- เชคเซ เชเชนเซ เชเซ เชเซ เชเซเชเซเชธเซเชเชจเซ เชเชเชณเชจเซ เชฌเซเชฒเซเช เชเชฒ (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"
เชฌเชงเซเช เชเชเชฆเชฎ เชธเชฐเชณ เชเซ, เช
เชฎเชพเชฐเซ เชชเชพเชธเซ เชเซเชฅเซ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชเช เชเซเชฅ เชฎเซเชกเซเชฏเซเชฒ เชชเชฃ เชเซ, เชเซเชฎเชพเช เชตเชพเชเซเชฏเชฐเชเชจเชพ เชเซเชฌ เช เชฏเซเชเซเชฏ เชเซ. เชชเชเซ เช เชเซเชฅเชจเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเซ เชจเซเชเชงเชฃเซ เชเชฐเชตเชพ เชฎเชพเชเซ เชคเซ เชชเซเชฐเชคเซเช เชเซ (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
เชเซ เชเชชเชฃเซ เชนเชตเซ เช
เชฎเชพเชฐเซ เชชเซเชฒเซเชฌเซเช เชฒเซเชจเซเช เชเชฐเซเช, เชคเซ เชคเซ เชฌเชเชจเซ เชฏเชเชฎเชพเชจเซ เชฎเชพเชเซ เชจเชฟเชฐเซเชฆเชฟเชทเซเช เชเชพเชฐเซเชฏเซ เชเชฐเชถเซ. เชชเชฐเชเชคเซ เชคเซ เช เชธเชฎเชฏเซ, เชธเซเชเซเชเซเชเช เชนเซเชธเซเช เชฎเชพเชเซ, เชเชฒเซ เชเชคเซเชชเชพเชฆเชจ เชเชฐเชคเชพ เช
เชฒเช เชนเชถเซ, เช
เชจเซ เชฎเชพเชคเซเชฐ เชญเซเชฎเชฟเชเชพเช เช
เชจเซ เชชเซเชฒเซเชฌเซเชเชฎเชพเช เช เชจเชนเซเช, เชชเชฃ nginx เชฐเซเชชเชฐเซเชเชพเชเชฎเชพเช เชชเชฃ. {{ inventory_hostname }}
เชเชจเซเชตเซเชจเซเชเชฐเซ เชซเชพเชเชฒเชฎเชพเช เชเชฒเซเชฒเซเชเชฟเชค เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชจเชฅเซ - เช
เชเซ เชคเชฎเซ เชเชฃเชพ เชฏเชเชฎเชพเชจเซ เชฎเชพเชเซ เชเชจเซเชตเซเชจเซเชเชฐเซ เชซเชพเชเชฒ เชฐเชพเชเชตเชพ เชฎเชพเชเชเชคเชพ เชนเซ, เชชเชฐเชเชคเซ เชฎเชพเชคเซเชฐ เชเช เชเซเชฅ เชฎเชพเชเซ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเชเซ เชเซ, เชคเซ เช เชจเซเชเซเชจเชพ เชเชฆเซเชถเชฅเซ เชเชฐเซ เชถเชเชพเชฏ เชเซ:
ansible-playbook -i inventory ./playbook.yml -l "staging"
เชฌเซเชเซ เชตเชฟเชเชฒเซเชช เช เชเซ เชเซ เชตเชฟเชตเชฟเชง เชเซเชฅเซ เชฎเชพเชเซ เช เชฒเช เชเชจเซเชตเซเชจเซเชเชฐเซ เชซเชพเชเชฒเซ เชนเซเชฏ. เช เชฅเชตเชพ เชเซ เชคเชฎเชพเชฐเซ เชชเชพเชธเซ เชเชฃเชพเช เชตเชฟเชตเชฟเชง เชนเซเชธเซเช เชนเซเชฏ เชคเซ เชคเชฎเซ เชฌเซ เช เชญเชฟเชเชฎเซเชจเซ เชเซเชกเซ เชถเชเซ เชเซ.
เชเชพเชฒเซ nginx เชธเซเช เชเชฐเชตเชพ เชชเชฐ เชชเชพเชเชพ เชเชเช. เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชซเชพเชเชฒเซเชจเซ เชจเชเชฒ เชเชฐเซเชฏเชพ เชชเชเซ, เช เชฎเชพเชฐเซ sitest_enabled เชฎเชพเช my_app.conf เชฅเซ sites_available เชฎเชพเช เชธเชฟเชฎเชฒเชฟเชเช เชฌเชจเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เช เชจเซ 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 เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ Ansible เชชเชพเชธเซ เชฎเซเชกเซเชฏเซเชฒเซ เชจเชฅเซ, เชชเชฐเชเชคเซ เชคเซ เชเชฟเช เชฐเชฟเชชเซเชเซเชเชฐเซเชจเซ เชเซเชฒเซเชจ เชเชฐเซเชจเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซเชฒเซเช เชเซ. เชคเซเชฅเซ, เช เชธเชฎเชธเซเชฏเชพ เชธเซเชฅเซ เชฌเชฟเชจ-เชฎเชพเชจเช เชฌเชจเซ เชเชพเชฏ เชเซ. เชเชพเชฒเซ เชคเซเชจเชพ เชฎเชพเชเซ เชเช เชญเซเชฎเชฟเชเชพ เชฌเชจเชพเชตเซเช /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 -)"'
เชชเชเซ เชคเชฎเชพเชฐเซ เชฐเซเชฌเซ_เชฌเชฟเชฒเซเชก เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ:
- 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