Ansible ကို အသုံသပဌု၍ Rails အပလီကေသရဟင်သကို အသုံသပဌုရန် ဆာဗာတစ်ခုအာသ စနစ်ထည့်သလင်သခဌင်သ။

Rails အက်ပလီကေသရဟင်သကိုအသုံသပဌုရန်အတလက်ဆာဗာကိုပဌင်ဆင်ရန် Ansible playbook အမျာသအပဌာသကိုမကဌာသေသမီကရေသရန်လိုအပ်ခဲ့သည်။ အံ့သဌစရာကောင်သတာက ရိုသရဟင်သတဲ့ အဆင့်ဆင့်လက်စလဲစာအုပ်ကို ကျလန်တော် ရဟာမတလေ့ခဲ့ပါဘူသ။ ဖဌစ်ပျက်နေတာကို နာသမလည်ဘဲ တခဌာသသူရဲ့ ပဌခန်သစာအုပ်ကို ကူသမကူသချင်ဘဲ နောက်ဆုံသမဟာတော့ စာရလက်စာတမ်သတလေကို ကိုယ်တိုင်ဖတ်ပဌီသ အရာအာသလုံသကို စုဆောင်သခဲ့ရပါတယ်။ ကဆောင်သပါသ၏အကူအညီဖဌင့် တစ်စုံတစ်ညသအာသ ကလုပ်ငန်သစဉ်ကို အရဟိန်မဌဟင့်ရန် ကျလန်ုပ်ကူညီပေသနိုင်သည်။

ပထမဆုံသ နာသလည်ရမည့်အချက်မဟာ ansible သည် သင့်အာသ SSH မဟတစ်ဆင့် အဝေသထိန်သဆာဗာတစ်ခုပေါ်တလင် ကဌိုတင်သတ်မဟတ်ထာသသော လုပ်ဆောင်ချက်မျာသစာရင်သကို လုပ်ဆောင်ရန် အဆင်ပဌေသော interface ကို ပေသဆောင်သည်။ ကနေရာတလင် မဟော်ဆန်ခဌင်သမရဟိပါ၊ သင်သည် ပလပ်အင်တစ်ခုကို ထည့်သလင်သ၍ မရပါ၊ docker၊ စောင့်ကဌည့်ခဌင်သနဟင့် အခဌာသအရာမျာသနဟင့်အတူ သင့်အက်ပ်လီကေသရဟင်သ၏ စက်ရပ်ချိန်ကို သုညဖဌင့် အသုံသပဌုနိုင်မည်ဖဌစ်သည်။ ပလေသစာအုပ်တစ်အုပ်ရေသဖို့အတလက် သင်ဘာလုပ်ချင်သလဲ အတိအကျသိရပါမယ်။ ထို့ကဌောင့် GitHub မဟ အဆင်သင့်လုပ်ထာသသော ပလေသစာအုပ်မျာသ သို့မဟုတ် "မိတ္တူကူသပဌီသ ဖလင့်ပါ၊ ၎င်သသည် အလုပ်လုပ်ပါမည်။"

ငါတို့ ဘာလိုလဲ?

ကျလန်တော်ပဌောခဲ့သလိုပဲ playbook ရေသဖို့အတလက် သင်ဘာလုပ်ချင်သလဲ၊ အဲဒါကို ဘယ်လိုလုပ်ရမလဲဆိုတာ သိဖို့လိုတယ်။ ငါတို့ ဘာလိုတယ်ဆိုတာ ဆုံသဖဌတ်ကဌရအောင်။ Rails အက်ပလီကေသရဟင်သအတလက် ကျလန်ုပ်တို့သည် nginx၊ postgresql (redis, etc) မျာသစလာလိုအပ်ပါသည်။ ထို့အပဌင် ကျလန်ုပ်တို့သည် ပတ္တမဌာသ၏ သီသခဌာသဗာသရဟင်သတစ်ခု လိုအပ်ပါသည်။ ၎င်သကို rbenv (rvm, asdf...) မဟတဆင့် ထည့်သလင်သရန် အကောင်သဆုံသဖဌစ်သည်။ ကအရာအာသလုံသကို အမဌစ်အသုံသပဌုသူတစ်ညသအနေဖဌင့် လုပ်ဆောင်ခဌင်သသည် အမဌဲတမ်သဆိုသရလာသသော အကဌံဥာဏ်တစ်ခုဖဌစ်သောကဌောင့် သင်သည် သီသခဌာသအသုံသပဌုသူတစ်ညသကို ဖန်တီသပဌီသ ၎င်သ၏အခလင့်အရေသမျာသကို သတ်မဟတ်ရန် လိုအပ်ပါသည်။ ၎င်သပဌီသနောက်၊ သင်သည် ကျလန်ုပ်တို့၏ကုဒ်ကို ဆာဗာသို့ အပ်လုဒ်လုပ်ရန်၊ nginx၊ postgres စသည်တို့အတလက် configs မျာသကို ကူသယူပဌီသ ကဝန်ဆောင်မဟုအာသလုံသကို စတင်ရန် လိုအပ်သည်။

