แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ Rails แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒšแƒแƒ“ Ansible-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒแƒ แƒช แƒ˜แƒกแƒ” แƒ“แƒ˜แƒ“แƒ˜ แƒฎแƒœแƒ˜แƒก แƒฌแƒ˜แƒœ แƒ“แƒแƒ›แƒญแƒ˜แƒ แƒ“แƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” Ansible แƒกแƒแƒ—แƒแƒ›แƒแƒจแƒ แƒฌแƒ˜แƒ’แƒœแƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ, แƒ แƒแƒ› แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ แƒ›แƒแƒ”แƒ›แƒ–แƒแƒ“แƒ”แƒ‘แƒ˜แƒœแƒ Rails แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“. แƒ“แƒ, แƒ’แƒแƒกแƒแƒ™แƒ•แƒ˜แƒ แƒ˜แƒ, แƒ แƒแƒ› แƒ›แƒ” แƒ•แƒ”แƒ  แƒ•แƒ˜แƒžแƒแƒ•แƒ” แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏ-แƒœแƒแƒ‘แƒ˜แƒฏ แƒกแƒแƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒ. แƒแƒ  แƒ›แƒ˜แƒœแƒ“แƒแƒ“แƒ แƒกแƒฎแƒ•แƒ˜แƒกแƒ˜ แƒกแƒแƒ—แƒแƒ›แƒแƒจแƒ แƒฌแƒ˜แƒ’แƒœแƒ˜แƒก แƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒแƒ  แƒ’แƒแƒ›แƒ”แƒ’แƒ แƒ แƒ แƒฎแƒ“แƒ”แƒ‘แƒแƒ“แƒ แƒ“แƒ แƒ‘แƒแƒšแƒแƒก แƒ›แƒแƒ›แƒ˜แƒฌแƒ˜แƒ แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ˜แƒก แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ, แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ—แƒแƒ•แƒแƒ“ แƒจแƒ”แƒ›แƒ”แƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒ˜แƒœแƒ. แƒ˜แƒฅแƒœแƒ”แƒ‘ แƒ“แƒแƒ•แƒ”แƒฎแƒ›แƒแƒ แƒ แƒ•แƒ˜แƒœแƒ›แƒ”แƒก แƒแƒ› แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒ“แƒแƒฉแƒฅแƒแƒ แƒ”แƒ‘แƒแƒจแƒ˜ แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒ“แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒ—.

แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜, แƒ แƒแƒช แƒฃแƒœแƒ“แƒ แƒ’แƒ•แƒ”แƒกแƒ›แƒแƒ“แƒ”แƒก, แƒแƒ แƒ˜แƒก แƒ˜แƒก, แƒ แƒแƒ› ansible แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒš แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒก, แƒ แƒแƒ—แƒ แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒแƒ— แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒฃแƒšแƒ˜ แƒกแƒ˜แƒ แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ  แƒกแƒ”แƒ แƒ•แƒ”แƒ (แƒ”แƒ‘)แƒ–แƒ” SSH-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—. แƒแƒฅ แƒฏแƒแƒ“แƒแƒฅแƒ แƒแƒ‘แƒ แƒแƒ  แƒแƒ แƒ˜แƒก, แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒ  แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒแƒ— แƒ“แƒแƒœแƒแƒ›แƒแƒขแƒ˜ แƒ“แƒ แƒแƒ  แƒ›แƒ˜แƒ˜แƒฆแƒแƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒœแƒฃแƒšแƒแƒ•แƒแƒœแƒ˜ แƒจแƒ”แƒคแƒ”แƒ แƒฎแƒ”แƒ‘แƒ แƒ“แƒแƒ™แƒ”แƒ แƒ˜แƒ—, แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒ— แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒกแƒ˜แƒ™แƒ”แƒ—แƒ”แƒ”แƒ‘แƒ˜แƒ—. แƒกแƒแƒ—แƒแƒ›แƒแƒจแƒ แƒฌแƒ˜แƒ’แƒœแƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒ”แƒ แƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ˜แƒชแƒแƒ“แƒ”แƒ— แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ แƒ˜แƒกแƒ˜ แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒ’แƒกแƒฃแƒ แƒ— แƒ“แƒ แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒ— แƒ”แƒก. แƒแƒ›แƒ˜แƒขแƒแƒ›แƒแƒช แƒแƒ  แƒ•แƒแƒ  แƒ™แƒ›แƒแƒงแƒแƒคแƒ˜แƒšแƒ˜ GitHub-แƒ˜แƒก แƒ›แƒ–แƒ แƒกแƒแƒ—แƒแƒ›แƒแƒจแƒ แƒฌแƒ˜แƒ’แƒœแƒ”แƒ‘แƒ˜แƒ— แƒแƒœ แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ: โ€žแƒ“แƒแƒแƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ— แƒ“แƒ แƒ’แƒแƒฃแƒจแƒ•แƒ˜แƒ—, แƒ˜แƒก แƒ˜แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒกโ€œ.

แƒ แƒ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ?

