Sa pa gen lontan mwen te bezwen ekri plizyè liv Ansible pou prepare sèvè a pou deplwaye yon aplikasyon Rails. Epi, etonan, mwen pa t jwenn yon senp manyèl etap pa etap. Mwen pa t 'vle kopye liv jwèt yon lòt moun san yo pa konprann sa k ap pase, epi nan fen a mwen te oblije li dokiman an, kolekte tout bagay tèt mwen. Petèt mwen ka ede yon moun akselere pwosesis sa a ak èd nan atik sa a.
Premye bagay yo konprann se ke ansible bay ou ak yon koòdone pratik fè yon lis predefini nan aksyon sou yon sèvè aleka (yo) atravè SSH. Pa gen okenn maji isit la, ou pa ka enstale yon Plugin epi jwenn yon deplwaman zewo D 'nan aplikasyon w lan ak docker, siveyans ak lòt bagay ki soti nan bwat la. Pou w ka ekri yon liv, ou dwe konnen ki sa egzakteman ou vle fè ak kijan pou fè li. Se poutèt sa mwen pa satisfè ak liv ki pare yo soti nan GitHub, oswa atik tankou: "Kopi epi kouri, li pral travay."
Kisa nou bezwen?
Kòm mwen te deja di, yo nan lòd yo ekri yon liv jwèt ou bezwen konnen ki sa ou vle fè ak ki jan fè li. Ann deside sa nou bezwen. Pou yon aplikasyon Rails nou pral bezwen plizyè pakè sistèm: nginx, postgresql (redis, elatriye). Anplis de sa, nou bezwen yon vèsyon espesifik nan Ruby. Li pi bon pou enstale li atravè rbenv (rvm, asdf...). Kouri tout bagay sa yo kòm yon itilizatè rasin se toujou yon move lide, kidonk ou bezwen kreye yon itilizatè separe ak konfigirasyon dwa li yo. Apre sa, ou bezwen telechaje kòd nou an sou sèvè a, kopye konfigirasyon yo pou nginx, postgres, elatriye epi kòmanse tout sèvis sa yo.
Kòm yon rezilta, sekans aksyon an se jan sa a:
- Konekte kòm rasin
- enstale pakè sistèm yo
- kreye yon nouvo itilizatè, konfigirasyon dwa, kle ssh
- konfigirasyon pakè sistèm (nginx elatriye) epi kouri yo
- Nou kreye yon itilizatè nan baz done a (ou ka imedyatman kreye yon baz done)
- Konekte kòm yon nouvo itilizatè
- Enstale rbenv ak ruby
- Enstale bundler la
- Téléchargement kòd aplikasyon an
- Lanse sèvè Puma a
Anplis, dènye etap yo ka fè lè l sèvi avèk capistrano, omwen soti nan bwat la li ka kopye kòd nan repèrtwar lage, chanje liberasyon an ak yon lyen senbolik sou deplwaman siksè, kopye konfigirasyon soti nan yon anyè pataje, rekòmanse puma, elatriye. Tout bagay sa yo ka fè lè l sèvi avèk Ansible, men poukisa?
Estrikti dosye
Ansible gen strik
Liv senp
Playbook se yon dosye yml ki, lè l sèvi avèk sentaks espesyal, dekri sa Ansible ta dwe fè ak ki jan. Ann kreye premye liv ki pa fè anyen:
---
- name: Simple playbook
hosts: all
Isit la nou tou senpleman di ke playbook nou an rele Simple Playbook
e ke sa ki ladan yo ta dwe egzekite pou tout lame. Nou ka sove li nan /ansible anyè ak non an playbook.yml
epi eseye kouri:
ansible-playbook ./playbook.yml
PLAY [Simple Playbook] ************************************************************************************************************************************
skipping: no hosts matched
Ansible di ke li pa konnen okenn lame ki matche ak lis la tout. Yo dwe fè lis nan yon espesyal
Ann kreye li nan menm anyè a:
123.123.123.123
Men ki jan nou tou senpleman presize lame a (depreferans lame a nan VPS nou an pou tès, oswa ou ka anrejistre localhost) epi sove li anba non an. inventory
.
Ou ka eseye kouri ansible ak yon dosye envantè:
ansible-playbook ./playbook.yml -i inventory
PLAY [Simple Playbook] ************************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************************
PLAY RECAP ************************************************************************************************************************************
Si ou gen aksè ssh nan lame a espesifye, Lè sa a, ansible pral konekte ak kolekte enfòmasyon sou sistèm nan aleka. (default TASK [Gathering Facts]) apre sa li pral bay yon rapò kout sou ekzekisyon an (PLAY RECAP).
Pa default, koneksyon an sèvi ak non itilizatè a anba ki ou konekte nan sistèm lan. Li gen plis chans pa pral sou lame a. Nan dosye playbook la, ou ka presize ki itilizatè pou itilize pou konekte avèk direktiv remote_user la. Epitou, enfòmasyon sou yon sistèm aleka ka souvan pa nesesè pou ou epi ou pa ta dwe pèdi tan kolekte li. Travay sa a kapab tou enfim:
---
- name: Simple playbook
hosts: all
remote_user: root
become: true
gather_facts: no
Eseye kouri playbook la ankò epi asire w ke koneksyon an ap travay. (Si ou espesifye itilizatè a rasin, Lè sa a, ou bezwen tou presize vin: verite direktiv la nan lòd yo jwenn dwa elve. Jan sa ekri nan dokiman an: become set to ‘true’/’yes’ to activate privilege escalation.
byenke li pa totalman klè poukisa).
Petèt ou pral resevwa yon erè ki te koze pa lefèt ke ansible pa ka detèmine entèprèt la Python, Lè sa a, ou ka presize li manyèlman:
ansible_python_interpreter: /usr/bin/python3
Ou ka chèche konnen ki kote ou gen python ak lòd la whereis python
.
Enstale pakè sistèm yo
Distribisyon estanda Ansible a gen ladann anpil modil pou travay ak pakè sistèm divès kalite, kidonk nou pa bezwen ekri scripts bash pou nenpòt ki rezon. Koulye a, nou bezwen youn nan modil sa yo mete ajou sistèm nan ak enstale pakè sistèm yo. Mwen gen Ubuntu Linux sou VPS mwen an, kidonk enstale pakè mwen itilize yo apt-get
и
Ann konplete liv jwèt nou an ak premye travay yo:
---
- 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
Travay se egzakteman travay ke Ansible pral fè sou sèvè aleka. Nou bay travay la yon non pou nou ka swiv ekzekisyon li nan boutèy la. Epi nou dekri, lè l sèvi avèk sentaks nan yon modil espesifik, sa li bezwen fè. Nan ka sa apt: update_cache=yes
- di pou mete ajou pakè sistèm yo lè l sèvi avèk modil apt la. Dezyèm kòmandman an se yon ti kras pi konplike. Nou pase yon lis pakè nan modil apt la epi nou di ke yo ye state
ta dwe vin present
, se sa ki, nou di enstale pakè sa yo. Nan yon fason menm jan an, nou ka di yo efase yo, oswa mete ajou yo pa tou senpleman chanje state
. Tanpri sonje ke pou ray yo travay ak postgresql nou bezwen pake a postgresql-contrib, ke nou ap enstale kounye a. Ankò, ou bezwen konnen epi fè sa; ansible pou kont li pa pral fè sa.
Eseye kouri playbook la ankò epi tcheke si pakè yo enstale.
Kreye nouvo itilizatè yo.
Pou travay ak itilizatè, Ansible gen tou yon modil - itilizatè. Ann ajoute yon lòt travay (mwen kache pati ki deja konnen nan liv la dèyè kòmantè yo pou pa kopye li nèt chak fwa):
---
- name: Simple playbook
# ...
tasks:
# ...
- name: Add a new user
user:
name: my_user
shell: /bin/bash
password: "{{ 123qweasd | password_hash('sha512') }}"
Nou kreye yon nouvo itilizatè, mete yon schell ak modpas pou li. Apre sa, nou kouri nan plizyè pwoblèm. E si non itilizatè yo bezwen diferan pou diferan lame? Ak estoke modpas la nan tèks klè nan playbook la se yon trè move lide. Pou kòmanse, ann mete non itilizatè a ak modpas la nan varyab, ak nan fen atik la mwen pral montre ki jan yo ankripte modpas la.
---
- name: Simple playbook
# ...
tasks:
# ...
- name: Add a new user
user:
name: "{{ user }}"
shell: /bin/bash
password: "{{ user_password | password_hash('sha512') }}"
Varyab yo mete nan liv jwèt lè l sèvi avèk aparèy òtopedik boukle doub.
Nou pral endike valè varyab yo nan dosye envantè a:
123.123.123.123
[all:vars]
user=my_user
user_password=123qweasd
Tanpri sonje direktiv la [all:vars]
- li di ke pwochen blòk tèks la se varyab (vars) epi yo aplikab a tout lame (tout).
Konsepsyon an tou enteresan "{{ user_password | password_hash('sha512') }}"
. Bagay la se ke ansible pa enstale itilizatè a atravè user_add
tankou ou ta fè li manyèlman. Epi li sove tout done dirèkteman, ki se poukisa nou dwe tou konvèti modpas la nan yon hash davans, ki se sa kòmand sa a fè.
Ann ajoute itilizatè nou an nan gwoup sudo a. Sepandan, anvan sa nou bezwen asire w ke yon gwoup sa a egziste paske pèsonn pa pral fè sa pou nou:
---
- 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"
Tout bagay se byen senp, nou gen tou yon modil gwoup pou kreye gwoup, ak yon sentaks ki sanble anpil ak apt. Lè sa a, li ase pou anrejistre gwoup sa a bay itilizatè a (groups: "sudo"
).
Li itil tou pou ajoute yon kle ssh nan itilizatè sa a pou nou ka konekte lè l sèvi avèk li san yon modpas:
---
- 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
Nan ka sa a, konsepsyon an se enteresan "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
— li kopye sa ki nan fichye id_rsa.pub (non ou ka diferan), sa vle di, pati piblik kle ssh la epi telechaje li nan lis kle otorize pou itilizatè a sou sèvè a.
Wòl
Tout twa travay pou kreye itilizasyon yo ka fasilman klase nan yon gwoup travay, epi li ta yon bon lide pou estoke gwoup sa a separeman de liv prensipal la pou li pa grandi twò gwo. Pou rezon sa a, Ansible genyen
Dapre estrikti dosye ki endike nan kòmansman an, wòl yo dwe mete yo nan yon anyè wòl separe, pou chak wòl gen yon anyè separe ak menm non, andedan anyè travay, fichye, modèl, elatriye.
Ann kreye yon estrikti dosye: ./ansible/roles/user/tasks/main.yml
(prensipal se dosye prensipal la ki pral chaje ak egzekite lè yon wòl konekte ak playbook la; lòt dosye wòl yo ka konekte ak li). Koulye a, ou ka transfere tout travay ki gen rapò ak itilizatè a nan dosye sa a:
# 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
Nan liv prensipal la, ou dwe presize pou itilize wòl itilizatè a:
---
- 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
Epitou, li ka fè sans pou mete ajou sistèm nan anvan tout lòt travay; pou fè sa, ou ka chanje non blòk la tasks
kote yo defini nan pre_tasks
.
Mete kanpe nginx
Nou ta dwe deja enstale Nginx; nou bezwen konfigirasyon li epi kouri li. Ann fè li touswit nan wòl la. Ann kreye yon estrikti dosye:
- ansible
- roles
- nginx
- files
- tasks
- main.yml
- templates
Koulye a, nou bezwen dosye ak modèl. Diferans ki genyen ant yo se ke ansible kopye dosye yo dirèkteman, jan yo ye. Ak modèl yo dwe gen ekstansyon j2 a epi yo ka itilize valè varyab lè l sèvi avèk menm atèl doub Curly.
Ann pèmèt nginx nan main.yml
dosye. Pou sa nou gen yon modil systemd:
# Copy nginx configs and start it
- name: enable service nginx and start
systemd:
name: nginx
state: started
enabled: yes
Isit la nou pa sèlman di ke nginx dwe kòmanse (ki se, nou lanse li), men nou imedyatman di ke li dwe aktive.
Koulye a, ann kopye fichye konfigirasyon yo:
# 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'
Nou kreye dosye prensipal la konfigirasyon nginx (ou ka pran li dirèkteman nan sèvè a, oswa ekri li tèt ou). Epi tou dosye a konfigirasyon pou aplikasyon nou an nan anyè sites_available (sa a pa nesesè men itil). Nan premye ka a, nou itilize modil kopi a pou kopye fichye yo (fichye a dwe nan /ansible/roles/nginx/files/nginx.conf
). Nan dezyèm lan, nou kopye modèl la, ranplase valè yo nan varyab yo. Modèl la ta dwe nan /ansible/roles/nginx/templates/my_app.j2
). Epi li ta ka sanble yon bagay tankou sa a:
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 }};
....
}
Peye atansyon sou foure yo {{ app_name }}
, {{ app_path }}
, {{ server_name }}
, {{ inventory_hostname }}
- sa yo se tout varyab ki gen valè Ansible pral ranplase nan modèl la anvan kopye. Sa a itil si w itilize yon liv pou diferan gwoup lame yo. Pou egzanp, nou ka ajoute dosye envantè nou an:
[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
Si nou kounye a lanse playbook nou an, li pral fè travay yo espesifye pou tou de lame yo. Men, an menm tan an, pou yon lame staging, varyab yo pral diferan de sa yo pwodiksyon, epi yo pa sèlman nan wòl ak playbooks, men tou nan konfigirasyon nginx. {{ inventory_hostname }}
pa bezwen espesifye nan dosye a envantè - sa a
Si ou vle gen yon dosye envantè pou plizyè lame, men sèlman kouri pou yon gwoup, sa ka fè ak lòd sa a:
ansible-playbook -i inventory ./playbook.yml -l "staging"
Yon lòt opsyon se gen dosye envantè separe pou diferan gwoup. Oswa ou ka konbine de apwòch yo si ou gen anpil lame diferan.
Ann tounen nan mete kanpe nginx. Apre w fin kopye fichye konfigirasyon yo, nou bezwen kreye yon lyen senbolik nan sitest_enabled nan my_app.conf soti nan sites_available. Epi rekòmanse 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
Tout bagay se senp isit la - ankò modil ansible ak yon sentaks san patipri estanda. Men, gen yon pwen. Pa gen okenn pwen nan rekòmanse nginx chak fwa. Èske w te remake ke nou pa ekri kòmandman tankou: "fè sa a tankou sa a", sentaks la sanble plis tankou "sa a ta dwe gen eta sa a". Ak pi souvan sa a se egzakteman ki jan ansible travay. Si gwoup la deja egziste, oswa pake sistèm lan deja enstale, Lè sa a, ansible pral tcheke pou sa a epi sote travay la. Epitou, dosye yo pa pral kopye si yo konplètman matche ak sa ki deja sou sèvè a. Nou ka pran avantaj de sa a epi rekòmanse nginx sèlman si dosye konfigirasyon yo te chanje. Gen yon direktiv enskri pou sa a:
# 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
Si youn nan fichye konfigirasyon yo chanje, yo pral fè yon kopi epi yo pral anrejistre varyab la restart_nginx
. Epi sèlman si varyab sa a te anrejistre sèvis la pral rekòmanse.
Epi, nan kou, ou bezwen ajoute wòl nginx nan liv prensipal la.
Mete kanpe postgresql
Nou bezwen pèmèt postgresql lè l sèvi avèk systemd nan menm fason an kòm nou te fè ak nginx, epi tou kreye yon itilizatè ke nou pral itilize jwenn aksè nan baz done a ak baz done a tèt li.
Ann kreye yon wòl /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 }}"
Mwen pa pral dekri ki jan yo ajoute varyab nan envantè, sa a te deja fè anpil fwa, osi byen ke sentaks la nan modil postgresql_db ak postgresql_user. Ou ka jwenn plis enfòmasyon nan dokiman an. Direktiv ki pi enteresan isit la se become_user: postgres
. Reyalite a se ke pa default, se sèlman itilizatè a postgres ki gen aksè nan baz done a postgresql epi sèlman lokalman. Direktiv sa a pèmèt nou egzekite kòmandman sou non itilizatè sa a (si nou gen aksè, nan kou).
Epitou, ou ka oblije ajoute yon liy nan pg_hba.conf pou pèmèt yon nouvo itilizatè aksè nan baz done a. Sa a ka fè menm jan ak nou chanje konfigirasyon nginx la.
Ak nan kou, ou bezwen ajoute wòl nan postgresql nan liv prensipal la.
Enstale ruby via rbenv
Ansible pa gen modil pou travay ak rbenv, men li enstale pa klonaj yon depo git. Se poutèt sa, pwoblèm sa a vin youn ki pi ki pa estanda. Ann kreye yon wòl pou li /ansible/roles/ruby_rbenv/main.yml
epi ann kòmanse ranpli li:
# Install rbenv and ruby
- name: Install rbenv
become_user: "{{ user }}"
git: repo=https://github.com/rbenv/rbenv.git dest=~/.rbenv
Nou ankò sèvi ak direktiv become_user pou travay anba itilizatè nou te kreye pou rezon sa yo. Depi rbenv enstale nan anyè lakay li, epi li pa globalman. Epi nou menm tou nou itilize modil git la pou klonaj repozitwa a, espesifye repo ak dest.
Apre sa, nou bezwen anrejistre rbenv init nan bashrc epi ajoute rbenv nan PATH la. Pou sa nou gen modil 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 -)"'
Lè sa a, ou bezwen enstale ruby_build:
- name: Install ruby-build
become_user: "{{ user }}"
git: repo=https://github.com/rbenv/ruby-build.git dest=~/.rbenv/plugins/ruby-build
Epi finalman enstale Ruby. Sa a se fè atravè rbenv, se sa ki, tou senpleman ak lòd la 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
Nou di ki lòd pou egzekite ak kisa. Sepandan, isit la nou rankontre lefèt ke ansible pa kouri kòd ki genyen nan bashrc anvan yo kouri kòmandman yo. Sa vle di ke rbenv pral gen yo dwe defini dirèkteman nan menm script la.
Pwoblèm nan pwochen se akòz lefèt ke lòd la koki pa gen okenn eta nan yon pwen de vi ansible. Sa vle di, pa pral gen okenn chèk otomatik si vèsyon sa a nan Ruby enstale oswa ou pa. Nou ka fè sa nou menm:
- 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
Tout sa ki rete se enstale bundler:
- name: Install bundler
become_user: "{{ user }}"
shell: |
export PATH="${HOME}/.rbenv/bin:${PATH}"
eval "$(rbenv init -)"
gem install bundler
Epi ankò, ajoute wòl nou ruby_rbenv nan liv prensipal la.
Fichye pataje.
An jeneral, konfigirasyon an ka ranpli isit la. Apre sa, tout sa ki rete se kouri capistrano epi li pral kopye kòd la tèt li, kreye repèrtwar ki nesesè yo epi lanse aplikasyon an (si tout bagay se configuré kòrèkteman). Sepandan, capistrano souvan mande pou fichye konfigirasyon adisyonèl, tankou database.yml
oswa .env
Yo ka kopye jis tankou dosye ak modèl pou nginx. Gen yon sèl sibtilite. Anvan w kopye dosye, ou bezwen kreye yon estrikti anyè pou yo, yon bagay tankou sa a:
# Copy shared files for deploy
- name: Ensure shared dir
become_user: "{{ user }}"
file:
path: "{{ app_path }}/shared/config"
state: directory
nou presize sèlman yon sèl anyè epi ansible pral otomatikman kreye paran si sa nesesè.
Ansible Vault
Nou te deja vin atravè lefèt ke varyab yo ka genyen done sekrè tankou modpas itilizatè a. Si ou te kreye .env
dosye pou aplikasyon an, epi database.yml
Lè sa a, dwe gen menm plis done kritik sa yo. Li ta bon pou kache yo anba je furter. Pou rezon sa a yo itilize li
Ann kreye yon dosye pou varyab /ansible/vars/all.yml
(Isit la ou ka kreye dosye diferan pou diferan gwoup lame, jis tankou nan dosye a envantè: production.yml, staging.yml, elatriye).
Tout varyab ki dwe chiffres dwe transfere nan fichye sa a lè l sèvi avèk sentaks yml estanda:
# 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
Apre sa, dosye sa a ka chiffres ak kòmandman an:
ansible-vault encrypt ./vars/all.yml
Natirèlman, lè chifreman, w ap bezwen mete yon modpas pou dechifre. Ou ka wè sa ki pral andedan dosye a apre w fin rele lòd sa a.
Pa vle di nan ansible-vault decrypt
ka fichye a dwe dechifre, modifye ak Lè sa a, chiffres ankò.
Ou pa bezwen dechifre dosye a pou travay. Ou estoke li ankripte epi kouri playbook la ak agiman an --ask-vault-pass
. Ansible pral mande modpas la, rekipere varyab yo, epi egzekite travay yo. Tout done yo ap rete chiffres.
Kòmandman konplè a pou plizyè gwoup lame ak vout ansible ap gade yon bagay tankou sa a:
ansible-playbook -i inventory ./playbook.yml -l "staging" --ask-vault-pass
Men, mwen pa pral ba ou tèks la konplè nan liv ak wòl, ekri li tèt ou. Paske ansible se konsa - si ou pa konprann sa ki bezwen fè, Lè sa a, li pa pral fè li pou ou.
Sous: www.habr.com