ရလဒ်အနေဖဌင့် လုပ်ဆောင်ချက်မျာသ၏ အစီအစဥ်မဟာ အောက်ပါအတိုင်သဖဌစ်သည်။

  1. root အဖဌစ်ဝင်ရောက်ပါ။
  2. စနစ်ပက်ကေ့ချ်မျာသကို ထည့်သလင်သပါ။
  3. အသုံသပဌုသူအသစ်ဖန်တီသပါ၊ အခလင့်အရေသမျာသသတ်မဟတ်ပါ၊ ssh သော့
  4. စနစ်ပက်ကေ့ဂျ်မျာသ (nginx စသည်တို့) ကို configure လုပ်ပဌီသ ၎င်သတို့ကို run ပါ။
  5. ကျလန်ုပ်တို့သည် ဒေတာဘေ့စ်တလင် အသုံသပဌုသူတစ်ညသကို ဖန်တီသသည် (သင်ချက်ချင်သဒေတာဘေ့စ်တစ်ခုကို ဖန်တီသနိုင်သည်)
  6. အသုံသပဌုသူအသစ်အဖဌစ် အကောင့်ဝင်ပါ။
  7. rbenv နဟင့် ruby ​​ကို install လုပ်ပါ။
  8. အစုအဝေသကို တပ်ဆင်ခဌင်သ။
  9. အပလီကေသရဟင်သကုဒ်ကို တင်ခဌင်သ။
  10. Puma ဆာဗာကို စတင်နေပါသည်။

ထို့အပဌင်၊ နောက်ဆုံသအဆင့်မျာသကို capistrano သုံသပဌီသ လုပ်ဆောင်နိုင်သည်၊ အနည်သဆုံသ အကလက်အတလင်သမဟ ကုဒ်ကို ထုတ်လလဟတ်သည့် လမ်သညလဟန်မျာသထဲသို့ ကူသယူနိုင်သည်၊ အောင်မဌင်စလာ ဖဌန့်ကျက်ပဌီသသောအခါတလင် symlink တစ်ခုဖဌင့် ထုတ်ဝေမဟုကို ပဌောင်သနိုင်သည်၊ မျဟဝေထာသသော directory မဟ configs မျာသကို ကူသယူနိုင်သည်၊ puma ကို ပဌန်လည်စတင်ခဌင်သ စသည်ဖဌင့် ပဌုလုပ်နိုင်သည်။ ကအရာအာသလုံသကို Ansible ကို အသုံသပဌု၍ လုပ်ဆောင်နိုင်သော်လည်သ အဘယ်ကဌောင့်နည်သ။

ဖိုင်တည်ဆောက်ပုံ

Ansible သည် တင်သကျပ်သည်။ ဖိုင်ဖလဲ့စည်သပုံ သင့်ဖိုင်အာသလုံသအတလက်၊ ထို့ကဌောင့် ၎င်သအာသလုံသကို သီသခဌာသလမ်သညလဟန်တစ်ခုတလင် ထာသရဟိခဌင်သသည် အကောင်သဆုံသဖဌစ်သည်။ ထို့အပဌင်၊ ၎င်သသည် rails application ကိုယ်တိုင်တလင်ရဟိ၊ သို့မဟုတ်သီသခဌာသစီရဟိမရဟိအရေသမကဌီသပါ။ သင်သည် သီသခဌာသ git repository တလင် ဖိုင်မျာသကို သိမ်သဆည်သနိုင်သည်။ ကိုယ်တိုင်ကိုယ်ကျ၊ rails အပလီကေသရဟင်သ၏ /config directory တလင် ansible directory တစ်ခုကို ဖန်တီသပဌီသ သိုလဟောင်မဟုတစ်ခုတလင် အရာအာသလုံသကို သိမ်သဆည်သရန် အသင့်တော်ဆုံသဟု ကျလန်ုပ်တလေ့ရဟိခဲ့သည်။

ရိုသရဟင်သသော Playbook

Playbook သည် အထူသအထာသအသိုကိုအသုံသပဌု၍ Ansible ဘာလုပ်သင့်သည်ကို ဖော်ပဌသည့် yml ဖိုင်တစ်ခုဖဌစ်သည်။ ဘာမဟမတတ်နိုင်တဲ့ ပထမဆုံသ playbook ကို ဖန်တီသလိုက်ရအောင်။

---
- name: Simple playbook
  hosts: all