แƒ แƒแƒ’แƒแƒ แƒช แƒฃแƒ™แƒ•แƒ” แƒ•แƒ—แƒฅแƒ•แƒ˜, แƒกแƒแƒ—แƒแƒ›แƒแƒจแƒ แƒฌแƒ˜แƒ’แƒœแƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒ”แƒ แƒแƒ“ แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ˜แƒชแƒแƒ“แƒ”แƒ— แƒ แƒ˜แƒกแƒ˜ แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒ’แƒกแƒฃแƒ แƒ— แƒ“แƒ แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒ— แƒ”แƒก. แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒแƒ— แƒ แƒ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ. Rails แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒแƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒžแƒแƒ™แƒ”แƒขแƒ˜: nginx, postgresql (redis แƒ“แƒ แƒ.แƒจ.). แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ˜แƒกแƒ, แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ แƒฃแƒ‘แƒ˜แƒก แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ. แƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ˜แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ rbenv-แƒ˜แƒก (rvm, asdf...) แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—. แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ root แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ–แƒ” แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒชแƒฃแƒ“แƒ˜ แƒ˜แƒ“แƒ”แƒแƒ, แƒแƒกแƒ” แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒชแƒแƒšแƒ™แƒ” แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ“แƒ แƒ“แƒแƒแƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒแƒ— แƒ›แƒ˜แƒกแƒ˜ แƒฃแƒคแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜. แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ— แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ™แƒแƒ“แƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”, แƒ“แƒแƒแƒ™แƒแƒžแƒ˜แƒ แƒแƒ— แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜ nginx-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, postgres-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ.แƒจ. แƒ“แƒ แƒ“แƒแƒ˜แƒฌแƒงแƒแƒ— แƒงแƒ•แƒ”แƒšแƒ แƒ”แƒก แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜.

แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“, แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ แƒแƒกแƒ”แƒ—แƒ˜แƒ:

  1. แƒจแƒ”แƒกแƒ•แƒšแƒ แƒ แƒแƒ’แƒแƒ แƒช root
  2. แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ
  3. แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒแƒฎแƒแƒšแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜, แƒ“แƒแƒแƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒ”แƒ— แƒฃแƒคแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜, ssh แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜
  4. แƒ“แƒแƒแƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒ”แƒ— แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜ (nginx แƒ“แƒ แƒ.แƒจ.) แƒ“แƒ แƒ’แƒแƒฃแƒจแƒ•แƒ˜แƒ— แƒ˜แƒกแƒ˜แƒœแƒ˜
  5. แƒฉแƒ•แƒ”แƒœ แƒ•แƒฅแƒ›แƒœแƒ˜แƒ— แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ (แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒฃแƒงแƒแƒ•แƒœแƒ”แƒ‘แƒšแƒ˜แƒ• แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ)
  6. แƒจแƒ”แƒ“แƒ˜แƒ— แƒ แƒแƒ’แƒแƒ แƒช แƒแƒฎแƒแƒšแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜
  7. แƒ“แƒแƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ— rbenv แƒ“แƒ แƒ แƒฃแƒ‘แƒ˜
  8. แƒ‘แƒแƒœแƒ“แƒšแƒ”แƒ แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ
  9. แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒก แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ
  10. Puma แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ

แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒ˜แƒช, แƒ‘แƒแƒšแƒ แƒ”แƒขแƒแƒžแƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ”แƒก capistrano-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒงแƒแƒ•แƒ”แƒš แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ›แƒแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜, แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ แƒ—แƒ•แƒ แƒกแƒ˜แƒ›แƒ‘แƒ›แƒฃแƒšแƒ˜แƒ— แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒกแƒแƒก, แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ แƒกแƒแƒ”แƒ แƒ—แƒ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒ“แƒแƒœ, แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒžแƒฃแƒ›แƒ แƒ“แƒ แƒ.แƒจ. แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ”แƒก Ansible-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒแƒขแƒแƒ›?

แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ

Ansible แƒแƒฅแƒ•แƒก แƒ›แƒ™แƒแƒชแƒ แƒ˜ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ แƒงแƒ•แƒ”แƒšแƒ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ˜แƒ แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒแƒ— แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒชแƒแƒšแƒ™แƒ” แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜. แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒ˜แƒช, แƒแƒ แƒช แƒ˜แƒกแƒ” แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ, แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ˜แƒก แƒ—แƒแƒ•แƒแƒ“ แƒ แƒ”แƒšแƒกแƒ”แƒ‘แƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒจแƒ˜, แƒ—แƒฃ แƒชแƒแƒšแƒ™แƒ”. แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒแƒ— แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒชแƒแƒšแƒ™แƒ” git แƒกแƒแƒชแƒแƒ•แƒจแƒ˜. แƒžแƒ˜แƒ แƒแƒ“แƒแƒ“ แƒ›แƒ” แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒšแƒแƒ“ แƒ›แƒ˜แƒ•แƒ˜แƒฉแƒœแƒ˜แƒ” rails แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก /config แƒ™แƒแƒขแƒแƒšแƒแƒ’แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ“แƒ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ แƒ˜แƒก แƒ”แƒ แƒ— แƒกแƒแƒชแƒแƒ•แƒจแƒ˜ แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ.

แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒกแƒแƒ—แƒแƒ›แƒแƒจแƒ แƒฌแƒ˜แƒ’แƒœแƒ˜

Playbook แƒแƒ แƒ˜แƒก yml แƒคแƒแƒ˜แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒกแƒ˜แƒœแƒขแƒแƒฅแƒกแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒแƒฆแƒฌแƒ”แƒ แƒก แƒ แƒ แƒ“แƒ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒก Ansible-แƒ›แƒ. แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒกแƒแƒ—แƒแƒ›แƒแƒจแƒ แƒฌแƒ˜แƒ’แƒœแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ แƒแƒคแƒ”แƒ แƒก แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก:

---
- name: Simple playbook
  hosts: all

แƒแƒฅ แƒฉแƒ•แƒ”แƒœ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ•แƒแƒ›แƒ‘แƒแƒ‘แƒ—, แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœแƒ˜ แƒกแƒแƒ—แƒแƒ›แƒแƒจแƒ แƒฌแƒ˜แƒ’แƒœแƒ˜ แƒ”.แƒฌ Simple Playbook แƒ“แƒ แƒ แƒแƒ› แƒ›แƒ˜แƒกแƒ˜ แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒฐแƒแƒกแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒจแƒ”แƒ•แƒ˜แƒœแƒแƒฎแƒแƒ— แƒ˜แƒก /ansible แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒ— playbook.yml แƒ“แƒ แƒกแƒชแƒแƒ“แƒ” แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ:

