Freastalaí a shocrú chun feidhmchlár Rails a imscaradh ag baint úsáide as Ansible

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:

  1. Logáil isteach mar fhréamh
  2. shuiteáil pacáistí córais
  3. úsáideoir nua a chruthú, cearta a chumrú, eochair ssh
  4. cumraigh pacáistí córais (nginx srl) agus rith iad
  5. Cruthaímid úsáideoir sa bhunachar sonraí (is féidir leat bunachar sonraí a chruthú láithreach)
  6. Logáil isteach mar úsáideoir nua
  7. Suiteáil rbenv agus ruby
  8. Suiteáil an bundler
  9. Íoslódáil an cód iarratais
  10. 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 struchtúr comhaid do do chuid comhad go léir, mar sin is fearr é a choinneáil ar fad in eolaire ar leith. Thairis sin, níl sé chomh tábhachtach cibé an mbeidh sé san iarratas ráillí féin, nó ar leithligh. Is féidir leat comhaid a stóráil i stór git ar leith. Go pearsanta, bhí sé an-áisiúil eolaire insible a chruthú san eolaire / cumraíocht den fheidhmchlár ráillí agus gach rud a stóráil in aon stór amháin.

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 comhad fardail.

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 и modúl chun é. Má tá córas oibriúcháin difriúil á úsáid agat, b'fhéidir go mbeadh modúl difriúil ag teastáil uait (cuimhnigh, dúirt mé ag an tús go gcaithfimid a fháil amach roimh ré cad é agus conas a dhéanfaimid). Mar sin féin, is dócha go mbeidh an chomhréir cosúil leis.

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 róil.
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 athróg inchurtha speisialta agus tá an t-óstach dá bhfuil an leabhar súgartha á rith faoi láthair stóráilte ann.
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.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 é cruinneachán insible.

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

Add a comment