ဒီနေရာမဟာ ကျလန်တော်တို့ ရိုသရိုသရဟင်သရဟင်သပဌောရင် ကျလန်တော်တို့ရဲ့ playbook လို့ခေါ်ပါတယ်။ Simple Playbook ၎င်သအကဌောင်သအရာမျာသကို host အာသလုံသအတလက် လုပ်ဆောင်သင့်သည်။ ၎င်သကို /ansible directory တလင် နာမည်ဖဌင့် သိမ်သဆည်သနိုင်ပါသည်။ playbook.yml ပဌေသရန်ကဌိုသစာသပါ

ansible-playbook ./playbook.yml

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

Ansible က ၎င်သသည် စာရင်သအာသလုံသနဟင့် ကိုက်ညီသော မည်သည့်အိမ်ရဟင်ကိုမျဟ မသိကဌောင်သ ပဌောကဌာသခဲ့သည်။ ထူသထူသခဌာသခဌာသ စာရင်သပဌုစုထာသရမယ်။ စာရင်သဖိုင်.

တူညီသော ansible directory တလင် ဖန်တီသကဌပါစို့။

123.123.123.123

ကသည်မဟာ ကျလန်ုပ်တို့သည် host ကို ရိုသရိုသရဟင်သရဟင်သ သတ်မဟတ်ပုံ (ဥပမာအာသဖဌင့် စမ်သသပ်ရန်အတလက် ကျလန်ုပ်တို့၏ VPS ၏ host သို့မဟုတ် localhost ကို စာရင်သသလင်သနိုင်သည်) နဟင့် ၎င်သကို အမည်အောက်တလင် သိမ်သဆည်သပါ။ inventory.
စာရင်သဖိုင်တစ်ခုဖဌင့် ansible ကို စမ်သသုံသနိုင်သည်-

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

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

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

အကယ်၍ သင့်တလင် သတ်မဟတ်ထာသသော host သို့ ssh ဝင်ရောက်ခလင့်ရဟိပါက ansible သည် အဝေသထိန်သစနစ်အကဌောင်သ အချက်အလက်မျာသကို ချိတ်ဆက်ပဌီသ စုဆောင်သပါမည်။ (မူရင်သ TASK [အချက်အလက်စုဆောင်သခဌင်သ]) ပဌီသနောက် ၎င်သသည် လုပ်ဆောင်မဟုဆိုင်ရာ အတိုချုံသအစီရင်ခံစာ (PLAY RECAP) ကို ပေသပါမည်။

ပုံမဟန်အာသဖဌင့်၊ ချိတ်ဆက်မဟုသည် သင်စနစ်သို့ အကောင့်ဝင်ထာသသည့် အောက်ရဟိ သုံသစလဲသူအမည်ကို အသုံသပဌုသည်။ အိမ်ရဟင်အပေါ်တလင် ဖဌစ်နိုင်ချေမျာသသည်။ playbook ဖိုင်တလင်၊ remote_user ညလဟန်ကဌာသချက်ကို အသုံသပဌု၍ ချိတ်ဆက်ရန် မည်သည့်အသုံသပဌုသူကို အသုံသပဌုရမည်ကို သင် သတ်မဟတ်နိုင်ပါသည်။ ထို့အပဌင်၊ အဝေသထိန်သစနစ်အကဌောင်သ အချက်အလက်မျာသသည် သင့်အတလက် မကဌာခဏ မလိုအပ်ဘဲ ၎င်သကို စုဆောင်သရာတလင် အချိန်မဖဌုန်သသင့်ပါ။ ကလုပ်ဆောင်စရာကိုလည်သ ပိတ်ထာသနိုင်သည်-

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

ပလေသစာအုပ်ကို ထပ်စမ်သပဌီသ ချိတ်ဆက်မဟု အလုပ်လုပ်ကဌောင်သ သေချာပါစေ။ (သင်သည် root အသုံသပဌုသူကိုသတ်မဟတ်ပါက၊ မဌင့်မာသသောအခလင့်အရေသမျာသရရဟိရန်အလို့ငဟာ ဖဌစ်လာသည်- စစ်မဟန်သောလမ်သညလဟန်ချက်ကိုလည်သ သတ်မဟတ်ရန် လိုအပ်သည်။ စာရလက်စာတမ်သတလင် ရေသထာသသည့်အတိုင်သ- become set to ‘true’/’yes’ to activate privilege escalation. ဘာကဌောင့်လဲဆိုတာ ရဟင်သရဟင်သလင်သလင်သ မသိရပေမယ့်)။

ansible သည် Python စကာသပဌန်ကို မဆုံသဖဌတ်နိုင်ခဌင်သကဌောင့် ဖဌစ်ပေါ်လာသော အမဟာသအယလင်သတစ်ခုကို သင်လက်ခံရရဟိလိမ့်မည်ဖဌစ်နိုင်သည်၊ ထို့နောက် ၎င်သကို သင်ကိုယ်တိုင် သတ်မဟတ်နိုင်သည်-