ansible-playbook ./playbook.yml

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

Ansible แƒแƒ›แƒ‘แƒแƒ‘แƒก, แƒ แƒแƒ› แƒแƒ  แƒ˜แƒชแƒœแƒแƒ‘แƒก แƒฐแƒแƒกแƒขแƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ แƒงแƒ•แƒ”แƒšแƒ แƒกแƒ˜แƒแƒก. แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒฉแƒแƒ›แƒแƒ—แƒ•แƒšแƒ˜แƒšแƒ˜ แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒจแƒ˜ แƒ˜แƒœแƒ•แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ˜.

แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒ˜แƒ’แƒ˜ แƒ˜แƒ›แƒแƒ•แƒ” แƒแƒœsible แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜:

123.123.123.123

แƒแƒกแƒ” แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ•แƒแƒ–แƒฃแƒกแƒขแƒ”แƒ‘แƒ— แƒฐแƒแƒกแƒขแƒก (แƒ˜แƒ“แƒ”แƒแƒšแƒฃแƒ แƒแƒ“ แƒฉแƒ•แƒ”แƒœแƒ˜ VPS-แƒ˜แƒก แƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒ”แƒšแƒ˜ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒแƒ— แƒšแƒแƒ™แƒแƒšแƒฐแƒแƒกแƒขแƒ˜) แƒ“แƒ แƒ•แƒ˜แƒœแƒแƒฎแƒแƒ•แƒ— แƒ›แƒแƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒ— inventory.
แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒกแƒชแƒแƒ“แƒแƒ— ansible-แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒ˜แƒœแƒ•แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ˜แƒ—:

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

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

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

แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒแƒฅแƒ•แƒ— ssh แƒฌแƒ•แƒ“แƒแƒ›แƒ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒš แƒฐแƒแƒกแƒขแƒ–แƒ”, แƒ›แƒแƒจแƒ˜แƒœ ansible แƒ“แƒแƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒก แƒ“แƒ แƒจแƒ”แƒแƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒก แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒแƒก แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ แƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. (แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ TASK [แƒคแƒแƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒ]), แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒแƒช แƒ˜แƒ’แƒ˜ แƒฌแƒแƒ แƒแƒ“แƒ’แƒ”แƒœแƒก แƒ›แƒแƒ™แƒšแƒ” แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ (PLAY RECAP).

แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“, แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒก, แƒ แƒแƒ›แƒšแƒ˜แƒ—แƒแƒช แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒจแƒ˜ แƒฎแƒแƒ แƒ— แƒจแƒ”แƒกแƒฃแƒšแƒ˜. แƒ“แƒ˜แƒ“แƒ˜ แƒแƒšแƒ‘แƒแƒ—แƒแƒ‘แƒ˜แƒ— แƒแƒ  แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒ”แƒšแƒ–แƒ”. Playbook แƒคแƒแƒ˜แƒšแƒจแƒ˜ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒแƒ— แƒ แƒแƒ›แƒ”แƒšแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒก แƒ“แƒแƒกแƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒšแƒแƒ“ remote_user แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒ˜แƒ•แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒแƒกแƒ”แƒ•แƒ”, แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ แƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ—แƒฅแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒแƒ แƒแƒกแƒแƒญแƒ˜แƒ แƒ แƒ˜แƒงแƒแƒก แƒ“แƒ แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ™แƒแƒ แƒ’แƒแƒ— แƒ“แƒ แƒ แƒ›แƒ˜แƒก แƒจแƒ”แƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒแƒ–แƒ”. แƒ”แƒก แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒ แƒ—แƒแƒ—:

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

แƒกแƒชแƒแƒ“แƒ”แƒ— แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒ’แƒแƒฃแƒจแƒ•แƒแƒ— แƒกแƒแƒ—แƒแƒ›แƒแƒจแƒ แƒฌแƒ˜แƒ’แƒœแƒ˜ แƒ“แƒ แƒ“แƒแƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ˜แƒ—, แƒ แƒแƒ› แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก. (แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ— root แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜, แƒ›แƒแƒจแƒ˜แƒœ แƒแƒกแƒ”แƒ•แƒ” แƒฃแƒœแƒ“แƒ แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒแƒ— be: true แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒ˜แƒ•แƒ, แƒ แƒแƒ—แƒ แƒ›แƒ˜แƒ˜แƒฆแƒแƒ— แƒแƒ›แƒแƒฆแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฃแƒคแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜. แƒ แƒแƒ’แƒแƒ แƒช แƒฌแƒ”แƒ แƒ˜แƒ แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒแƒจแƒ˜: become set to โ€˜trueโ€™/โ€™yesโ€™ to activate privilege escalation. แƒ—แƒฃแƒ›แƒชแƒ แƒ‘แƒแƒšแƒแƒ›แƒ“แƒ” แƒแƒ  แƒแƒ แƒ˜แƒก แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒ˜ แƒ แƒแƒขแƒแƒ›).

แƒจแƒ”แƒกแƒแƒซแƒšแƒแƒ, แƒ—แƒฅแƒ•แƒ”แƒœ แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒ›แƒแƒฌแƒ•แƒ”แƒฃแƒšแƒ˜แƒ แƒ˜แƒ›แƒ˜แƒ—, แƒ แƒแƒ› ansible แƒ•แƒ”แƒ  แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก แƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒžแƒ แƒ”แƒขแƒแƒชแƒ˜แƒแƒก, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฎแƒ”แƒšแƒ˜แƒ— แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒแƒ—:

ansible_python_interpreter: /usr/bin/python3 

แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ˜แƒ’แƒแƒ— แƒกแƒแƒ“ แƒ’แƒแƒฅแƒ•แƒ— แƒžแƒ˜แƒ—แƒแƒœแƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒ— whereis python.

แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ

Ansible-แƒ˜แƒก แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜ แƒ“แƒ˜แƒกแƒขแƒ แƒ˜แƒ‘แƒฃแƒชแƒ˜แƒ แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก แƒ‘แƒ”แƒ•แƒ  แƒ›แƒแƒ“แƒฃแƒšแƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒแƒ  แƒ’แƒ•แƒ˜แƒฌแƒ”แƒ•แƒก bash แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ แƒ แƒแƒ˜แƒ›แƒ” แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜แƒ—. แƒแƒฎแƒšแƒ แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒแƒกแƒ”แƒ—แƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“. แƒ›แƒ” แƒ›แƒแƒฅแƒ•แƒก Ubuntu Linux แƒฉแƒ”แƒ›แƒก 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

Task แƒแƒ แƒ˜แƒก แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ˜แƒก แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช Ansible แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒก แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ  แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ–แƒ”. แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒแƒก แƒ•แƒแƒซแƒšแƒ”แƒ•แƒ— แƒกแƒแƒฎแƒ”แƒšแƒก, แƒ แƒแƒ—แƒ แƒ—แƒ•แƒแƒšแƒงแƒฃแƒ แƒ˜ แƒแƒ“แƒ”แƒ•แƒœแƒแƒ— แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก แƒŸแƒฃแƒ แƒœแƒแƒšแƒจแƒ˜. แƒ“แƒ แƒฉแƒ•แƒ”แƒœ แƒแƒฆแƒ•แƒฌแƒ”แƒ แƒ— แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒกแƒ˜แƒœแƒขแƒแƒฅแƒกแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ แƒ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒก. แฒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ apt: update_cache=yes - แƒแƒ›แƒ‘แƒแƒ‘แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ apt แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ›แƒ”แƒแƒ แƒ” แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ แƒชแƒแƒขแƒ แƒฃแƒคแƒ แƒ แƒ แƒ—แƒฃแƒšแƒ˜แƒ. แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ“แƒแƒ•แƒชแƒ”แƒ›แƒ— แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒ›แƒแƒœแƒแƒ—แƒ•แƒแƒšแƒก apt แƒ›แƒแƒ“แƒฃแƒšแƒก แƒ“แƒ แƒ•แƒแƒ›แƒ‘แƒแƒ‘แƒ—, แƒ แƒแƒ› แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒแƒ แƒ˜แƒแƒœ state แƒฃแƒœแƒ“แƒ แƒ’แƒแƒฎแƒ“แƒ”แƒก present, แƒแƒœแƒฃ แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒ›แƒ‘แƒแƒ‘แƒ— แƒ“แƒแƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ— แƒ”แƒก แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜. แƒแƒœแƒแƒšแƒแƒ’แƒ˜แƒฃแƒ แƒแƒ“, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ•แƒฃแƒ—แƒฎแƒ แƒแƒ— แƒ›แƒแƒ— แƒฌแƒแƒจแƒแƒšแƒแƒœ แƒ˜แƒกแƒ˜แƒœแƒ˜, แƒแƒœ แƒ’แƒแƒœแƒแƒแƒฎแƒšแƒแƒœ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒ— state. แƒ’แƒ—แƒฎแƒแƒ•แƒ— แƒ’แƒแƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒแƒ—, แƒ แƒแƒ› แƒ แƒ”แƒšแƒกแƒ”แƒ‘แƒ˜ postgresql-แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ postgresql-contrib แƒžแƒแƒ™แƒ”แƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒแƒฎแƒšแƒ แƒ•แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒ—. แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒฎแƒ”แƒš, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ˜แƒชแƒแƒ“แƒ”แƒ— แƒ“แƒ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒ— แƒ”แƒก; แƒ’แƒแƒœแƒ˜แƒ•แƒ แƒฃแƒšแƒ˜ แƒแƒ  แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก แƒแƒ›แƒแƒก.

แƒกแƒชแƒแƒ“แƒ”แƒ— แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒ’แƒแƒฃแƒจแƒ•แƒแƒ— แƒกแƒแƒ—แƒแƒ›แƒแƒจแƒ แƒฌแƒ˜แƒ’แƒœแƒ˜ แƒ“แƒ แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ—, แƒ แƒแƒ› แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜ แƒ“แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ.

แƒแƒฎแƒแƒšแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ.

แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก Ansible-แƒก แƒแƒกแƒ”แƒ•แƒ” แƒแƒฅแƒ•แƒก แƒ›แƒแƒ“แƒฃแƒšแƒ˜ - แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜. แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒแƒ— แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ (แƒ›แƒ” แƒ“แƒแƒ•แƒ›แƒแƒšแƒ” แƒžแƒšแƒ”แƒ˜แƒ‘แƒฃแƒฅแƒ˜แƒก แƒฃแƒ™แƒ•แƒ” แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ›แƒ, แƒ แƒแƒ—แƒ แƒงแƒแƒ•แƒ”แƒš แƒฏแƒ”แƒ แƒ–แƒ” แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒแƒ“ แƒแƒ  แƒ’แƒแƒ“แƒแƒ›แƒ”แƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒœแƒ):

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

