A’ stèidheachadh frithealaiche gus tagradh Rails a chleachdadh a’ cleachdadh Ansible

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:

  1. Log a-steach mar root
  2. stàladh pacaidean siostam
  3. cruthaich cleachdaiche ùr, rèitich còraichean, iuchair ssh
  4. rèiteachadh pasganan siostam (nginx msaa) agus ruith iad
  5. Bidh sinn a’ cruthachadh neach-cleachdaidh san stòr-dàta (faodaidh tu stòr-dàta a chruthachadh sa bhad)
  6. Log a-steach mar neach-cleachdaidh ùr
  7. Stàlaich rbenv agus ruby
  8. A stàladh a ' chlò-bhualadair
  9. A luchdadh a-nuas an aplacaid code
  10. 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 structar faidhle airson na faidhlichean agad gu lèir, agus mar sin tha e nas fheàrr a chumail ann an eòlaire air leth. A bharrachd air an sin, chan eil e cho cudromach am bi e anns an tagradh rèilichean fhèin, no air leth. Faodaidh tu faidhlichean a stòradh ann an stòr git air leth. Gu pearsanta, bha e na b’ fhasa dhomh eòlaire iomchaidh a chruthachadh anns an eòlaire / config den tagradh rèilichean agus a h-uile càil a stòradh ann an aon stòr.

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 faidhle tasgaidh.

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 и modal air a shon. Ma tha thu a’ cleachdadh siostam obrachaidh eadar-dhealaichte, is dòcha gum feum thu modal eadar-dhealaichte (cuimhnich, thuirt mi aig an toiseach gum feum fios a bhith againn ro-làimh dè agus ciamar a nì sinn). Ge-tà, is coltaiche gum bi an co-chòrdadh coltach.

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 ròla.
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 caochladair sònraichte iomchaidh agus tha an aoigh airson a bheil an leabhar-cluiche a’ ruith an-dràsta air a stòradh an sin.
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 bogha-frois.

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

Cuir beachd ann