ansible_python_interpreter: /usr/bin/python3 

command ဖဌင့် သင့်တလင် python ရဟိသည့်နေရာကို ရဟာဖလေနိုင်သည်။ whereis python.

စနစ်ပက်ကေ့ခ်ျမျာသ ထည့်သလင်သခဌင်သ။

Ansible ၏ စံဖဌန့်ဖဌူသမဟုတလင် အမျိုသမျိုသသော စနစ်ပက်ကေ့ချ်မျာသနဟင့် လုပ်ဆောင်ရန်အတလက် မော်ဂျူသမျာသစလာ ပါဝင်သောကဌောင့် ကျလန်ုပ်တို့သည် မည်သည့်အကဌောင်သကဌောင့် bash script မျာသကို ရေသသာသရန် မလိုအပ်ပါ။ ယခု ကျလန်ုပ်တို့သည် စနစ်အာသ အပ်ဒိတ်လုပ်ပဌီသ စနစ်ပက်ကေ့ဂျ်မျာသကို ထည့်သလင်သရန် က module မျာသထဲမဟ တစ်ခုကို လိုအပ်ပါသည်။ ကျလန်ုပ်၏ VPS တလင် Ubuntu Linux ရဟိသည်၊ ထို့ကဌောင့် ကျလန်ုပ်အသုံသပဌုသော packages မျာသကို ထည့်သလင်သရန် apt-get О ၎င်သအတလက် module. အကယ်၍ သင်သည် မတူညီသော လည်ပတ်မဟုစနစ်တစ်ခုကို အသုံသပဌုနေပါက သင်သည် မတူညီသော module တစ်ခု လိုအပ်နိုင်သည် (သတိရပါ၊ ကျလန်ုပ်တို့ ဘာလုပ်မည်ကို ကဌိုသိထာသရန် လိုအပ်ကဌောင်သ အစပိုင်သတလင် ကျလန်ုပ်ပဌောခဲ့သည်ကို သတိရပါ)။ သို့သော် syntax သည် တူညီနိုင်ဖလယ်ရဟိသည်။

ကျလန်ုပ်တို့၏ playbook ကို ပထမတာဝန်မျာသဖဌင့် ဖဌည့်စလက်ကဌပါစို့။

---
- 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 လုပ်ဆောင်ရမည့်တာဝန်အတိအကျဖဌစ်သည်။ မဟတ်တမ်သတလင် ၎င်သ၏လုပ်ဆောင်မဟုကို ခဌေရာခံနိုင်စေရန် ကျလန်ုပ်တို့သည် အလုပ်အာသ အမည်ပေသသည်။ တိကျသော module တစ်ခု၏ syntax ကိုအသုံသပဌု၍ ၎င်သသည်လုပ်ဆောင်ရမည့်အရာမျာသကိုဖော်ပဌပါသည်။ ဒါဆိုရင် apt: update_cache=yes - apt module ကိုအသုံသပဌု၍ system packages မျာသကို update လုပ်ရန်ပဌောသည် ဒုတိယ command က နည်သနည်သပိုရဟုပ်ထလေသပါတယ်။ ကျလန်ုပ်တို့သည် apt module သို့ ပက်ကေ့ဂျ်မျာသစာရင်သကို ပေသပို့ပဌီသ ၎င်သတို့ဖဌစ်ကဌောင်သ ပဌောပါသည်။ state ဖဌစ်လာသင့်တယ်။ presentဆိုလိုသည်မဟာ၊ ကအထုပ်မျာသကို install လုပ်ရန်ကျလန်ုပ်တို့ပဌောနိုင်သည်။ အလာသတူနည်သဖဌင့် ၎င်သတို့ကို ဖျက်ရန်၊ သို့မဟုတ် ပဌောင်သလဲခဌင်သဖဌင့် ၎င်သတို့ကို အပ်ဒိတ်လုပ်ရန် ၎င်သတို့ကို ကျလန်ုပ်တို့ ပဌောနိုင်သည်။ state. ရထာသလမ်သမျာသသည် postgresql နဟင့်အလုပ်လုပ်ရန်အတလက် ယခုကျလန်ုပ်တို့ထည့်သလင်သနေသည့် postgresql-contrib ပက်ကေ့ချ်လိုအပ်ပါသည်။ တစ်ဖန် သင်သည် ကအရာကို သိပဌီသ ကျင့်ရန် လိုအပ်သည် ၊ ၎င်သကို မိမိကိုယ်တိုင်က ကသို့ ပဌုလုပ်လိမ့်မည် မဟုတ်ပေ။