แƒฉแƒ•แƒ”แƒœ แƒ•แƒฅแƒ›แƒœแƒ˜แƒ— แƒแƒฎแƒแƒš แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก, แƒ•แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒ›แƒแƒก แƒกแƒฅแƒ”แƒšแƒก แƒ“แƒ แƒžแƒแƒ แƒแƒšแƒก. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ™แƒ˜ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒแƒก แƒฌแƒแƒ•แƒแƒฌแƒงแƒ“แƒ”แƒ‘แƒ˜แƒ—. แƒ แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ, แƒ—แƒฃ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒฐแƒแƒกแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก? แƒ“แƒ แƒžแƒแƒ แƒแƒšแƒ˜แƒก แƒ›แƒ™แƒแƒคแƒ˜แƒ แƒขแƒ”แƒฅแƒกแƒขแƒจแƒ˜ แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ แƒกแƒแƒ—แƒแƒ›แƒแƒจแƒ แƒฌแƒ˜แƒ’แƒœแƒจแƒ˜ แƒซแƒแƒšแƒ˜แƒแƒœ แƒชแƒฃแƒ“แƒ˜ แƒ˜แƒ“แƒ”แƒแƒ. แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ›แƒแƒ“แƒ˜แƒ— แƒฉแƒแƒ•แƒ“แƒแƒ— แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒ“แƒ แƒžแƒแƒ แƒแƒšแƒ˜ แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒจแƒ˜ แƒ“แƒ แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒ‘แƒแƒšแƒแƒก แƒ’แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ—, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฎแƒ“แƒ”แƒ‘แƒ แƒžแƒแƒ แƒแƒšแƒ˜แƒก แƒ“แƒแƒจแƒ˜แƒคแƒ•แƒ แƒ.

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

แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜ แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒกแƒแƒ—แƒแƒ›แƒแƒจแƒ แƒฌแƒ˜แƒ’แƒœแƒ”แƒ‘แƒจแƒ˜ แƒแƒ แƒ›แƒแƒ’แƒ˜ แƒฎแƒ•แƒ”แƒฃแƒšแƒ˜ แƒ‘แƒ แƒ”แƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒฉแƒ•แƒ”แƒœ แƒแƒฆแƒ•แƒœแƒ˜แƒจแƒœแƒแƒ•แƒ— แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒก แƒ˜แƒœแƒ•แƒ”แƒœแƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒจแƒ˜:

123.123.123.123

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

แƒ’แƒ—แƒฎแƒแƒ•แƒ— แƒ’แƒแƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒแƒ— แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒ˜แƒ•แƒ [all:vars] - แƒœแƒแƒ—แƒฅแƒ•แƒแƒ›แƒ˜แƒ, แƒ แƒแƒ› แƒขแƒ”แƒฅแƒกแƒขแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ‘แƒšแƒแƒ™แƒ˜ แƒแƒ แƒ˜แƒก แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜ (vars) แƒ“แƒ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒงแƒ•แƒ”แƒšแƒ แƒฐแƒแƒกแƒขแƒ–แƒ” (แƒงแƒ•แƒ”แƒšแƒ).

แƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒ˜แƒช แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒแƒ "{{ user_password | password_hash('sha512') }}". แƒกแƒแƒฅแƒ›แƒ” แƒ˜แƒ›แƒแƒจแƒ˜แƒ, แƒ แƒแƒ› ansible แƒแƒ  แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— user_add แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ›แƒแƒก แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ“แƒ˜ แƒฎแƒ”แƒšแƒ˜แƒ—. แƒ“แƒ แƒ˜แƒก แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒก แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ , แƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒช แƒฉแƒ•แƒ”แƒœ แƒแƒกแƒ”แƒ•แƒ” แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒงแƒ•แƒแƒœแƒแƒ— แƒžแƒแƒ แƒแƒšแƒ˜ แƒฐแƒ”แƒจแƒแƒ“, แƒ แƒแƒกแƒแƒช แƒ”แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก.

แƒ›แƒแƒ“แƒ˜แƒ— แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒแƒ— แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ sudo แƒฏแƒ’แƒฃแƒคแƒก. แƒ—แƒฃแƒ›แƒชแƒ, แƒ›แƒแƒœแƒแƒ›แƒ“แƒ” แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ•แƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ”แƒ—, แƒ แƒแƒ› แƒแƒกแƒ”แƒ—แƒ˜ แƒฏแƒ’แƒฃแƒคแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก, แƒ แƒแƒ“แƒ’แƒแƒœ แƒแƒ›แƒแƒก แƒฉแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒแƒ แƒแƒ•แƒ˜แƒœ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก:

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

แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒ, แƒฉแƒ•แƒ”แƒœ แƒแƒกแƒ”แƒ•แƒ” แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒฏแƒ’แƒฃแƒคแƒฃแƒ แƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒฏแƒ’แƒฃแƒคแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฅแƒ›แƒœแƒ”แƒšแƒแƒ“, แƒกแƒ˜แƒœแƒขแƒแƒฅแƒกแƒ˜แƒ— แƒซแƒแƒšแƒ˜แƒแƒœ แƒฐแƒ’แƒแƒ•แƒก apt-แƒก. แƒ›แƒแƒจแƒ˜แƒœ แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜แƒ แƒ“แƒแƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒแƒ— แƒ”แƒก แƒฏแƒ’แƒฃแƒคแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ–แƒ” (groups: "sudo").
แƒแƒกแƒ”แƒ•แƒ” แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒ แƒแƒ› แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก ssh แƒ™แƒšแƒแƒ•แƒ˜แƒจแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ, แƒ แƒแƒ—แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒจแƒ”แƒ•แƒ˜แƒ“แƒ”แƒ— แƒžแƒแƒ แƒแƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”:

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

แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒ˜ แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒแƒ "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" โ€” แƒ˜แƒก แƒแƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒก id_rsa.pub แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒจแƒ˜แƒ’แƒ—แƒแƒ•แƒกแƒก (แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒงแƒแƒก), แƒแƒœแƒฃ ssh แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฏแƒแƒ แƒ แƒœแƒแƒฌแƒ˜แƒšแƒก แƒ“แƒ แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ•แƒก แƒ›แƒแƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒแƒจแƒ˜.

แƒ แƒแƒšแƒ”แƒ‘แƒ˜

แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒกแƒแƒ›แƒ˜แƒ•แƒ” แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ แƒแƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒ˜แƒงแƒแƒก แƒแƒ›แƒแƒชแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒ”แƒ แƒ— แƒฏแƒ’แƒฃแƒคแƒแƒ“ แƒ“แƒ แƒ™แƒแƒ แƒ’แƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ, แƒ แƒแƒ› แƒ”แƒก แƒฏแƒ’แƒฃแƒคแƒ˜ แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒแƒ— แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒกแƒแƒ—แƒแƒ›แƒแƒจแƒ แƒฌแƒ˜แƒ’แƒœแƒ˜แƒกแƒ’แƒแƒœ แƒ’แƒแƒœแƒชแƒแƒšแƒ™แƒ”แƒ•แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ—แƒ แƒแƒ  แƒ’แƒแƒ˜แƒ–แƒแƒ แƒ“แƒแƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ“แƒ˜แƒ“แƒ˜. แƒแƒ› แƒ›แƒ˜แƒ–แƒœแƒ˜แƒ— Ansible-แƒก แƒแƒฅแƒ•แƒก แƒ แƒแƒšแƒ”แƒ‘แƒ˜.
แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœแƒ•แƒ” แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—, แƒ แƒแƒšแƒ”แƒ‘แƒ˜ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ“แƒ”แƒก แƒชแƒแƒšแƒ™แƒ” แƒ แƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜, แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ แƒแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒแƒ แƒ˜แƒก แƒชแƒแƒšแƒ™แƒ” แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒกแƒแƒฎแƒ”แƒšแƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒ—, แƒแƒ›แƒแƒชแƒแƒœแƒ”แƒ‘แƒ˜แƒก, แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก, แƒจแƒแƒ‘แƒšแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ.แƒจ.
แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ: ./ansible/roles/user/tasks/main.yml (main แƒแƒ แƒ˜แƒก แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒคแƒแƒ˜แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฉแƒแƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ‘แƒ แƒ“แƒ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ แƒแƒšแƒ˜ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒกแƒแƒ—แƒแƒ›แƒแƒจแƒ แƒฌแƒ˜แƒ’แƒœแƒ—แƒแƒœ; แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒกแƒฎแƒ•แƒ แƒ แƒแƒšแƒฃแƒ แƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ). แƒแƒฎแƒšแƒ แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ“แƒแƒ˜แƒขแƒแƒœแƒแƒ— แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ แƒแƒ› แƒคแƒแƒ˜แƒšแƒจแƒ˜:

# 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

แƒแƒฎแƒšแƒ แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒจแƒแƒ‘แƒšแƒแƒœแƒ”แƒ‘แƒ˜. แƒ›แƒแƒ— แƒจแƒแƒ แƒ˜แƒก แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ แƒ˜แƒกแƒแƒ, แƒ แƒแƒ› ansible แƒแƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒก แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ , แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ แƒ˜แƒก. แƒ“แƒ แƒจแƒแƒ‘แƒšแƒแƒœแƒ”แƒ‘แƒก แƒฃแƒœแƒ“แƒ แƒฐแƒฅแƒแƒœแƒ“แƒ”แƒ— j2 แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒ แƒ“แƒ แƒ›แƒแƒ— แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒœ แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒแƒ แƒ›แƒแƒ’แƒ˜ แƒฎแƒ•แƒ”แƒฃแƒšแƒ˜ แƒ‘แƒ แƒ”แƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ•แƒแƒแƒฅแƒขแƒ˜แƒฃแƒ แƒแƒ— nginx in main.yml แƒคแƒแƒ˜แƒšแƒ˜. แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜:

# 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 }} - แƒ”แƒก แƒแƒ แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒชแƒ•แƒšแƒแƒ“แƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒก 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-แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒก. แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— symlink sites_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-แƒ˜แƒก แƒงแƒแƒ•แƒ”แƒš แƒฏแƒ”แƒ แƒ–แƒ” แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒแƒก แƒแƒ–แƒ แƒ˜ แƒแƒ  แƒแƒฅแƒ•แƒก. แƒจแƒ”แƒœแƒ˜แƒจแƒœแƒ”แƒ—, แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒแƒ  แƒ•แƒฌแƒ”แƒ แƒ— แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒก, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ: โ€žแƒแƒ™แƒ”แƒ—แƒ” แƒแƒกแƒ”โ€œ, แƒกแƒ˜แƒœแƒขแƒแƒฅแƒกแƒ˜ แƒฃแƒคแƒ แƒ แƒฐแƒ’แƒแƒ•แƒก โ€žแƒแƒ›แƒแƒก แƒฃแƒœแƒ“แƒ แƒฐแƒฅแƒแƒœแƒ“แƒ”แƒก แƒ”แƒก แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒโ€œ. แƒ“แƒ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒแƒกแƒ” แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก ansible. แƒ—แƒฃ แƒฏแƒ’แƒฃแƒคแƒ˜ แƒฃแƒ™แƒ•แƒ” แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก, แƒแƒœ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒžแƒแƒ™แƒ”แƒขแƒ˜ แƒฃแƒ™แƒ•แƒ” แƒ“แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ, แƒ›แƒแƒจแƒ˜แƒœ ansible แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก แƒแƒ›แƒแƒก แƒ“แƒ แƒ’แƒแƒ›แƒแƒขแƒแƒ•แƒ”แƒ‘แƒก แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒแƒก. แƒแƒกแƒ”แƒ•แƒ”, แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒแƒ  แƒ“แƒแƒ™แƒแƒžแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ, แƒ—แƒฃ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒแƒ“ แƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒก. แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ•แƒ˜แƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒ— แƒแƒ›แƒ˜แƒ— แƒ“แƒ แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ— nginx แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ—แƒฃ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒ. แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ แƒ”แƒ”แƒกแƒขแƒ แƒ˜แƒก แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒ˜แƒ•แƒ:

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

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

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

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

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

