Ní fada ó shin b’éigean dom roinnt leabhar súgartha Ansible a scríobh chun an freastalaí a ullmhú chun feidhmchlár Rails a imscaradh. Agus, ionadh, níor aimsigh mé lámhleabhar simplí céim ar chéim. Ní raibh mé ag iarraidh leabhar súgartha duine eile a chóipeáil gan tuiscint a fháil ar cad a bhí ag tarlú, agus sa deireadh bhí orm na doiciméid a léamh, ag bailiú gach rud mé féin. B’fhéidir gur féidir liom cabhrú le duine an próiseas seo a bhrostú le cabhair ón alt seo.
Is é an chéad rud atá le tuiscint ná go dtugann ansible comhéadan áisiúil duit chun liosta réamhshainithe gníomhartha a dhéanamh ar fhreastalaí cianda trí SSH. Níl aon draíocht anseo, ní féidir leat breiseán a shuiteáil agus imscaradh náid downtime a fháil ar d’iarratas le docóir, monatóireacht agus earraí eile as an mbosca. Chun leabhar súgartha a scríobh, ní mór go mbeadh a fhios agat cad go díreach atá tú ag iarraidh a dhéanamh agus conas é a dhéanamh. Sin an fáth nach bhfuil mé sásta le leabhair súgartha réamhdhéanta ó GitHub, nó le hailt mar: “Cóipeáil agus rith, oibreoidh sé.”
Cad a theastaíonn uainn?
Mar a dúirt mé cheana, chun leabhar súgartha a scríobh ní mór duit fios a bheith agat cad ba mhaith leat a dhéanamh agus conas é a dhéanamh. Déanaimis cinneadh cad a theastaíonn uainn. Le haghaidh feidhmchlár Rails beidh roinnt pacáistí córais ag teastáil uainn: nginx, postgresql (redis, etc). Ina theannta sin, ní mór dúinn leagan ar leith de ruby. Is fearr é a shuiteáil trí rbenv (rvm, asdf ...). Is droch-smaoineamh i gcónaí é seo go léir a rith mar úsáideoir fréimhe, mar sin ní mór duit úsáideoir ar leith a chruthú agus a chearta a chumrú. Tar éis seo, ní mór duit ár gcód a uaslódáil chuig an bhfreastalaí, cóipeáil na cumraíochtaí do nginx, postgres, srl agus tús a chur leis na seirbhísí seo go léir.
Mar thoradh air sin, tá seicheamh na ngníomhartha mar seo a leanas:
- Logáil isteach mar fhréamh
- shuiteáil pacáistí córais
- úsáideoir nua a chruthú, cearta a chumrú, eochair ssh
- cumraigh pacáistí córais (nginx srl) agus rith iad
- Cruthaímid úsáideoir sa bhunachar sonraí (is féidir leat bunachar sonraí a chruthú láithreach)
- Logáil isteach mar úsáideoir nua
- Suiteáil rbenv agus ruby
- Suiteáil an bundler
- Íoslódáil an cód iarratais
- Ag seoladh an fhreastalaí Puma
Ina theannta sin, is féidir na céimeanna deiridh a dhéanamh ag baint úsáide as capistrano, ar a laghad as an mbosca is féidir leis an gcód a chóipeáil isteach in eolairí scaoilte, an scaoileadh a athrú le nasc simplí ar imscaradh rathúil, configs a chóipeáil ó eolaire comhroinnte, púma a atosú, etc. Is féidir é seo go léir a dhéanamh ag baint úsáide as Ansible, ach cén fáth?
Struchtúr comhaid
Ansible Tá dian
Leabhar Súgartha Simplí
Is comhad yml é Playbook a chuireann síos, ag baint úsáide as comhréir speisialta, ar cad ba cheart do Ansible a dhéanamh agus conas. Cruthaímid an chéad leabhar súgartha nach ndéanann faic:
---
- name: Simple playbook
hosts: all
Anseo deirimid go simplí go dtugtar ár playbook Simple Playbook
agus gur chóir a bhfuil ann a fhorghníomhú do gach óstaigh. Is féidir linn é a shábháil san eolaire / insible leis an ainm playbook.yml
agus déan iarracht rith:
ansible-playbook ./playbook.yml
PLAY [Simple Playbook] ************************************************************************************************************************************
skipping: no hosts matched
Deir Ansible nach bhfuil aithne aige ar óstach ar bith a mheaitseálann an liosta iomlán. Caithfidh siad a bheith liostaithe i speisialta
Cruthaimis é sa chomhadlann insamhail chéanna:
123.123.123.123
Seo mar a shonraimid go simplí an t-óstach (go hidéalach óstach ár VPS le haghaidh tástála, nó is féidir leat localhost a chlárú) agus é a shábháil faoin ainm inventory
.
Is féidir leat triail a bhaint as asible le comhad fardail:
ansible-playbook ./playbook.yml -i inventory
PLAY [Simple Playbook] ************************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************************
PLAY RECAP ************************************************************************************************************************************
Má tá rochtain ssh agat ar an ósta sonraithe, ansin déanfaidh ansible faisnéis a nascadh agus a bhailiú faoin gcianchóras. (TASC réamhshocraithe [Fíricí a Bhailiú]) ina dhiaidh sin tabharfaidh sé tuairisc ghairid ar an gcur i gcrích (ATHCHÓIRIÚ IMIRCE).
De réir réamhshocraithe, úsáideann an nasc an t-ainm úsáideora faoina bhfuil tú logáilte isteach sa chóras. Is dócha nach mbeidh sé ar an ósta. Sa chomhad playbook, is féidir leat a shonrú cén úsáideoir a úsáid chun nascadh ag baint úsáide as an treoir remote_user. Chomh maith leis sin, is minic nach mbíonn gá agat le faisnéis faoi chianchóras agus níor cheart duit am a chur amú á bhailiú. Is féidir an tasc seo a dhíchumasú freisin:
---
- name: Simple playbook
hosts: all
remote_user: root
become: true
gather_facts: no
Bain triail as an leabhar súgartha a rith arís agus cinntigh go bhfuil an nasc ag obair. (Má shonraigh tú an t-úsáideoir fréimhe, ní mór duit freisin an treoir éirí: a shonrú chun cearta ardaithe a fháil. Mar atá scríofa sa doiciméadú: become set to ‘true’/’yes’ to activate privilege escalation.
cé nach bhfuil sé soiléir go hiomlán cén fáth).
B'fhéidir go bhfaighidh tú earráid de bharr nach féidir an t-ateangaire Python a chinneadh, ansin is féidir leat é a shonrú de láimh:
ansible_python_interpreter: /usr/bin/python3
Is féidir leat a fháil amach cá bhfuil python agat leis an ordú whereis python
.
Suiteáil pacáistí córais
Cuimsíonn dáileadh caighdeánach Ansible go leor modúil chun oibriú le pacáistí córais éagsúla, mar sin ní gá dúinn scripteanna bash a scríobh ar chúis ar bith. Anois ní mór dúinn ceann de na modúil seo chun an córas a nuashonrú agus pacáistí córais a shuiteáil. Tá Ubuntu Linux agam ar mo VPS, mar sin chun pacáistí a úsáidim a shuiteáil apt-get
и
Déanaimis ár leabhar súgartha a fhorlíonadh leis na chéad tascanna:
---
- 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 é an tasc go díreach an tasc a dhéanfaidh Ansible ar fhreastalaithe cianda. Tugaimid ainm don tasc ionas gur féidir linn a fhorghníomhú a rianú sa loga. Agus déanaimid cur síos, ag baint úsáide as comhréir modúl ar leith, cad is gá dó a dhéanamh. Sa chás seo apt: update_cache=yes
- deir pacáistí córais a nuashonrú ag baint úsáide as an modúl oiriúnach. Tá an dara ordú beagán níos casta. Cuirimid liosta de na pacáistí ar aghaidh chuig an modúl oiriúnach agus deirimid go bhfuil siad state
chóir bheith present
, is é sin, deirimid na pacáistí seo a shuiteáil. Ar an mbealach céanna, is féidir linn a rá leo iad a scriosadh, nó iad a nuashonrú ach iad a athrú state
. Tabhair faoi deara le do thoil go bhfuil an pacáiste postgresql-contrib ag teastáil uainn le go n-oibreoidh ráillí le postgresql, atá á shuiteáil againn anois. Arís, ní mór duit fios a bheith agat agus é seo a dhéanamh;
Bain triail as an leabhar súgartha a rith arís agus seiceáil go bhfuil na pacáistí suiteáilte.
Úsáideoirí nua a chruthú.
Chun oibriú le húsáideoirí, tá modúl ag Ansible freisin - úsáideoir. Cuirimis tasc amháin eile leis (rinne mé na codanna atá aitheanta cheana féin den leabhar súgartha a chur i bhfolach taobh thiar de na tuairimí ionas nach ndéanfaí é a chóipeáil go hiomlán gach uair):
---
- name: Simple playbook
# ...
tasks:
# ...
- name: Add a new user
user:
name: my_user
shell: /bin/bash
password: "{{ 123qweasd | password_hash('sha512') }}"
Cruthaímid úsáideoir nua, socraímid shell agus pasfhocal dó. Agus ansin ritheann muid isteach roinnt fadhbanna. Cad a tharlóidh má theastaíonn ó ainmneacha úsáideoirí a bheith difriúil le haghaidh óstaigh éagsúla? Agus is droch-smaoineamh é an focal faire a stóráil i dtéacs soiléir sa leabhar súgartha. Ar dtús, cuirimis an t-ainm úsáideora agus an focal faire in athróga, agus i dtreo dheireadh an ailt taispeánfaimid conas an focal faire a chriptiú.
---
- name: Simple playbook
# ...
tasks:
# ...
- name: Add a new user
user:
name: "{{ user }}"
shell: /bin/bash
password: "{{ user_password | password_hash('sha512') }}"
Socraítear athróga i leabhair súgartha agus úsáid á baint as braces cuartha dúbailte.
Cuirfimid luachanna na n-athróg in iúl sa chomhad fardail:
123.123.123.123
[all:vars]
user=my_user
user_password=123qweasd
Tabhair faoi deara an treoir [all:vars]
- deir sé gurb é an chéad bhloc eile téacs ná athróga (vars) agus go bhfuil siad infheidhme maidir le gach óstaigh (gach duine).
Tá an dearadh suimiúil freisin "{{ user_password | password_hash('sha512') }}"
. Is é an rud nach bhfuil ansible shuiteáil an t-úsáideoir via user_add
mar a dhéanfá de láimh é. Agus sábhálann sé na sonraí go léir go díreach, agus is é sin an fáth nach mór dúinn an focal faire a thiontú go hash roimh ré, agus is é sin a dhéanann an t-ordú seo.
Cuirimis ár n-úsáideoir leis an ngrúpa sudo. Roimhe seo, áfach, caithfimid a chinntiú go bhfuil a leithéid de ghrúpa ann mar ní dhéanfaidh aon duine é seo dúinn:
---
- 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"
Tá gach rud simplí go leor, tá modúl grúpa againn freisin chun grúpaí a chruthú, le comhréir an-chosúil le apt. Ansin is leor an grúpa seo a chlárú don úsáideoir (groups: "sudo"
).
Tá sé úsáideach freisin eochair ssh a chur leis an úsáideoir seo ionas gur féidir linn logáil isteach agus é á úsáid gan pasfhocal:
---
- 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
Sa chás seo, tá an dearadh suimiúil "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
— cóipeann sé inneachar an chomhaid id_rsa.pub (d’fhéadfadh go mbeadh d’ainm difriúil), is é sin, an chuid phoiblí den eochair ssh agus uaslódálann sé é chuig liosta na n-eochracha údaraithe don úsáideoir ar an bhfreastalaí.
Rólanna
Is féidir na trí thasc ar fad le húsáid a chruthú a rangú go héasca i ngrúpa amháin tascanna, agus b’fhiú an grúpa seo a stóráil ar leithligh ón bpríomhleabhar súgartha ionas nach bhfásann sé ró-mhór. Chun na críche sin, tá Ansible
De réir an struchtúir comhaid a shonraítear ag an tús, ní mór róil a chur in eolaire róil ar leith, le haghaidh gach ról tá eolaire ar leith leis an ainm céanna, taobh istigh den eolaire tascanna, comhaid, teimpléid, srl.
Cruthaimis struchtúr comhaid: ./ansible/roles/user/tasks/main.yml
(Is é an príomhchomhad an príomhchomhad a luchtófar agus a fhorghníomhófar nuair a bheidh ról ceangailte leis an leabhar súgartha; is féidir róilchomhaid eile a nascadh leis). Anois is féidir leat gach tasc a bhaineann leis an úsáideoir a aistriú chuig an gcomhad 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
Sa phríomhleabhar súgartha, ní mór duit a shonrú chun ról an úsáideora a úsáid:
---
- 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
Chomh maith leis sin, b'fhéidir go mbeadh ciall leis an gcóras a nuashonrú roimh gach tasc eile; chun é seo a dhéanamh, is féidir leat an bloc a athainmniú tasks
ina bhfuil siad sainithe i pre_tasks
.
Nginx a shocrú
Ba cheart go mbeadh Nginx suiteáilte cheana féin; ní mór dúinn é a chumrú agus é a rith. Déanaimis é láithreach sa ról. Cruthaimis struchtúr comhaid:
- ansible
- roles
- nginx
- files
- tasks
- main.yml
- templates
Anois ní mór dúinn comhaid agus teimpléid. Is é an difríocht eatarthu ná go ndéanann insible na comhaid a chóipeáil go díreach, mar atá. Agus ní mór go mbeadh an síneadh j2 ag teimpléid agus is féidir leo luachanna athraitheacha a úsáid ag baint úsáide as na braces cuartha dúbailte céanna.
Déanaimis nginx a chumasú isteach main.yml
comhad. Chuige seo tá modúl córasach againn:
# Copy nginx configs and start it
- name: enable service nginx and start
systemd:
name: nginx
state: started
enabled: yes
Anseo deirimid ní hamháin go gcaithfear nginx a thosú (is é sin, cuirimid é), ach deirimid láithreach go gcaithfear é a chumasú.
Anois déanaimis na comhaid cumraíochta a chóipeáil:
# 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'
Cruthaímid an príomh-chomhad cumraíochta nginx (is féidir leat é a thógáil go díreach ón bhfreastalaí, nó é a scríobh tú féin). Agus freisin an comhad cumraíochta dár bhfeidhmchlár san eolaire sites_available (níl sé seo riachtanach ach úsáideach). Sa chéad chás, úsáidimid an modúl cóip chun comhaid a chóipeáil (caithfidh an comhad a bheith istigh /ansible/roles/nginx/files/nginx.conf
). Sa dara ceann, déanaimid cóip den teimpléad, ag cur luachanna na n-athróg in ionad. Ba chóir go mbeadh an teimpléad istigh /ansible/roles/nginx/templates/my_app.j2
). Agus d'fhéadfadh sé breathnú ar rud éigin 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 }};
....
}
Tabhair aird ar na cuir isteach {{ app_name }}
, {{ app_path }}
, {{ server_name }}
, {{ inventory_hostname }}
— is iad seo na hathróga go léir a ndéanfaidh Ansible a luachanna a chur in ionad an teimpléid sula ndéantar iad a chóipeáil. Tá sé seo úsáideach má úsáideann tú leabhar súgartha do ghrúpaí éagsúla óstaigh. Mar shampla, is féidir linn ár gcomhad fardail a chur leis:
[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
Má sheolaimid ár leabhar súgartha anois, déanfaidh sé na tascanna sonraithe don dá óstach. Ach ag an am céanna, le haghaidh óstach stáitse, beidh na hathróga difriúil ó na cinn táirgthe, agus ní hamháin i róil agus leabhair súgartha, ach freisin i nginx configs. {{ inventory_hostname }}
ní gá a shonrú sa chomhad fardail - seo
Más mian leat comhad fardail a bheith agat le haghaidh roinnt óstach, ach gan é a reáchtáil ach le haghaidh grúpa amháin, is féidir é seo a dhéanamh leis an ordú seo a leanas:
ansible-playbook -i inventory ./playbook.yml -l "staging"
Rogha eile is ea comhaid fardail ar leith a bheith ann do ghrúpaí éagsúla. Nó is féidir leat an dá chur chuige a chur le chéile má tá go leor óstach éagsúla agat.
A ligean ar dul ar ais chuig a bhunú nginx. Tar éis na comhaid cumraíochta a chóipeáil, ní mór dúinn nasc nasc a chruthú i sitest_enabled go my_app.conf ó sites_available. Agus atosaigh 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
Tá gach rud simplí anseo - arís modúil insible le comhréir measartha caighdeánach. Ach tá pointe amháin ann. Níl aon phointe ann nginx a atosú gach uair. Ar thug tú faoi deara nach scríobhaimid orduithe mar: “Déan é seo mar seo”, tá cuma níos mó ar an chomhréir “ba cheart go mbeadh an stát seo aige”. Agus is minice é seo go díreach conas a oibríonn insible. Má tá an grúpa ann cheana féin, nó má tá an pacáiste córais suiteáilte cheana féin, ansin seiceálfaidh ansible chuige seo agus scipeáil an tasc. Chomh maith leis sin, ní dhéanfar comhaid a chóipeáil má thagann siad go hiomlán lena bhfuil ar an bhfreastalaí cheana féin. Is féidir linn leas a bhaint as seo agus nginx a atosú ach amháin má athraíodh na comhaid cumraíochta. Tá treoir clár ann chuige 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
Má athraíonn ceann de na comhaid chumraíochta, déanfar cóip agus clárófar an athróg restart_nginx
. Agus ní dhéanfar an tseirbhís a atosú ach amháin má tá an athróg seo cláraithe.
Agus, ar ndóigh, ní mór duit ról nginx a chur leis an bpríomhleabhar súgartha.
Suiteáil postgresql
Ní mór dúinn postgresql a chumasú ag baint úsáide as systemd ar an mbealach céanna agus a rinneamar le nginx, agus freisin úsáideoir a chruthú a úsáidfimid chun rochtain a fháil ar an mbunachar sonraí agus ar an mbunachar sonraí féin.
A ligean ar a chruthú ró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 }}"
Ní dhéanfaidh mé cur síos ar conas athróga a chur le fardal, tá sé seo déanta go leor uaireanta cheana féin, chomh maith le comhréir na modúil postgresql_db agus postgresql_user. Is féidir tuilleadh eolais a fháil sna doiciméid. Tá an treoir is suimiúla anseo become_user: postgres
. Is é an fírinne, de réir réamhshocraithe, nach bhfuil rochtain ag an úsáideoir postgres ach ar bhunachar sonraí postgresql agus go háitiúil amháin. Ligeann an treoir seo dúinn orduithe a fhorghníomhú thar ceann an úsáideora seo (má tá rochtain againn, ar ndóigh).
Chomh maith leis sin, b'fhéidir go gcaithfidh tú líne a chur le pg_hba.conf chun rochtain a cheadú d'úsáideoir nua ar an mbunachar sonraí. Is féidir é seo a dhéanamh ar an mbealach céanna agus a d'athraigh muid an config nginx.
Agus ar ndóigh, ní mór duit an ról postgresql a chur leis an bpríomhleabhar súgartha.
Suiteáil ruby trí rbenv
Níl modúil ag Ansible chun oibriú le rbenv, ach tá sé suiteáilte trí stór git a chlónáil. Mar sin, éiríonn an fhadhb seo an ceann is neamhchaighdeánach. Cruthaimis ról di /ansible/roles/ruby_rbenv/main.yml
agus déanaimis é a líonadh:
# Install rbenv and ruby
- name: Install rbenv
become_user: "{{ user }}"
git: repo=https://github.com/rbenv/rbenv.git dest=~/.rbenv
Bainimid úsáid arís as an treoir become_user chun oibriú faoin úsáideoir a chruthaigh muid chun na gcríoch sin. Ós rud é go bhfuil rbenv suiteáilte ina eolaire baile, agus ní go domhanda. Agus bainimid úsáid freisin as an modúl git chun an stór a chlónáil, ag sonrú repo agus dest.
Ansin, ní mór dúinn rbenv init a chlárú i bashrc agus rbenv a chur le PATH ansin. Chuige seo tá an modúl líneinchomhad 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 -)"'
Ansin ní mór duit ruby_build a shuiteáil:
- name: Install ruby-build
become_user: "{{ user }}"
git: repo=https://github.com/rbenv/ruby-build.git dest=~/.rbenv/plugins/ruby-build
Agus ar deireadh a shuiteáil ruby. Déantar é seo trí rbenv, is é sin, go simplí leis an ordú 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
Deirimid cén ordú a fhorghníomhófar agus cad leis. Mar sin féin, anseo táimid ag teacht ar an bhfíric nach bhfuil ansible ag rith an cód atá sa bashrc roimh rith na n-orduithe. Ciallaíonn sé seo go gcaithfear rbenv a shainiú go díreach sa script chéanna.
Is é an chéad fhadhb eile mar gheall ar an bhfíric nach bhfuil aon stát ag an ordú bhlaosc ó thaobh inchoigeartaithe de. Is é sin, ní bheidh aon seiceáil uathoibríoch cibé an bhfuil an leagan seo de ruby suiteáilte nó nach bhfuil. Is féidir linn é seo a dhéanamh sinn féin:
- 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
Níl fágtha ach bundler a shuiteáil:
- name: Install bundler
become_user: "{{ user }}"
shell: |
export PATH="${HOME}/.rbenv/bin:${PATH}"
eval "$(rbenv init -)"
gem install bundler
Agus arís, cuir ár ról ruby_rbenv leis an bpríomhleabhar súgartha.
Comhaid roinnte.
Go ginearálta, d'fhéadfaí an socrú a chríochnú anseo. Ansin, níl fágtha ach capistrano a rith agus déanfaidh sé an cód féin a chóipeáil, na heolairí riachtanacha a chruthú agus an feidhmchlár a sheoladh (má tá gach rud cumraithe i gceart). Mar sin féin, is minic a éilíonn capistrano comhaid cumraíochta breise, mar shampla database.yml
nó .env
Is féidir iad a chóipeáil díreach cosúil le comhaid agus teimpléid do nginx. Níl ach subtlety amháin. Sula ndéantar comhaid a chóipeáil, ní mór duit struchtúr eolaire a chruthú dóibh, rud mar seo:
# Copy shared files for deploy
- name: Ensure shared dir
become_user: "{{ user }}"
file:
path: "{{ app_path }}/shared/config"
state: directory
ní shonraímid ach eolaire amháin agus cruthóimid ceann tuismitheora go huathoibríoch más gá.
Cruinneachán Insible
Tá sé faighte amach againn cheana féin gur féidir sonraí rúnda a bheith in athróga amhail pasfhocal an úsáideora. Má chruthaigh tú .env
comhad don iarratas, agus database.yml
ansin caithfidh níos mó sonraí ríthábhachtacha den sórt sin a bheith ann. Bheadh sé go maith iad a cheilt ó shúile prying. Chun na críche seo úsáidtear é
A ligean ar a chruthú comhad le haghaidh athróg /ansible/vars/all.yml
(anseo is féidir leat comhaid éagsúla a chruthú do ghrúpaí éagsúla ina hóstach, díreach mar atá sa chomhad fardail: production.yml, staging.yml, etc).
Ní mór gach athróg nach mór a chriptiú a aistriú chuig an gcomhad seo ag baint úsáide as gnáth-chomhréir 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
Ina dhiaidh sin is féidir an comhad seo a chriptiú leis an ordú:
ansible-vault encrypt ./vars/all.yml
Ar ndóigh, agus tú ag criptiú, beidh ort pasfhocal a shocrú le haghaidh díchriptiú. Is féidir leat a fheiceáil cad a bheidh taobh istigh den chomhad tar éis an t-ordú seo a ghlaoch.
Trí mheán na ansible-vault decrypt
is féidir an comhad a dhíchriptiú, a mhodhnú agus a chriptiú arís.
Ní gá duit an comhad a dhíchriptiú chun oibriú. Stórálann tú é criptithe agus ritheann tú an leabhar súgartha leis an argóint --ask-vault-pass
. Iarrfaidh Ansible an focal faire, gheobhaidh sé na hathróga agus déanfaidh sé na tascanna. Fanfaidh na sonraí go léir criptithe.
Breathnóidh an t-ordú iomlán do roinnt grúpaí óstaigh agus cruinneachán ansible rud éigin mar seo:
ansible-playbook -i inventory ./playbook.yml -l "staging" --ask-vault-pass
Ach ní thabharfaidh mé téacs iomlán na leabhar súgartha agus na róil duit, scríobh tú féin é. Toisc gur mar sin atá ansible - mura dtuigeann tú cad is gá a dhéanamh, ní dhéanfaidh sé duit é.
Foinse: will.com