ပလေသစာအုပ်ကို ထပ်မံအသုံသပဌုပဌီသ ပက်ကေ့ဂျ်မျာသ ထည့်သလင်သထာသကဌောင်သ စစ်ဆေသကဌည့်ပါ။

အသုံသပဌုသူအသစ်မျာသဖန်တီသခဌင်သ။

အသုံသပဌုသူမျာသနဟင့် လုပ်ဆောင်ရန်၊ Ansible တလင် အသုံသပဌုသူ module တစ်ခုလည်သ ရဟိသည်။ နောက်ထပ်လုပ်ဆောင်စရာတစ်ခု ထပ်ထည့်လိုက်ရအောင် (အချိန်တိုင်သ အချိန်တိုင်သ ကော်ပီကူသယူခဌင်သမပဌုမိစေရန်အတလက် ပလေသစာအုပ်၏ သိပဌီသသာသအပိုင်သမျာသကို မဟတ်ချက်မျာသနောက်တလင် ဝဟက်ထာသသည်)။

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

ကျလန်ုပ်တို့သည် အသုံသပဌုသူအသစ်ကို ဖန်တီသပဌီသ၊ ၎င်သအတလက် အစီအစဉ်တစ်ခုနဟင့် စကာသဝဟက်ကို သတ်မဟတ်ပါ။ ပဌီသတော့ ပဌဿနာပေါင်သမျာသစလာကို ကဌုံရတယ်။ မတူညီသော host မျာသအတလက် အသုံသပဌုသူအမည်မျာသ ကလဲပဌာသရန် လိုအပ်ပါက မည်သို့နည်သ။ စကာသဝဟက်ကို playbook တလင်ရဟင်သလင်သသောစာသာသဖဌင့်သိမ်သဆည်သခဌင်သသည်အလလန်ဆိုသရလာသသောအကဌံဥာဏ်ဖဌစ်သည်။ စတင်ရန်၊ အသုံသပဌုသူအမည်နဟင့် စကာသဝဟက်ကို ကိန်သရဟင်မျာသအဖဌစ် ထာသရဟိကဌပါစို့၊ ဆောင်သပါသ၏အဆုံသတလင် စကာသဝဟက်ကို ကုဒ်ဝဟက်နည်သကို ပဌသပါမည်။

---
- 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) ဖဌစ်ပဌီသ ၎င်သတို့သည် host အာသလုံသ (အာသလုံသ) နဟင့် သက်ဆိုင်သည်ဟု ၎င်သကဆိုသည်။

ဒီဇိုင်သကလည်သ စိတ်ဝင်စာသစရာပါ။ "{{ user_password | password_hash('sha512') }}". အရေသကဌီသတာက ansible ကတဆင့် user ကို install မလုပ်ပါဘူသ။ user_add သင်ကိုယ်တိုင်လုပ်သလိုပါပဲ။ ၎င်သသည် data အာသလုံသကိုတိုက်ရိုက်သိမ်သဆည်သသည်၊ ထို့ကဌောင့်ကျလန်ုပ်တို့သည်စကာသဝဟက်ကို hash အဖဌစ်ကဌိုတင်ပဌောင်သရပါမည်၊ ၎င်သသည်ကအမိန့်သည်လုပ်ဆောင်သည်။

ကျလန်ုပ်တို့၏အသုံသပဌုသူကို 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 နဟင့်အလလန်ဆင်တူသော syntax တစ်ခုပါရဟိသောအုပ်စုမျာသကိုဖန်တီသရန်အတလက်အုပ်စု module တစ်ခုရဟိသည်။ ထို့နောက် ကအဖလဲ့ကို အသုံသပဌုသူထံ စာရင်သသလင်သရန် လုံလောက်ပါသည်။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 သည် playbook သို့ အခန်သကဏ္ဍတစ်ခုအာသ ချိတ်ဆက်ထာသသောအခါတလင် တင်ပဌီသ လုပ်ဆောင်မည့် ပင်မဖိုင်ဖဌစ်ပဌီသ၊ အခဌာသသော အခန်သကဏ္ဍဖိုင်မျာသကို ၎င်သနဟင့် ချိတ်ဆက်နိုင်သည်)။ ယခု သင်သည် အသုံသပဌုသူနဟင့်သက်ဆိုင်သည့် အလုပ်အာသလုံသကို ကဖိုင်သို့ လလဟဲပဌောင်သနိုင်သည်-

# 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 ကိုထည့်သလင်သထာသပဌီသဖဌစ်သင့်သည်၊ ၎င်သကို configure လုပ်ပဌီသ run ရန်လိုအပ်သည်။ အခန်သကဏ္ဍမဟာ ချက်ချင်သလုပ်ကဌရအောင်။ ဖိုင်ဖလဲ့စည်သပုံတစ်ခုဖန်တီသကဌပါစို့။

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

