Ekki er langt síðan ég þurfti að skrifa nokkrar Ansible leikbækur til að undirbúa þjóninn fyrir að dreifa Rails forriti. Og, furðu, fann ég ekki einfalda skref-fyrir-skref handbók. Ég vildi ekki afrita leikbók einhvers annars án þess að skilja hvað var að gerast, og á endanum varð ég að lesa skjölin og safna öllu sjálfur. Kannski get ég hjálpað einhverjum að flýta þessu ferli með hjálp þessarar greinar.
Það fyrsta sem þarf að skilja er að ansible veitir þér þægilegt viðmót til að framkvæma fyrirfram skilgreindan lista yfir aðgerðir á ytri netþjónum í gegnum SSH. Það er enginn galdur hér, þú getur ekki sett upp viðbætur og fengið núll niður í miðbæ af forritinu þínu með docker, eftirliti og öðru góðgæti úr kassanum. Til þess að skrifa leikbók verður þú að vita nákvæmlega hvað þú vilt gera og hvernig á að gera það. Þess vegna er ég ekki sáttur við tilbúnar leikrit frá GitHub, eða greinar eins og: „Afrita og keyra, það mun virka.“
Hvað þurfum við?
Eins og ég sagði þegar, til þess að skrifa leikbók þarftu að vita hvað þú vilt gera og hvernig á að gera það. Við skulum ákveða hvað við þurfum. Fyrir Rails forrit þurfum við nokkra kerfispakka: nginx, postgresql (redis, osfrv.). Að auki þurfum við sérstaka útgáfu af rúbíni. Best er að setja það upp í gegnum rbenv (rvm, asdf...). Að keyra þetta allt sem rótnotanda er alltaf slæm hugmynd, svo þú þarft að búa til sérstakan notanda og stilla réttindi hans. Eftir þetta þarftu að hlaða upp kóðanum okkar á netþjóninn, afrita stillingarnar fyrir nginx, postgres, osfrv og hefja allar þessar þjónustur.
Fyrir vikið er röð aðgerða sem hér segir:
- Skráðu þig inn sem rót
- setja upp kerfispakka
- búa til nýjan notanda, stilla réttindi, ssh lykill
- stilltu kerfispakka (nginx osfrv.) og keyrðu þá
- Við búum til notanda í gagnagrunninum (þú getur strax búið til gagnagrunn)
- Skráðu þig inn sem nýr notandi
- Settu upp rbenv og ruby
- Að setja upp búntara
- Hleður upp forritskóðanum
- Ræsir Puma netþjóninn
Þar að auki er hægt að gera síðustu stigin með því að nota capistrano, að minnsta kosti út fyrir kassann getur það afritað kóða í útgáfumöppur, skipt um útgáfu með tákntengli við árangursríka uppsetningu, afritað stillingar úr sameiginlegri möppu, endurræst puma osfrv. Allt þetta er hægt að gera með Ansible, en hvers vegna?
Uppbygging skráa
Ansible hefur strangt
Einföld leikbók
Playbook er yml skrá sem með sérstökum setningafræði lýsir því hvað Ansible ætti að gera og hvernig. Við skulum búa til fyrstu leikbókina sem gerir ekkert:
---
- name: Simple playbook
hosts: all
Hér segjum við einfaldlega að leikbókin okkar heitir Simple Playbook
og að innihald þess ætti að vera keyrt fyrir alla gestgjafa. Við getum vistað það í /ansible möppu með nafninu playbook.yml
og reyndu að keyra:
ansible-playbook ./playbook.yml
PLAY [Simple Playbook] ************************************************************************************************************************************
skipping: no hosts matched
Ansible segist ekki þekkja neina gestgjafa sem passa við allan listann. Þeir verða að vera skráðir í sérstakri
Við skulum búa það til í sömu möppu:
123.123.123.123
Svona tilgreinum við einfaldlega gestgjafann (helst gestgjafi VPS okkar til að prófa, eða þú getur skráð localhost) og vistum hann undir nafninu inventory
.
Þú getur prófað að keyra ansible með birgðaskrá:
ansible-playbook ./playbook.yml -i inventory
PLAY [Simple Playbook] ************************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************************
PLAY RECAP ************************************************************************************************************************************
Ef þú hefur ssh aðgang að tilgreindum hýsil, þá mun ansible tengjast og safna upplýsingum um ytra kerfið. (sjálfgefið TASK [Gathering Facts]) eftir það mun það gefa stutta skýrslu um framkvæmdina (PLAY RECAP).
Sjálfgefið er að tengingin notar notandanafnið sem þú ert skráður undir í kerfinu. Það mun líklegast ekki vera á gestgjafanum. Í leikbókarskránni geturðu tilgreint hvaða notanda á að nota til að tengjast með því að nota remote_user tilskipunina. Einnig geta upplýsingar um fjarkerfi oft verið óþarfar fyrir þig og þú ættir ekki að eyða tíma í að safna þeim. Einnig er hægt að slökkva á þessu verkefni:
---
- name: Simple playbook
hosts: all
remote_user: root
become: true
gather_facts: no
Reyndu að keyra leikbókina aftur og vertu viss um að tengingin virki. (Ef þú tilgreindir rótarnotandann, þá þarftu líka að tilgreina orðið: true tilskipunina til að öðlast aukin réttindi. Eins og skrifað er í skjölunum: become set to ‘true’/’yes’ to activate privilege escalation.
þó ekki sé alveg ljóst hvers vegna).
Kannski færðu villu sem stafar af því að ansible getur ekki ákvarðað Python túlkinn, þá geturðu tilgreint það handvirkt:
ansible_python_interpreter: /usr/bin/python3
Þú getur fundið út hvar þú ert með python með skipuninni whereis python
.
Að setja upp kerfispakka
Stöðluð dreifing Ansible inniheldur margar einingar til að vinna með ýmsa kerfispakka, svo við þurfum ekki að skrifa bash forskriftir af einhverjum ástæðum. Nú þurfum við eina af þessum einingum til að uppfæra kerfið og setja upp kerfispakka. Ég er með Ubuntu Linux á VPS, svo ég nota til að setja upp pakka apt-get
и
Við skulum bæta við leikbókinni okkar með fyrstu verkunum:
---
- 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
Verkefni er nákvæmlega það verkefni sem Ansible mun framkvæma á ytri netþjónum. Við gefum verkefninu nafn svo að við getum fylgst með framkvæmd þess í log. Og við lýsum, með því að nota setningafræði tiltekinnar einingar, hvað hún þarf að gera. Í þessu tilfelli apt: update_cache=yes
- segir að uppfæra kerfispakka með því að nota apt eininguna. Önnur skipunin er aðeins flóknari. Við sendum lista yfir pakka til viðeigandi einingarinnar og segjum að þeir séu það state
ætti að verða present
, það er, við segjum að setja upp þessa pakka. Á svipaðan hátt getum við sagt þeim að eyða þeim eða uppfært með því einfaldlega að breyta state
. Vinsamlegast athugaðu að til að teinar virki með postgresql þurfum við postgresql-contrib pakkann, sem við erum að setja upp núna. Aftur, þú þarft að vita og gera þetta; Ansible á eigin spýtur mun ekki gera þetta.
Reyndu að keyra leikbókina aftur og athugaðu hvort pakkarnir séu uppsettir.
Að búa til nýja notendur.
Til að vinna með notendum hefur Ansible einnig einingu - notandi. Við skulum bæta við einu verkefni í viðbót (ég faldi þegar þekkta hluta leikbókarinnar á bak við athugasemdirnar til að afrita það ekki alveg í hvert skipti):
---
- name: Simple playbook
# ...
tasks:
# ...
- name: Add a new user
user:
name: my_user
shell: /bin/bash
password: "{{ 123qweasd | password_hash('sha512') }}"
Við búum til nýjan notanda, setjum skel og lykilorð fyrir hann. Og svo lendum við í nokkrum vandamálum. Hvað ef notendanöfn þurfa að vera mismunandi fyrir mismunandi gestgjafa? Og að geyma lykilorðið í skýrum texta í leikbókinni er mjög slæm hugmynd. Til að byrja með skulum við setja notandanafnið og lykilorðið í breytur og í lok greinarinnar mun ég sýna hvernig á að dulkóða lykilorðið.
---
- name: Simple playbook
# ...
tasks:
# ...
- name: Add a new user
user:
name: "{{ user }}"
shell: /bin/bash
password: "{{ user_password | password_hash('sha512') }}"
Breytur eru settar í leikbókum með því að nota tvöfaldar krullaðar axlabönd.
Við munum gefa til kynna gildi breytanna í birgðaskránni:
123.123.123.123
[all:vars]
user=my_user
user_password=123qweasd
Vinsamlegast athugaðu tilskipunina [all:vars]
- það segir að næsti textabálkur sé breytur (vars) og þær eiga við um alla véla (alla).
Hönnunin er líka áhugaverð "{{ user_password | password_hash('sha512') }}"
. Málið er að ansible setur ekki upp notandann í gegnum user_add
eins og þú myndir gera það handvirkt. Og það vistar öll gögn beint, þess vegna verðum við líka að breyta lykilorðinu í hass fyrirfram, sem er það sem þessi skipun gerir.
Bætum notandanum okkar í sudo hópinn. En áður en þetta kemur þurfum við að ganga úr skugga um að slíkur hópur sé til vegna þess að enginn mun gera þetta fyrir okkur:
---
- 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"
Allt er frekar einfalt, við erum líka með hópeiningu til að búa til hópa, með setningafræði mjög svipuð apt. Þá er nóg að skrá þennan hóp á notandann (groups: "sudo"
).
Það er líka gagnlegt að bæta ssh lykli við þennan notanda svo að við getum skráð okkur inn með því án lykilorðs:
---
- 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
Í þessu tilfelli er hönnunin áhugaverð "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
— það afritar innihald id_rsa.pub skráarinnar (nafnið þitt gæti verið annað), það er opinbera hluta ssh lykilsins og hleður því upp á listann yfir leyfilega lykla fyrir notandann á þjóninum.
Hlutverk
Öll þrjú verkefnin til að skapa notkun má auðveldlega flokka í einn verkefnahóp og gott væri að geyma þennan hóp aðskilinn frá aðalleikritinu svo hann verði ekki of stór. Í þessu skyni hefur Ansible
Samkvæmt skráarskipulaginu sem tilgreint er strax í upphafi verður að setja hlutverk í sérstaka hlutverkaskrá, fyrir hvert hlutverk er sérstök mappa með sama nafni, inni í möppunni fyrir verkefni, skrár, sniðmát o.s.frv.
Við skulum búa til skráarskipulag: ./ansible/roles/user/tasks/main.yml
(main er aðalskráin sem verður hlaðin og keyrð þegar hlutverk er tengt við leikbókina; hægt er að tengja aðrar hlutverkaskrár við hana). Nú geturðu flutt öll verkefni sem tengjast notandanum yfir á þessa skrá:
# 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
Í aðalleikritinu verður þú að tilgreina að nota notendahlutverkið:
---
- 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
Einnig getur verið skynsamlegt að uppfæra kerfið fyrir öll önnur verkefni; til að gera þetta geturðu endurnefna blokkina tasks
þar sem þau eru skilgreind í pre_tasks
.
Að setja upp nginx
Við ættum nú þegar að hafa Nginx uppsett; við þurfum að stilla það og keyra það. Gerum það strax í hlutverkinu. Við skulum búa til skráarskipulag:
- ansible
- roles
- nginx
- files
- tasks
- main.yml
- templates
Nú þurfum við skrár og sniðmát. Munurinn á þeim er sá að ansible afritar skrárnar beint, eins og þær eru. Og sniðmát verða að hafa j2 framlenginguna og þau geta notað breytileg gildi með sömu tvöföldu krulluðu axlaböndum.
Við skulum virkja nginx inn main.yml
skrá. Fyrir þetta höfum við systemd einingu:
# Copy nginx configs and start it
- name: enable service nginx and start
systemd:
name: nginx
state: started
enabled: yes
Hér segjum við ekki aðeins að nginx verði að vera ræst (þ.e. við ræsum það), heldur segjum við strax að það verði að vera virkt.
Nú skulum við afrita stillingarskrárnar:
# 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'
Við búum til helstu nginx stillingarskrána (þú getur tekið hana beint af þjóninum eða skrifað hana sjálfur). Og einnig stillingarskrá fyrir forritið okkar í möppunni sites_available (þetta er ekki nauðsynlegt en gagnlegt). Í fyrra tilvikinu notum við afritunareininguna til að afrita skrár (skráin verður að vera í /ansible/roles/nginx/files/nginx.conf
). Í öðru lagi afritum við sniðmátið og setjum út gildi breytanna. Sniðmátið ætti að vera í /ansible/roles/nginx/templates/my_app.j2
). Og það gæti litið svona út:
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 }};
....
}
Gefðu gaum að innleggunum {{ app_name }}
, {{ app_path }}
, {{ server_name }}
, {{ inventory_hostname }}
— þetta eru allar breyturnar þar sem gildi Ansible koma í staðinn fyrir sniðmátið áður en það er afritað. Þetta er gagnlegt ef þú notar leikbók fyrir mismunandi hópa gestgjafa. Til dæmis getum við bætt við birgðaskránni okkar:
[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
Ef við ræsum nú leikbókina okkar mun hún framkvæma tilgreind verkefni fyrir báða gestgjafana. En á sama tíma, fyrir sviðsstjóra, verða breyturnar aðrar en framleiðslurnar, og ekki aðeins í hlutverkum og leikbókum, heldur einnig í nginx stillingum. {{ inventory_hostname }}
þarf ekki að tilgreina í birgðaskránni - þetta
Ef þú vilt hafa birgðaskrá fyrir nokkra gestgjafa, en aðeins keyra fyrir einn hóp, er hægt að gera það með eftirfarandi skipun:
ansible-playbook -i inventory ./playbook.yml -l "staging"
Annar valkostur er að hafa aðskildar birgðaskrár fyrir mismunandi hópa. Eða þú getur sameinað þessar tvær aðferðir ef þú ert með marga mismunandi gestgjafa.
Við skulum fara aftur í að setja upp nginx. Eftir að hafa afritað stillingarskrárnar þurfum við að búa til tákntengil í sitest_enabled til my_app.conf frá sites_available. Og endurræstu 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
Allt er einfalt hér - aftur anible einingar með nokkuð staðlaða setningafræði. En það er eitt atriði. Það þýðir ekkert að endurræsa nginx í hvert skipti. Hefur þú tekið eftir því að við skrifum ekki skipanir eins og: „gerið þetta svona“, setningafræðin lítur meira út eins og „þetta ætti að hafa þetta ástand“. Og oftast er þetta nákvæmlega hvernig ansible virkar. Ef hópurinn er þegar til, eða kerfispakkinn er þegar uppsettur, þá mun ansible athuga þetta og sleppa verkefninu. Einnig verða skrár ekki afritaðar ef þær passa algjörlega við það sem þegar er á þjóninum. Við getum nýtt okkur þetta og endurræst nginx aðeins ef stillingarskránum hefur verið breytt. Það er tilskipun um skráningu um þetta:
# 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
Ef ein af stillingarskrám breytist verður afrit af því og breytan skráð restart_nginx
. Og aðeins ef þessi breyta hefur verið skráð verður þjónustan endurræst.
Og auðvitað þarftu að bæta nginx hlutverkinu við aðalleikbókina.
Setja upp postgresql
Við þurfum að virkja postgresql með því að nota systemd á sama hátt og við gerðum með nginx, og einnig búa til notanda sem við munum nota til að fá aðgang að gagnagrunninum og gagnagrunninum sjálfum.
Búum til hlutverk /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 }}"
Ég mun ekki lýsa því hvernig á að bæta breytum við birgðahaldið, þetta hefur þegar verið gert margoft, sem og setningafræði postgresql_db og postgresql_user eininganna. Frekari upplýsingar er að finna í skjölunum. Áhugaverðasta tilskipunin hér er become_user: postgres
. Staðreyndin er sú að sjálfgefið er að aðeins postgres notandinn hefur aðgang að postgresql gagnagrunninum og aðeins á staðnum. Þessi tilskipun gerir okkur kleift að framkvæma skipanir fyrir hönd þessa notanda (ef við höfum aðgang, auðvitað).
Einnig gætirðu þurft að bæta línu við pg_hba.conf til að leyfa nýjum notanda aðgang að gagnagrunninum. Þetta er hægt að gera á sama hátt og við breyttum nginx stillingunni.
Og auðvitað þarftu að bæta postgresql hlutverkinu við aðalleikbókina.
Að setja upp ruby í gegnum rbenv
Ansible er ekki með einingar til að vinna með rbenv, en það er sett upp með því að klóna git repository. Þess vegna verður þetta vandamál hið óstöðluðusta. Búum til hlutverk fyrir hana /ansible/roles/ruby_rbenv/main.yml
og við skulum byrja að fylla það út:
# Install rbenv and ruby
- name: Install rbenv
become_user: "{{ user }}"
git: repo=https://github.com/rbenv/rbenv.git dest=~/.rbenv
Við notum aftur orðið_notandi tilskipunina til að vinna undir notandanum sem við bjuggum til í þessum tilgangi. Þar sem rbenv er sett upp í heimaskránni sinni, en ekki á heimsvísu. Og við notum líka git eininguna til að klóna geymsluna, tilgreina endurhverfu og dest.
Næst þurfum við að skrá rbenv init í bashrc og bæta rbenv við PATH þar. Fyrir þetta höfum við lineinfile eininguna:
- 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 -)"'
Þá þarftu að setja upp ruby_build:
- name: Install ruby-build
become_user: "{{ user }}"
git: repo=https://github.com/rbenv/ruby-build.git dest=~/.rbenv/plugins/ruby-build
Og að lokum settu upp Ruby. Þetta er gert í gegnum rbenv, það er einfaldlega með bash skipuninni:
- name: Install ruby
become_user: "{{ user }}"
shell: |
export PATH="${HOME}/.rbenv/bin:${PATH}"
eval "$(rbenv init -)"
rbenv install {{ ruby_version }}
args:
executable: /bin/bash
Við segjum hvaða skipun á að framkvæma og með hvaða. Hins vegar, hér rekumst við á þá staðreynd að ansible keyrir ekki kóðann sem er í bashrc áður en skipanirnar eru keyrðar. Þetta þýðir að rbenv verður að vera skilgreint beint í sama handriti.
Næsta vandamál er vegna þess að skel skipunin hefur ekkert ástand frá annible sjónarmiði. Það er, það verður engin sjálfvirk athugun hvort þessi útgáfa af ruby er uppsett eða ekki. Við getum gert þetta sjálf:
- 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
Allt sem er eftir er að setja upp bundler:
- name: Install bundler
become_user: "{{ user }}"
shell: |
export PATH="${HOME}/.rbenv/bin:${PATH}"
eval "$(rbenv init -)"
gem install bundler
Og aftur, bættu hlutverki okkar ruby_rbenv við aðalleikbókina.
Samnýttar skrár.
Almennt séð væri hægt að klára uppsetninguna hér. Næst er allt sem eftir er að keyra capistrano og það mun afrita kóðann sjálfan, búa til nauðsynlegar möppur og ræsa forritið (ef allt er rétt stillt). Hins vegar þarf capistrano oft viðbótar stillingarskrár, svo sem database.yml
eða .env
Hægt er að afrita þau alveg eins og skrár og sniðmát fyrir nginx. Það er aðeins ein næmni. Áður en þú afritar skrár þarftu að búa til möppuskipulag fyrir þær, eitthvað á þessa leið:
# Copy shared files for deploy
- name: Ensure shared dir
become_user: "{{ user }}"
file:
path: "{{ app_path }}/shared/config"
state: directory
við tilgreinum aðeins eina möppu og ansible mun sjálfkrafa búa til foreldri ef þörf krefur.
Ansible Vault
Við höfum þegar rekist á þá staðreynd að breytur geta innihaldið leynileg gögn eins og lykilorð notandans. Ef þú hefur búið til .env
skrá fyrir umsóknina, og database.yml
þá hljóta að vera enn fleiri slík gagnrýnin gögn. Það væri gott að fela þá fyrir hnýsnum augum. Í þessu skyni er það notað
Við skulum búa til skrá fyrir breytur /ansible/vars/all.yml
(hér geturðu búið til mismunandi skrár fyrir mismunandi hópa hýsingar, alveg eins og í birgðaskránni: production.yml, staging.yml, osfrv).
Allar breytur sem þarf að dulkóða verður að flytja í þessa skrá með því að nota staðlaða yml setningafræði:
# 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
Eftir það er hægt að dulkóða þessa skrá með skipuninni:
ansible-vault encrypt ./vars/all.yml
Við dulkóðun þarftu náttúrulega að setja lykilorð fyrir afkóðun. Þú getur séð hvað verður inni í skránni eftir að þú hefur hringt í þessa skipun.
Með ansible-vault decrypt
skrána er hægt að afkóða, breyta og síðan dulkóða aftur.
Þú þarft ekki að afkóða skrána til að virka. Þú geymir það dulkóðað og keyrir leikbókina með rökunum --ask-vault-pass
. Ansible mun biðja um lykilorðið, sækja breyturnar og framkvæma verkefnin. Öll gögn verða áfram dulkóðuð.
Heildarskipunin fyrir nokkra hópa gestgjafa og hugsanlega hvelfingu mun líta einhvern veginn svona út:
ansible-playbook -i inventory ./playbook.yml -l "staging" --ask-vault-pass
En ég mun ekki gefa þér allan texta leikbóka og hlutverka, skrifaðu það sjálfur. Vegna þess að ansible er svona - ef þú skilur ekki hvað þarf að gera, þá mun það ekki gera það fyrir þig.
Heimild: www.habr.com