แƒ—แƒฃ แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒ›แƒ” แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ˜ แƒจแƒ”แƒ˜แƒชแƒ•แƒšแƒ”แƒ‘แƒ, แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒแƒกแƒšแƒ˜ แƒ“แƒ แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒ“แƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ“แƒ”แƒ‘แƒ restart_nginx. แƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ—แƒฃ แƒ”แƒก แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒ“แƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ, แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ แƒ’แƒแƒ“แƒแƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ‘แƒ.

แƒ“แƒ, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒ›แƒแƒขแƒแƒ— nginx แƒ แƒแƒšแƒ˜ แƒ›แƒ—แƒแƒ•แƒแƒ  แƒกแƒแƒ—แƒแƒ›แƒแƒจแƒ แƒฌแƒ˜แƒ’แƒœแƒจแƒ˜.

postgresql-แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ

แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ•แƒแƒแƒฅแƒขแƒ˜แƒฃแƒ แƒแƒ— postgresql systemd-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ˜แƒกแƒ”แƒ•แƒ”, แƒ แƒแƒ’แƒแƒ แƒช แƒ”แƒก แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ”แƒ— nginx-แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ“แƒ แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒ“แƒ แƒ—แƒแƒ•แƒแƒ“ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒจแƒ”แƒกแƒแƒกแƒ•แƒšแƒ”แƒšแƒแƒ“.
แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒ แƒแƒšแƒ˜ /ansible/roles/postgresql/tasks/main.yml:

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

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

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

แƒ›แƒ” แƒแƒ  แƒแƒฆแƒ•แƒฌแƒ”แƒ , แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒ แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜ แƒ˜แƒœแƒ•แƒ”แƒœแƒขแƒแƒ แƒจแƒ˜, แƒ”แƒก แƒฃแƒ™แƒ•แƒ” แƒแƒ แƒแƒ”แƒ แƒ—แƒฎแƒ”แƒš แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ, แƒแƒกแƒ”แƒ•แƒ” postgresql_db แƒ“แƒ postgresql_user แƒ›แƒแƒ“แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒœแƒขแƒแƒฅแƒกแƒ˜. แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒฎแƒ˜แƒšแƒแƒ— แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒแƒจแƒ˜. แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒ˜แƒ•แƒ แƒแƒฅ แƒแƒ แƒ˜แƒก become_user: postgres. แƒคแƒแƒฅแƒขแƒ˜แƒ, แƒ แƒแƒ› แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“, แƒ›แƒฎแƒแƒšแƒแƒ“ postgres แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒแƒฅแƒ•แƒก แƒฌแƒ•แƒ“แƒแƒ›แƒ postgresql แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒšแƒแƒ™แƒแƒšแƒฃแƒ แƒแƒ“. แƒ”แƒก แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒ˜แƒ•แƒ แƒ’แƒ•แƒแƒซแƒšแƒ”แƒ•แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒแƒ› แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒ— แƒจแƒ”แƒ•แƒแƒกแƒ แƒฃแƒšแƒแƒ— แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜ (แƒ—แƒฃ แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒฌแƒ•แƒ“แƒแƒ›แƒ, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ).
แƒแƒกแƒ”แƒ•แƒ”, แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ— แƒฎแƒแƒ–แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ pg_hba.conf-แƒ–แƒ”, แƒ แƒแƒ—แƒ แƒแƒฎแƒแƒš แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒ“แƒแƒฃแƒจแƒ•แƒแƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒฌแƒ•แƒ“แƒแƒ›แƒ. แƒ”แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ”แƒก แƒ˜แƒกแƒ”แƒ•แƒ”, แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ•แƒชแƒ•แƒแƒšแƒ”แƒ— nginx แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ.

แƒ“แƒ แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒ›แƒแƒขแƒแƒ— postgresql แƒ แƒแƒšแƒ˜ แƒ›แƒ—แƒแƒ•แƒแƒ  แƒกแƒแƒ—แƒแƒ›แƒแƒจแƒ แƒฌแƒ˜แƒ’แƒœแƒจแƒ˜.

แƒ แƒฃแƒ‘แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ rbenv-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—

Ansible-แƒก แƒแƒ  แƒแƒฅแƒ•แƒก แƒ›แƒแƒ“แƒฃแƒšแƒ”แƒ‘แƒ˜ rbenv-แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ git แƒกแƒแƒชแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ™แƒšแƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ—. แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒ”แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒฎแƒ“แƒ”แƒ‘แƒ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒแƒ แƒแƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜. แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ แƒแƒšแƒ˜ /ansible/roles/ruby_rbenv/main.yml แƒ“แƒ แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒแƒ— แƒ›แƒ˜แƒกแƒ˜ แƒจแƒ”แƒ•แƒกแƒ”แƒ‘แƒ:

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

แƒฉแƒ•แƒ”แƒœ แƒ™แƒ•แƒšแƒแƒ• แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— be_user แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒ˜แƒ•แƒแƒก, แƒ แƒแƒ› แƒ˜แƒ›แƒฃแƒจแƒแƒแƒ— แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒฅแƒ•แƒ”แƒจ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฉแƒ•แƒ”แƒœ แƒแƒ› แƒ›แƒ˜แƒ–แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ•แƒฅแƒ›แƒ”แƒœแƒ˜แƒ—. แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ rbenv แƒ“แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒ˜แƒก แƒ›แƒ—แƒแƒ•แƒแƒ  แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜ แƒ“แƒ แƒแƒ แƒ แƒ’แƒšแƒแƒ‘แƒแƒšแƒฃแƒ แƒแƒ“. แƒฉแƒ•แƒ”แƒœ แƒแƒกแƒ”แƒ•แƒ” แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— git แƒ›แƒแƒ“แƒฃแƒšแƒก แƒกแƒแƒชแƒแƒ•แƒ˜แƒก แƒ™แƒšแƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒกแƒแƒ“แƒแƒช แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ repo แƒ“แƒ dest.

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ•แƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒแƒ— rbenv init bashrc-แƒจแƒ˜ แƒ“แƒ แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒแƒ— rbenv แƒ˜แƒฅ PATH-แƒจแƒ˜. แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒแƒฅแƒ•แƒก lineinfile แƒ›แƒแƒ“แƒฃแƒšแƒ˜:

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

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

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒแƒ— ruby_build:

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