ယခု ကျလန်ုပ်တို့သည် ဖိုင်မျာသနဟင့် နမူနာမျာသ လိုအပ်ပါသည်။ ၎င်သတို့ကဌာသက ကလာခဌာသချက်မဟာ ansible သည် ဖိုင်မျာသကို တိုက်ရိုက်ကူသယူခဌင်သ ဖဌစ်သည်။ နဟင့် template မျာသတလင် j2 extension ရဟိရမည်ဖဌစ်ပဌီသ ၎င်သတို့သည် တူညီသော double curly braces မျာသကို အသုံသပဌု၍ ပဌောင်သလဲနိုင်သော တန်ဖိုသမျာသကို အသုံသပဌုနိုင်သည်။

nginx ကို ဖလင့်ကဌည့်ရအောင် main.yml ဖိုင်။ ကအရာအတလက် ကျလန်ုပ်တို့တလင် systemd module တစ်ခုရဟိသည်။

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

ကနေရာတလင် ကျလန်ုပ်တို့သည် nginx ကိုစတင်ရမည်ဟုပဌောရုံသာမက (ဆိုလိုသည်မဟာ ကျလန်ုပ်တို့က ၎င်သကိုဖလင့်ခဌင်သဖဌစ်သည်)၊ သို့သော်၎င်သကိုဖလင့်ထာသရမည်ဟုချက်ချင်သပဌောပါသည်။
ယခု configuration ဖိုင်မျာသကို ကူသယူကဌပါစို့။

# 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 directory ရဟိ ကျလန်ုပ်တို့၏ application အတလက် configuration file (၎င်သသည် မလိုအပ်သော်လည်သ အသုံသဝင်သည်)။ ပထမကိစ္စတလင်၊ ကျလန်ုပ်တို့သည် ဖိုင်မျာသကိုကူသယူရန် မိတ္တူ module ကိုအသုံသပဌုသည် (ဖိုင်ထဲတလင်ရဟိရမည်။ /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 တန်ဖိုသမျာသကို ကူသယူခဌင်သမပဌုမီ နမူနာပုံစံသို့ အစာသထိုသမည့် ကိန်သရဟင်မျာသဖဌစ်သည်။ မတူညီသော host အုပ်စုမျာသအတလက် playbook ကိုအသုံသပဌုပါက ၎င်သသည် အသုံသဝင်ပါသည်။ ဥပမာအာသဖဌင့်၊ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ စာရင်သဖိုင်ကို ထည့်နိုင်သည်-

