O chionn ghoirid dh'fheumadh mi grunn leabhraichean-cluiche Ansible a sgrìobhadh gus am frithealaiche ullachadh airson tagradh Rails a chleachdadh. Agus, gu h-iongantach, cha do lorg mi leabhar-làimhe ceum air cheum sìmplidh. Cha robh mi airson lethbhreac a dhèanamh de leabhar-cluiche cuideigin eile gun a bhith a’ tuigsinn dè bha a’ tachairt, agus aig a’ cheann thall b’ fheudar dhomh na sgrìobhainnean a leughadh, a’ cruinneachadh a h-uile càil mi-fhìn. Is dòcha gun urrainn dhomh cuideigin a chuideachadh gus am pròiseas seo a luathachadh le cuideachadh bhon artaigil seo.
Is e a’ chiad rud a thuigeas tu gu bheil ansible a’ toirt dhut eadar-aghaidh goireasach gus liosta ro-mhìnichte de ghnìomhan a dhèanamh air frithealaiche (ean) iomallach tro SSH. Chan eil draoidheachd an seo, chan urrainn dhut plugan a chuir a-steach agus cleachdadh neoni ùine downt den tagradh agad le docker, sgrùdadh agus rudan math eile a-mach às a’ bhogsa. Gus leabhar-cluiche a sgrìobhadh, feumaidh fios a bhith agad dè dìreach a tha thu airson a dhèanamh agus ciamar a nì thu e. Sin as coireach nach eil mi riaraichte le leabhraichean-cluiche deiseil bho GitHub, no artaigilean mar: “Dèan lethbhreac agus ruith, obraichidh e.”
Dè a dh ’fheumas sinn?
Mar a thuirt mi mu thràth, gus leabhar-cluiche a sgrìobhadh feumaidh fios a bhith agad dè a tha thu airson a dhèanamh agus ciamar a nì thu e. Feuch an co-dhùin sinn dè a dh'fheumas sinn. Airson tagradh Rails bidh feum againn air grunn phasgan siostam: nginx, postgresql (redis, msaa). A bharrachd air an sin, feumaidh sinn dreach sònraichte de ruby. Tha e nas fheàrr a stàladh tro rbenv (rvm, asdf ...). Is e droch bheachd a th’ ann a bhith a’ ruith seo gu lèir mar neach-cleachdaidh freumh, agus mar sin feumaidh tu neach-cleachdaidh air leth a chruthachadh agus na còraichean aige a rèiteachadh. Às deidh seo, feumaidh tu an còd againn a luchdachadh suas chun t-seirbheisiche, dèan lethbhreac de na configs airson nginx, postgres, msaa agus tòiseachadh air na seirbheisean sin uile.
Mar thoradh air an sin, tha an sreath de ghnìomhan mar a leanas:
- Log a-steach mar root
- stàladh pacaidean siostam
- cruthaich cleachdaiche ùr, rèitich còraichean, iuchair ssh
- rèiteachadh pasganan siostam (nginx msaa) agus ruith iad
- Bidh sinn a’ cruthachadh neach-cleachdaidh san stòr-dàta (faodaidh tu stòr-dàta a chruthachadh sa bhad)
- Log a-steach mar neach-cleachdaidh ùr
- Stàlaich rbenv agus ruby
- A stàladh a ' chlò-bhualadair
- A luchdadh a-nuas an aplacaid code
- A 'cur air bhog am frithealaiche Puma
A bharrachd air an sin, faodar na h-ìrean mu dheireadh a dhèanamh le bhith a’ cleachdadh capistrano, co-dhiù a-mach às a’ bhogsa faodaidh e còd a chopaigeadh a-steach do chlàran fuasglaidh, an naidheachd atharrachadh le symlink nuair a thèid a chleachdadh gu soirbheachail, lethbhreac a dhèanamh de configs bho eòlaire co-roinnte, ath-thòiseachadh puma, msaa. Faodar seo uile a dhèanamh a’ cleachdadh Ansible, ach carson?
Structar faidhle
Tha teann aig Ansible
Leabhar-cluiche sìmplidh
Is e faidhle yml a th’ ann an Playbook a tha, a’ cleachdadh co-chòrdadh sònraichte, a’ mìneachadh dè bu chòir do Ansible a dhèanamh agus ciamar. Cruthaichidh sinn a’ chiad leabhar-cluiche nach dèan dad:
---
- name: Simple playbook
hosts: all
An seo tha sinn dìreach ag ràdh gur e an leabhar-cluiche againn a chanar ris Simple Playbook
agus gu'm bu chòir a th' ann a bhi air a chur gu bàs airson nan uile shluagh. Is urrainn dhuinn a shàbhaladh ann an eòlaire / ansible leis an ainm playbook.yml
agus feuch ri ruith:
ansible-playbook ./playbook.yml
PLAY [Simple Playbook] ************************************************************************************************************************************
skipping: no hosts matched
Tha Ansible ag ràdh nach eil e eòlach air luchd-aoigheachd sam bith a tha a rèir an liosta gu lèir. Feumaidh iad a bhith air an liostadh ann an sònraichte
Cruthaichidh sinn e san aon eòlaire iomchaidh:
123.123.123.123
Seo mar a bhios sinn dìreach a’ sònrachadh an aoigh (gu h-iomchaidh aoigheachd an VPS againn airson deuchainn, no faodaidh tu localhost a chlàradh) agus a shàbhaladh fon ainm inventory
.
'S urrainn dhut feuchainn ri ruith le faidhle tasgaidh:
ansible-playbook ./playbook.yml -i inventory
PLAY [Simple Playbook] ************************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************************
PLAY RECAP ************************************************************************************************************************************
Ma tha cothrom ssh agad air an òstair ainmichte, ceangailidh agus cruinnichidh ssh fiosrachadh mun t-siostam iomallach. (TASK bunaiteach [Cruinneachadh Fiosrachaidh]) às deidh sin bheir e seachad aithisg ghoirid air a’ chur gu bàs (PLAY RECAP).
Gu gnàthach, bidh an ceangal a’ cleachdadh an ainm-cleachdaidh fon bheil thu air logadh a-steach don t-siostam. Is coltaiche nach bi e air an neach-aoigheachd. Anns an fhaidhle leabhar-cluiche, faodaidh tu sònrachadh dè an cleachdaiche a chleachdas tu airson ceangal a’ cleachdadh an stiùireadh remote_user. Cuideachd, gu tric is dòcha nach bi feum agad air fiosrachadh mu shiostam iomallach dhut agus cha bu chòir dhut ùine a chaitheamh ga chruinneachadh. Faodar an obair seo a chur à comas cuideachd:
---
- name: Simple playbook
hosts: all
remote_user: root
become: true
gather_facts: no
Feuch ris an leabhar-cluiche a ruith a-rithist agus dèan cinnteach gu bheil an ceangal ag obair. (Ma shònraich thu an cleachdaiche freumha, feumaidh tu cuideachd an t-iomradh a tha gu bhith: fìor a shònrachadh gus còraichean àrdaichte fhaighinn. Mar a tha sgrìobhte sna sgrìobhainnean: become set to ‘true’/’yes’ to activate privilege escalation.
ged nach eil e buileach soilleir carson).
Is dòcha gum faigh thu mearachd air adhbhrachadh leis nach urrainn dhut an t-eadar-theangair Python a dhearbhadh, faodaidh tu a shònrachadh le làimh:
ansible_python_interpreter: /usr/bin/python3
Gheibh thu a-mach càite a bheil python agad leis an àithne whereis python
.
Stàladh pacaidean siostam
Tha cuairteachadh àbhaisteach Ansible a’ toirt a-steach mòran mhodalan airson a bhith ag obair le diofar phasganan siostam, agus mar sin chan fheum sinn sgriobtaichean bash a sgrìobhadh airson adhbhar sam bith. A-nis feumaidh sinn aon de na modalan sin gus an siostam ùrachadh agus pacaidean siostam a chuir a-steach. Tha Ubuntu Linux agam air an VPS agam, mar sin airson pacaidean a bhios mi a’ cleachdadh a stàladh apt-get
и
Nach cuir sinn ris an leabhar-cluiche againn leis na ciad ghnìomhan:
---
- 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
Is e gnìomh dìreach an obair a nì Ansible air frithealaichean iomallach. Bheir sinn ainm don ghnìomh gus an urrainn dhuinn sùil a chumail air mar a chaidh a choileanadh sa loga. Agus tha sinn a 'toirt cunntas air, a' cleachdadh co-chòrdadh modal sònraichte, dè a dh'fheumas e a dhèanamh. Anns a 'chùis seo apt: update_cache=yes
- ag ràdh ùrachadh pasganan siostam a’ cleachdadh a’ mhodal iomchaidh. Tha an dàrna àithne beagan nas iom-fhillte. Bidh sinn a’ toirt seachad liosta de phasganan chun mhodal iomchaidh agus ag ràdh gu bheil iad state
bu chòir a bhith present
, is e sin, tha sinn ag ràdh stàlaich na pacaidean sin. San aon dòigh, is urrainn dhuinn innse dhaibh an sguabadh às, no an ùrachadh le bhith dìreach ag atharrachadh state
. Thoir an aire gum feum sinn am pasgan postgresql-contrib, a tha sinn a’ stàladh a-nis airson rèilichean obrachadh le postgresql. A-rithist, feumaidh tu fios a bhith agad agus seo a dhèanamh; ciallach leis fhèin cha dèan seo.
Feuch ris an leabhar-cluiche a ruith a-rithist agus dèan cinnteach gu bheil na pacaidean air an stàladh.
A 'cruthachadh luchd-cleachdaidh ùr.
Gus obrachadh le luchd-cleachdaidh, tha modal aig Ansible cuideachd - cleachdaiche. Nach cuir sinn aon ghnìomh eile ris (chuir mi am falach na pàirtean den leabhar-cluiche a bha aithnichte mar-thà air cùl nam beachdan gus nach dèan sinn leth-bhreac dheth a h-uile turas):
---
- name: Simple playbook
# ...
tasks:
# ...
- name: Add a new user
user:
name: my_user
shell: /bin/bash
password: "{{ 123qweasd | password_hash('sha512') }}"
Bidh sinn a’ cruthachadh cleachdaiche ùr, a’ suidheachadh shell agus facal-faire air a shon. Agus an uairsin bidh grunn dhuilgheadasan againn. Dè ma dh’ fheumas ainmean-cleachdaidh a bhith eadar-dhealaichte airson luchd-aoigheachd eadar-dhealaichte? Agus is e fìor dhroch bheachd a th’ ann am facal-faire a stòradh ann an teacsa soilleir san leabhar-cluiche. An toiseach, leig dhuinn an t-ainm-cleachdaidh agus am facal-faire a chuir ann an caochladairean, agus faisg air deireadh an artaigil seallaidh mi mar a chrioptaicheas tu am facal-faire.
---
- name: Simple playbook
# ...
tasks:
# ...
- name: Add a new user
user:
name: "{{ user }}"
shell: /bin/bash
password: "{{ user_password | password_hash('sha512') }}"
Tha caochladairean air an suidheachadh ann an leabhraichean-cluiche a’ cleachdadh braces lùbach dùbailte.
Seallaidh sinn luachan nan caochladairean anns an fhaidhle tasgaidh:
123.123.123.123
[all:vars]
user=my_user
user_password=123qweasd
Thoir an aire don stiùireadh [all:vars]
- tha e ag ràdh gur e caochladairean (vars) an ath bhloc teacsa agus tha iad buntainneach don h-uile neach-aoigheachd (uile).
Tha an dealbhadh inntinneach cuideachd "{{ user_password | password_hash('sha512') }}"
. Is e an rud nach eil ansible a ’stàladh an neach-cleachdaidh tro user_add
mar gun dèanadh tu e le làimh. Agus bidh e a’ sàbhaladh a h-uile dàta gu dìreach, agus is e sin as coireach gum feum sinn am facal-faire a thionndadh gu hash ro-làimh, agus is e sin a nì an àithne seo.
Nach cuir sinn an cleachdaiche againn ris a’ bhuidheann sudo. Ach, ron seo feumaidh sinn dèanamh cinnteach gu bheil a leithid de bhuidheann ann oir cha dèan duine seo dhuinn:
---
- 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"
Tha a h-uile dad gu math sìmplidh, tha modal buidhne againn cuideachd airson buidhnean a chruthachadh, le co-chòrdadh glè choltach ri apt. Tha e gu leòr an uair sin am buidheann seo a chlàradh dhan chleachdaiche (groups: "sudo"
).
Tha e feumail cuideachd iuchair ssh a chur ris a’ chleachdaiche seo gus an urrainn dhuinn logadh a-steach le bhith ga chleachdadh gun fhacal-faire:
---
- 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
Anns a 'chùis seo, tha an dealbhadh inntinneach "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
- bidh e a’ dèanamh leth-bhreac de shusbaint an fhaidhle id_rsa.pub (faodaidh d’ ainm a bhith eadar-dhealaichte), is e sin, am pàirt phoblach den iuchair ssh agus ga luchdachadh suas gu liosta nan iuchraichean ùghdarraichte airson an neach-cleachdaidh air an fhrithealaiche.
Dreuchdan
Faodar na trì gnìomhan airson cleachdadh a chruthachadh gu furasta an seòrsachadh ann an aon bhuidheann de ghnìomhan, agus bhiodh e na dheagh bheachd am buidheann seo a stòradh air leth bhon phrìomh leabhar-cluiche gus nach fàs e ro mhòr. Airson an adhbhair seo, tha Ansible
A rèir structar an fhaidhle a chaidh a chomharrachadh aig an fhìor thoiseach, feumar dreuchdan a chuir ann an eòlaire dreuchdan fa leth, airson gach dreuchd tha eòlaire air leth leis an aon ainm, taobh a-staigh nan gnìomhan, faidhlichean, teamplaidean, msaa eòlaire
Nach cruthaich sinn structar faidhle: ./ansible/roles/user/tasks/main.yml
(Is e am prìomh fhaidhle am prìomh fhaidhle a thèid a luchdachadh agus a chuir gu bàs nuair a tha àite ceangailte ris an leabhar-cluiche; faodar faidhlichean dreuchd eile a cheangal ris). A-nis faodaidh tu a h-uile gnìomh co-cheangailte ris an neach-cleachdaidh a ghluasad chun fhaidhle seo:
# 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
Anns a’ phrìomh leabhar-cluiche, feumaidh tu sònrachadh gus dreuchd an neach-cleachdaidh a chleachdadh:
---
- 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
Cuideachd, is dòcha gum biodh e ciallach an siostam ùrachadh ro gach gnìomh eile; gus seo a dhèanamh, faodaidh tu am bloc ath-ainmeachadh tasks
anns am bheil iad air am mìneachadh ann an pre_tasks
.
A 'suidheachadh nginx
Bu chòir dhuinn Nginx a chuir a-steach mu thràth; feumaidh sinn a rèiteachadh agus a ruith. Dèanamaid e sa bhad anns an dreuchd. Nach cruthaich sinn structar faidhle:
- ansible
- roles
- nginx
- files
- tasks
- main.yml
- templates
A-nis feumaidh sinn faidhlichean agus teamplaidean. Is e an eadar-dhealachadh eatorra gu bheil ansible a’ dèanamh lethbhreac de na faidhlichean gu dìreach, mar a tha. Agus feumaidh an leudachadh j2 a bhith aig teamplaidean agus faodaidh iad luachan caochlaideach a chleachdadh a’ cleachdadh na h-aon braces lùbach dùbailte.
Leig leinn nginx a thoirt a-steach main.yml
faidhle. Airson seo tha modal systemd againn:
# Copy nginx configs and start it
- name: enable service nginx and start
systemd:
name: nginx
state: started
enabled: yes
An seo chan e a-mhàin gu bheil sinn ag ràdh gum feumar nginx a thòiseachadh (is e sin, bidh sinn ga chuir air bhog), ach bidh sinn ag ràdh sa bhad gum feum e a bhith air a chomasachadh.
A-nis leig leinn lethbhreac a dhèanamh de na faidhlichean rèiteachaidh:
# 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'
Bidh sinn a’ cruthachadh prìomh fhaidhle rèiteachaidh nginx (faodaidh tu a thoirt gu dìreach bhon t-seirbheisiche, no a sgrìobhadh leat fhèin). Agus cuideachd am faidhle rèiteachaidh airson an tagraidh againn anns an eòlaire sites_available (chan eil seo riatanach ach feumail). Anns a 'chiad chùis, bidh sinn a' cleachdadh a 'mhodal lethbhreac gus faidhlichean a chopaigeadh (feumaidh am faidhle a bhith ann /ansible/roles/nginx/files/nginx.conf
). Anns an dàrna fear, bidh sinn a 'dèanamh lethbhreac den teamplaid, a' cur an àite luachan nan caochladairean. Bu chòir an teamplaid a bhith a-staigh /ansible/roles/nginx/templates/my_app.j2
). Agus is dòcha gum bi e a’ coimhead rudeigin mar seo:
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 }};
....
}
Thoir aire do na cuir a-steach {{ app_name }}
, {{ app_path }}
, {{ server_name }}
, {{ inventory_hostname }}
— is iad sin na caochladairean uile a chuireas na luachan Ansible an àite an teamplaid mus dèan iad leth-bhreac. Tha seo feumail ma chleachdas tu leabhar-cluiche airson diofar bhuidhnean de luchd-aoigheachd. Mar eisimpleir, is urrainn dhuinn ar faidhle tasgaidh a chur ris:
[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
Ma chuireas sinn an leabhar-cluiche againn air bhog a-nis, nì e na gnìomhan ainmichte airson an dà aoigh. Ach aig an aon àm, airson aoigheachd àrd-ùrlar, bidh na caochladairean eadar-dhealaichte bhon fheadhainn riochdachaidh, agus chan ann a-mhàin ann an dreuchdan agus leabhraichean-cluiche, ach cuideachd ann an configs nginx. {{ inventory_hostname }}
chan fheumar a shònrachadh anns an fhaidhle tasgaidh - seo
Ma tha thu airson faidhle clàr-seilbhe a bhith agad airson grunn luchd-aoigheachd, ach dìreach ruith airson aon bhuidheann, faodar seo a dhèanamh leis an òrdugh a leanas:
ansible-playbook -i inventory ./playbook.yml -l "staging"
Is e roghainn eile faidhlichean tasgaidh fa leth a bhith agad airson diofar bhuidhnean. No faodaidh tu an dà dhòigh-obrach a chur còmhla ma tha mòran luchd-aoigheachd eadar-dhealaichte agad.
Rachamaid air ais gu stèidheachadh nginx. Às deidh dhuinn na faidhlichean rèiteachaidh a chopaigeadh, feumaidh sinn symlink a chruthachadh ann an sitest_enabled gu my_app.conf bho sites_available. Agus ath-thòisich 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
Tha a h-uile dad sìmplidh an seo - a-rithist modalan so-ruigsinneach le co-chòrdadh àbhaisteach. Ach tha aon phuing ann. Chan eil feum air nginx ath-thòiseachadh a h-uile uair. An do mhothaich thu nach eil sinn a’ sgrìobhadh òrdughan mar: “dèan seo mar seo”, tha an co-chòrdadh a’ coimhead nas coltaiche ri “bu chòir an stàit seo a bhith aige”. Agus mar as trice is e seo dìreach mar a tha so-ruigsinneach ag obair. Ma tha am buidheann ann mu thràth, no ma tha pasgan an t-siostaim air a chuir a-steach mu thràth, nì sin sgrùdadh airson seo agus leumaidh e air a’ ghnìomh. Cuideachd, cha tèid faidhlichean a chopaigeadh ma tha iad gu tur a rèir na tha air an fhrithealaiche mu thràth. Faodaidh sinn brath a ghabhail air seo agus nginx ath-thòiseachadh a-mhàin ma chaidh na faidhlichean rèiteachaidh atharrachadh. Tha stiùireadh clàraidh ann airson seo:
# 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
Ma dh'atharraicheas fear de na faidhlichean rèiteachaidh, thèid lethbhreac a dhèanamh agus thèid an caochladair a chlàradh restart_nginx
. Agus dìreach ma tha an caochladair seo air a chlàradh a thèid an t-seirbheis ath-thòiseachadh.
Agus, gu dearbh, feumaidh tu àite nginx a chur ris a’ phrìomh leabhar-cluiche.
A 'suidheachadh postgresql
Feumaidh sinn postgresql a chomasachadh le bhith a’ cleachdadh systemd san aon dòigh ’s a rinn sinn le nginx, agus cuideachd cleachdaiche a chruthachadh a chleachdas sinn gus faighinn chun stòr-dàta agus an stòr-dàta fhèin.
Cruthaichidh sinn àite /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 }}"
Cha toir mi cunntas air mar a chuireas mi caochladairean ri clàr-seilbhe, chaidh seo a dhèanamh iomadh uair mu thràth, a bharrachd air co-chòrdadh nam modalan postgresql_db agus postgresql_user. Gheibhear tuilleadh fiosrachaidh anns na sgrìobhainnean. Tha an stiùireadh as inntinniche an seo become_user: postgres
. Is e an fhìrinn nach eil cothrom aig ach neach-cleachdaidh postgres air stòr-dàta postgresql agus gu h-ionadail a-mhàin. Leigidh an stiùireadh seo leinn òrdughan a chuir an gnìomh às leth a’ chleachdaiche seo (ma tha cothrom againn, gu dearbh).
Cuideachd, is dòcha gum feum thu loidhne a chuir ri pg_hba.conf gus leigeil le neach-cleachdaidh ùr faighinn chun stòr-dàta. Faodar seo a dhèanamh san aon dòigh 's a dh'atharraich sinn an config nginx.
Agus gu dearbh, feumaidh tu an dreuchd postgresql a chur ris a’ phrìomh leabhar cluiche.
A 'stàladh ruby tro rbenv
Chan eil modalan aig Ansible airson a bhith ag obair le rbenv, ach tha e air a chuir a-steach le bhith a’ clonadh stòr git. Mar sin, bidh an duilgheadas seo gu bhith mar an tè as neo-àbhaisteach. Cruthaichidh sinn àite dhi /ansible/roles/ruby_rbenv/main.yml
agus tòisichidh sinn ga lìonadh:
# Install rbenv and ruby
- name: Install rbenv
become_user: "{{ user }}"
git: repo=https://github.com/rbenv/rbenv.git dest=~/.rbenv
Bidh sinn a-rithist a’ cleachdadh an stiùireadh become_user gus obrachadh fon neach-cleachdaidh a chruthaich sinn airson na h-adhbharan sin. Leis gu bheil rbenv air a chuir a-steach san eòlaire dachaigh aige, agus chan ann air feadh na cruinne. Agus bidh sinn cuideachd a’ cleachdadh a’ mhodal git gus an stòr a chlònadh, a’ sònrachadh repo agus dest.
An ath rud, feumaidh sinn rbenv init a chlàradh ann am bashrc agus rbenv a chuir ri PATH an sin. Airson seo tha am modal loidhne-loidhne againn:
- 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 -)"'
An uairsin feumaidh tu ruby_build a stàladh:
- name: Install ruby-build
become_user: "{{ user }}"
git: repo=https://github.com/rbenv/ruby-build.git dest=~/.rbenv/plugins/ruby-build
Agus mu dheireadh stàlaich ruby. Tha seo air a dhèanamh tro rbenv, is e sin, dìreach leis an àithne 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
Tha sinn ag ràdh dè an àithne a bu chòir a chur an gnìomh agus dè leis. Ach, an seo tha sinn a’ tighinn tarsainn air nach eil ansible a’ ruith a’ chòd a tha ann am bashrc mus ruith thu na h-òrdughan. Tha seo a’ ciallachadh gum feum rbenv a bhith air a mhìneachadh gu dìreach san aon sgriobt.
Tha an ath dhuilgheadas mar thoradh air nach eil staid sam bith aig an àithne shligean bho shealladh iomchaidh. Is e sin, cha bhith sgrùdadh fèin-ghluasadach ann a bheil an dreach seo de ruby air a chuir a-steach no nach eil. Faodaidh sinn seo a dhèanamh sinn fhìn:
- 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
Chan eil air fhàgail ach bundler a stàladh:
- name: Install bundler
become_user: "{{ user }}"
shell: |
export PATH="${HOME}/.rbenv/bin:${PATH}"
eval "$(rbenv init -)"
gem install bundler
Agus a-rithist, cuir ar dreuchd ruby_rbenv ris a’ phrìomh leabhar-cluiche.
Faidhlichean co-roinnte.
San fharsaingeachd, dh’ fhaodadh an rèiteachadh a bhith air a chrìochnachadh an seo. An ath rud, chan eil air fhàgail ach capistrano a ruith agus nì e leth-bhreac den chòd fhèin, cruthaichidh e na clàran riatanach agus cuiridh e an tagradh air bhog (ma tha a h-uile càil air a rèiteachadh gu ceart). Ach, gu tric feumaidh capistrano faidhlichean rèiteachaidh a bharrachd, leithid database.yml
no .env
Faodar an lethbhreacadh dìreach mar fhaidhlichean agus teamplaidean airson nginx. Chan eil ann ach aon mhìorbhail. Mus dèan thu lethbhreac de fhaidhlichean, feumaidh tu structar eòlaire a chruthachadh dhaibh, rudeigin mar seo:
# Copy shared files for deploy
- name: Ensure shared dir
become_user: "{{ user }}"
file:
path: "{{ app_path }}/shared/config"
state: directory
cha shònraich sinn ach aon eòlaire agus cruthaichidh sinn feadhainn phàrant gu fèin-obrachail ma bhios sin riatanach.
Cruinn-thalmhainn iomchaidh
Tha sinn mu thràth air faighinn a-mach gum faod dàta dìomhair a bhith ann an caochladairean leithid facal-faire an neach-cleachdaidh. Ma tha thu air a chruthachadh .env
faidhle airson an tagraidh, agus database.yml
feumaidh eadhon barrachd dàta deatamach a bhith ann. Bhiodh e math am falach bho shùilean dòrainneach. Airson an adhbhair seo tha e air a chleachdadh
Nach cruthaich sinn faidhle airson caochladairean /ansible/vars/all.yml
(an seo faodaidh tu diofar fhaidhlichean a chruthachadh airson diofar bhuidhnean de luchd-aoigheachd, dìreach mar anns an fhaidhle tasgaidh: production.yml, staging.yml, msaa).
Feumar a h-uile caochladair a dh'fheumar a chrioptachadh a ghluasad chun an fhaidhle seo a' cleachdadh co-chòrdadh àbhaisteach 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
Às deidh sin faodar am faidhle seo a chrioptachadh leis an àithne:
ansible-vault encrypt ./vars/all.yml
Gu nàdarra, nuair a bhios tu a’ crioptachadh, feumaidh tu facal-faire a shuidheachadh airson dì-chrioptachadh. Chì thu dè a bhios am broinn an fhaidhle às deidh dhut an àithne seo a ghairm.
Le cuideachadh bho ansible-vault decrypt
faodar am faidhle a dhì-chrioptachadh, atharrachadh agus an uairsin a chrioptachadh a-rithist.
Chan fheum thu am faidhle a dhì-chrioptachadh gus obrachadh. Bidh thu ga stòradh air a chrioptachadh agus a’ ruith an leabhar-cluiche leis an argamaid --ask-vault-pass
. Iarraidh Ansible am facal-faire, gheibh e air ais na caochladairean, agus cuiridh e an gnìomh na gnìomhan. Bidh an dàta gu lèir fhathast air a chrioptachadh.
Bidh an àithne iomlan airson grunn bhuidhnean de luchd-aoigheachd agus seilear ansible a’ coimhead rudeigin mar seo:
ansible-playbook -i inventory ./playbook.yml -l "staging" --ask-vault-pass
Ach cha toir mi dhut an teacsa iomlan de leabhraichean-cluiche agus dreuchdan, sgrìobh thu fhèin e. Leis gu bheil ansible mar sin - mura h-eil thu a 'tuigsinn dè a dh'fheumar a dhèanamh, cha dèan e sin dhut.
Source: www.habr.com