แƒ“แƒ แƒ‘แƒแƒšแƒแƒก แƒ“แƒแƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ” แƒ แƒฃแƒ‘แƒ˜. แƒ”แƒก แƒ™แƒ”แƒ—แƒ“แƒ”แƒ‘แƒ rbenv-แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ—, แƒแƒœแƒฃ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ bash แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒ—:

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

แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒ›แƒ‘แƒแƒ‘แƒ— แƒ แƒแƒ›แƒ”แƒšแƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ แƒจแƒ”แƒ•แƒแƒกแƒ แƒฃแƒšแƒแƒ— แƒ“แƒ แƒ แƒ˜แƒ—. แƒ—แƒฃแƒ›แƒชแƒ, แƒแƒฅ แƒ•แƒฎแƒ•แƒ“แƒ”แƒ‘แƒ˜แƒ— แƒ˜แƒ› แƒคแƒแƒฅแƒขแƒก, แƒ แƒแƒ› ansible แƒแƒ  แƒแƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒก bashrc-แƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒš แƒ™แƒแƒ“แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒแƒ›แƒ“แƒ”. แƒ”แƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› rbenv แƒฃแƒœแƒ“แƒ แƒ’แƒแƒœแƒ˜แƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒก แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒ˜แƒ›แƒแƒ•แƒ” แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜แƒ—.

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒ’แƒแƒ›แƒแƒฌแƒ•แƒ”แƒฃแƒšแƒ˜แƒ แƒ˜แƒ›แƒ˜แƒ—, แƒ แƒแƒ› แƒญแƒฃแƒ แƒ•แƒ˜แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒแƒก แƒแƒ  แƒแƒฅแƒ•แƒก แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ แƒ’แƒแƒœแƒ˜แƒ•แƒ แƒฃแƒšแƒ˜ แƒ—แƒ•แƒแƒšแƒกแƒแƒ–แƒ แƒ˜แƒกแƒ˜แƒ—. แƒแƒœแƒฃ, แƒแƒ  แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ, แƒ“แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ—แƒฃ แƒแƒ แƒ แƒ แƒฃแƒ‘แƒ˜แƒก แƒ”แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒ. แƒฉแƒ•แƒ”แƒœ แƒ—แƒ•แƒ˜แƒ—แƒแƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ:

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

แƒ แƒฉแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ‘แƒแƒœแƒ“แƒšแƒ”แƒ แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ:

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

แƒ“แƒ แƒ˜แƒกแƒ”แƒ•, แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ— แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ แƒแƒšแƒ˜ ruby_rbenv แƒ›แƒ—แƒแƒ•แƒแƒ  แƒกแƒแƒ—แƒแƒ›แƒแƒจแƒ แƒฌแƒ˜แƒ’แƒœแƒจแƒ˜.

แƒ’แƒแƒ–แƒ˜แƒแƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜.

แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒกแƒ แƒฃแƒšแƒ“แƒ”แƒก แƒแƒฅ. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒ แƒฉแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ capistrano-แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒ“แƒ แƒ˜แƒก แƒ—แƒแƒ•แƒแƒ“ แƒ“แƒแƒแƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒก แƒ™แƒแƒ“แƒก, แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ”แƒ‘แƒก แƒ“แƒ แƒ’แƒแƒฃแƒจแƒ•แƒ”แƒ‘แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒก (แƒ—แƒฃ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒกแƒฌแƒแƒ แƒแƒ“ แƒแƒ แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜). แƒ—แƒฃแƒ›แƒชแƒ, 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

แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒ–แƒฃแƒกแƒขแƒ”แƒ‘แƒ— แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ— แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒก แƒ“แƒ แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ ansible แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒ›แƒจแƒแƒ‘แƒšแƒ”แƒ‘แƒก.

Ansible Vault

แƒฉแƒ•แƒ”แƒœ แƒฃแƒ™แƒ•แƒ” แƒจแƒ”แƒ•แƒฎแƒ•แƒ“แƒ˜แƒ— แƒ˜แƒ› แƒคแƒแƒฅแƒขแƒก, แƒ แƒแƒ› แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒ“แƒ”แƒก แƒกแƒแƒ˜แƒ“แƒฃแƒ›แƒšแƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒžแƒแƒ แƒแƒšแƒ˜. แƒ—แƒฃ แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜ .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

แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ” แƒแƒ  แƒ›แƒแƒ’แƒชแƒ”แƒ›แƒ— แƒกแƒแƒ—แƒแƒ›แƒแƒจแƒ แƒฌแƒ˜แƒ’แƒœแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ แƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒ แƒฃแƒš แƒขแƒ”แƒฅแƒกแƒขแƒก, แƒ—แƒแƒ•แƒแƒ“ แƒ“แƒแƒฌแƒ”แƒ แƒ”แƒ—. แƒ˜แƒ›แƒ˜แƒขแƒแƒ›, แƒ แƒแƒ› ansible แƒแƒกแƒ”แƒ - แƒ—แƒฃ แƒแƒ  แƒ’แƒ”แƒกแƒ›แƒ˜แƒ—, แƒ แƒ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒ—, แƒ›แƒแƒจแƒ˜แƒœ แƒ˜แƒก แƒแƒ›แƒแƒก แƒแƒ  แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก แƒ—แƒฅแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