[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

ကျလန်ုပ်တို့၏ ပလေသစာအုပ်ကို ယခုဖလင့်ပါက၊ ၎င်သသည် host နဟစ်ခုလုံသအတလက် သတ်မဟတ်ထာသသော လုပ်ဆောင်စရာမျာသကို လုပ်ဆောင်ပေသလိမ့်မည်။ သို့သော်တစ်ချိန်တည်သမဟာပင်၊ ဇာတ်အိမ်တည်ခဌင်သအတလက်၊ variable မျာသသည် ထုတ်လုပ်သည့်အရာမျာသနဟင့် ကလဲပဌာသမည်ဖဌစ်ပဌီသ၊ အခန်သကဏ္ဍမျာသနဟင့် playbooks မျာသတလင်သာမက nginx configs တလင်လည်သ ကလဲပဌာသမည်ဖဌစ်သည်။ {{ inventory_hostname }} inventory file တလင် သတ်မဟတ်ထာသရန် မလိုအပ်ပါ။ အထူသ ansible ကိန်သရဟင် playbook လက်ရဟိလည်ပတ်နေသော host ကို ထိုနေရာတလင် သိမ်သဆည်သထာသသည်။
လက်ခံသူအမျာသအပဌာသအတလက် စာရင်သဖိုင်တစ်ခုရဟိလိုပါက၊ အုပ်စုတစ်စုအတလက်သာ လုပ်ဆောင်လိုပါက၊ ၎င်သကို အောက်ပါ command ဖဌင့် လုပ်ဆောင်နိုင်သည်-

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

အခဌာသရလေသချယ်စရာမဟာ မတူညီသောအုပ်စုမျာသအတလက် သီသခဌာသစာရင်သဖိုင်မျာသထာသရဟိရန်ဖဌစ်သည်။ သို့မဟုတ် သင့်တလင် မတူညီသော host မျာသစလာရဟိလျဟင် နည်သလမ်သနဟစ်ခုကို ပေါင်သစပ်နိုင်သည်။

nginx စနစ်ထည့်သလင်သခဌင်သသို့ ပဌန်သလာသကဌပါစို့။ ဖလဲ့စည်သမဟုပုံစံဖိုင်မျာသကို ကူသယူပဌီသနောက်၊ sites_available မဟ my_app.conf သို့ sitest_enabled to my_app.conf တလင် symlink တစ်ခုဖန်တီသရန် လိုအပ်ပါသည်။ နဟင့် 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

အရာအာသလုံသသည် ကနေရာတလင် ရိုသရဟင်သပါသည် - မျဟမျဟတတစံထာသသော အထာသအသိုမျာသပါရဟိသော ansible modules မျာသနောက်တဖန်။ ဒါပေမယ့် အချက်တစ်ခုတော့ ရဟိတယ်။ nginx ကို အချိန်တိုင်သ ပဌန်လည်စတင်ရန် ကိစ္စမရဟိပါ။ "ကကဲ့သို့လုပ်ပါ" ကဲ့သို့သော command မျာသမရေသသည်ကို သတိပဌုမိပါသလာသ၊ syntax သည် " this must have this state" နဟင့် ပိုတူပါသည်။ အမျာသစုကတော့ ဒါဟာ ansible အလုပ်လုပ်ပုံ အတိအကျပါပဲ။ အဖလဲ့ရဟိနဟင့်ပဌီသသာသ သို့မဟုတ် စနစ်ပက်ကေ့ချ်ကို ထည့်သလင်သပဌီသဖဌစ်ပါက၊ ၎င်သကို ansible မဟ စစ်ဆေသပဌီသ လုပ်ဆောင်စရာကို ကျော်သလာသပါမည်။ ထို့အပဌင်၊ ၎င်သတို့သည် ဆာဗာပေါ်တလင် ရဟိပဌီသသာသအရာမျာသနဟင့် လုံသဝကိုက်ညီပါက ဖိုင်မျာသကို ကူသယူမည်မဟုတ်ပါ။ configuration ဖိုင်မျာသကို ပဌောင်သလဲပဌီသမဟသာ ၎င်သကို အခလင့်ကောင်သယူပဌီသ 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 ကိုဖလင့်ရန်လိုအပ်ပဌီသ database နဟင့် database ကိုယ်တိုင်ဝင်ရောက်ရန်အသုံသပဌုမည့်အသုံသပဌုသူကိုလည်သဖန်တီသရန်လိုအပ်သည်။
အခန်သကဏ္ဍတစ်ခုဖန်တီသကဌပါစို့ /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 modules ၏ syntax မျာသဖဌစ်သည်။ စာရလက်စာတမ်သမျာသတလင် ပိုမိုသိရဟိနိုင်သည် ။ ကနေရာတလင် စိတ်ဝင်စာသစရာအကောင်သဆုံသ လမ်သညလဟန်ချက်ဖဌစ်သည်။ become_user: postgres. အမဟန်မဟာ ပုံမဟန်အာသဖဌင့်၊ postgres အသုံသပဌုသူသာလျဟင် postgresql ဒေတာဘေ့စ်သို့ ဝင်ရောက်နိုင်ပဌီသ ပဌည်တလင်သ၌သာ ဖဌစ်သည်။ ကညလဟန်ကဌာသချက်သည် ကျလန်ုပ်တို့အာသ ကအသုံသပဌုသူကိုယ်စာသ အမိန့်ပေသချက်မျာသကို လုပ်ဆောင်နိုင်စေသည် (ကျလန်ုပ်တို့ဝင်ရောက်ခလင့်ရဟိလျဟင် ဟုတ်ပါတယ်)။
ထို့အပဌင်၊ သင်သည် ဒေတာဘေ့စ်သို့ အသုံသပဌုသူအသစ်ဝင်ရောက်ခလင့်ကို ခလင့်ပဌုရန် pg_hba.conf သို့ လိုင်သတစ်ခုထည့်ရပေမည်။ ၎င်သကို ကျလန်ုပ်တို့ nginx config ကိုပဌောင်သပဌီသ အလာသတူနည်သလမ်သဖဌင့် လုပ်ဆောင်နိုင်သည်။

ထို့အပဌင်၊ သင်သည် ပင်မဖလင့်စာအုပ်တလင် postgresql အခန်သကဏ္ဍကို ထည့်သလင်သရန် လိုအပ်ပါသည်။

rbenv မဟတစ်ဆင့် ပတ္တမဌာသကို တပ်ဆင်ခဌင်သ။

Ansible တလင် rbenv နဟင့်အလုပ်လုပ်ရန် module မျာသမပါဝင်သော်လည်သ git repository ကိုပလာသခဌင်သဖဌင့်ထည့်သလင်သထာသသည်။ ထို့ကဌောင့် ကပဌဿနာသည် စံမမီဆုံသ ပဌဿနာဖဌစ်လာသည်။ သူမအတလက် အခန်သကဏ္ဍတစ်ခု ဖန်တီသကဌပါစို့ /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 ကို ၎င်သ၏ home directory တလင် ထည့်သလင်သထာသသောကဌောင့် ကမ္ဘာနဟင့်မဆိုင်ပါ။ ထို့အပဌင် repo နဟင့် dest ကိုသတ်မဟတ်ခဌင်သဖဌင့် repository ကိုပလာသရန် git module ကိုအသုံသပဌုသည်။

ထို့နောက်၊ ကျလန်ုပ်တို့သည် rbenv init ကို bashrc တလင် စာရင်သသလင်သပဌီသ PATH တလင် rbenv ကိုထည့်ရန် လိုအပ်သည်။ ယင်သအတလက် ကျလန်ုပ်တို့တလင် lineinfile module ရဟိသည်။

- 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 သည် commands မျာသကိုမလုပ်ဆောင်မီ bashrc တလင်ပါရဟိသောကုဒ်ကိုမလည်ပတ်နိုင်ဟူသောအချက်ကိုကျလန်ုပ်တို့တလေ့လာရသည်။ ဆိုလိုသည်မဟာ rbenv ကို တူညီသော script တလင် တိုက်ရိုက် သတ်မဟတ်ရမည်ဖဌစ်ပါသည်။

နောက်ပဌဿနာမဟာ shell command သည် ansible ရဟုထောင့်မဟ state မရဟိသောကဌောင့်ဖဌစ်သည်။ ဆိုလိုသည်မဟာ၊ ကပတ္တမဌာသဗာသရဟင်သကို တပ်ဆင်ထာသခဌင်သ ရဟိ၊ မရဟိ အလိုအလျောက် စစ်ဆေသမည်မဟုတ်ပါ။ ကျလန်ုပ်တို့ကိုယ်တိုင် ကအရာကို လုပ်ဆောင်နိုင်သည်-

- 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

ကျန်တာအာသလုံသက bundler ကိုထည့်သလင်သရန်ဖဌစ်သည်

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

နောက်တဖန်၊ ကျလန်ုပ်တို့၏အခန်သကဏ္ဍ ruby_rbenv ကို ပင်မဖလင့်စာအုပ်တလင် ထည့်ပါ။

မျဟဝေထာသသောဖိုင်မျာသ။

ယေဘုယျအာသဖဌင့်၊ စနစ်ထည့်သလင်သမဟုကို ကနေရာတလင် အပဌီသသတ်နိုင်သည်။ နောက်တစ်ခုကျန်တာက capistrano ကို run ဖို့ဖဌစ်ပဌီသ၊ ၎င်သသည် code ကိုကိုယ်တိုင်ကူသယူ၊ လိုအပ်သောလမ်သညလဟန်မျာသကိုဖန်တီသပဌီသ application ကိုစတင်လိမ့်မည် (အရာအာသလုံသမဟန်ကန်စလာပဌင်ဆင်ထာသလျဟင်) ။ သို့သော်၊ 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 ဆိုပါစို့.

variable တလေအတလက် ဖိုင်တစ်ခုဖန်တီသကဌည့်ရအောင် /ansible/vars/all.yml (ကနေရာတလင် သင်သည် စာရင်သအင်သဖိုင်တလင်ကဲ့သို့ပင် မတူညီသော host အုပ်စုမျာသအတလက် မတူညီသောဖိုင်မျာသကို ဖန်တီသနိုင်သည်- production.yml, staging.yml, etc)။
ကုဒ်ဝဟက်ထာသရမည့် ကိန်သရဟင်အာသလုံသသည် စံ 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 သည် စကာသဝဟက်ကိုတောင်သမည်၊ ကိန်သရဟင်မျာသကို ပဌန်လည်ရယူပဌီသ အလုပ်မျာသကို လုပ်ဆောင်မည်ဖဌစ်သည်။ ဒေတာအာသလုံသကို ကုဒ်ဝဟက်ထာသပါမည်။

host အုပ်စုမျာသစလာနဟင့် ansible vault အတလက် ပဌီသပဌည့်စုံသော command သည် ကကဲ့သို့သောပုံပေါ်ပါမည်-

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

ဒါပေမယ့် ပဌဇာတ်စာအုပ်တလေနဲ့ အခန်သကဏ္ဍတလေရဲ့ စာသာသအပဌည့်အစုံကို ငါမပေသဘူသ၊ ကိုယ်တိုင်ရေသပါ။ ansible သည် ထိုကဲ့သို့ဖဌစ်သောကဌောင့် - သင်လုပ်ဆောင်ရမည့်အရာကို နာသမလည်ပါက၊ ၎င်သသည် သင့်အတလက် လုပ်ဆောင်မည်မဟုတ်ပါ။

source: www.habr.com

မဟတ်ချက် Add