Bidh sinn a 'cruinneachadh ar Nginx le òrdugh no dhà

Hello!
Is e m ’ainm Sergey, tha mi ag obair mar innleadair bun-structair ann an sgioba API an àrd-ùrlar tinkoff.ru.

San artaigil seo bruidhnidh mi mu na duilgheadasan a bha fa chomhair an sgioba againn nuair a bha iad ag ullachadh luchd-cothromachaidh stèidhichte air Nginx airson diofar phròiseactan. Innsidh mi dhut cuideachd mun inneal a leig leam faighinn thairis air a’ mhòr-chuid dhiubh.

Tha Nginx na fhrithealaiche progsaidh ioma-ghnìomhach agus gu gnìomhach a’ leasachadh. Tha àireamh mhòr de mhodalan ann, chan e liosta iomlan a tha seo. Bidh gach pròiseact a’ cur riatanasan sònraichte air comasachd an balancer agus an dreach de Nginx (mar eisimpleir, làthaireachd http/2 agus grpc proxying), agus co-dhèanamh a mhodalan.

Bu mhath leinn dreach ùr fhaicinn leis an t-seata mhodalan a tha a dhìth, a’ ruith fo sgaoileadh Linux sònraichte. Anns a’ chùis againn, is iad sin siostaman stèidhichte air deasbaireachd agus rpm. Chan eilear a’ beachdachadh air an roghainn le soithichean san artaigil seo.

Tha sinn airson gnìomhachd ar luchd-cothromachaidh atharrachadh gu sgiobalta. Agus an seo tha a 'cheist ag èirigh sa bhad: ciamar a choileanas tu seo fhad' sa tha e a 'cosg cho beag de ghoireasan' sa ghabhas? Bhiodh e eadhon na b’ fheàrr am pròiseas a chuir air dòigh gus an urrainn dhuinn àireamh chrìochnaichte de pharaimearan cuir a-steach a shònrachadh, agus aig an toradh gheibh sinn artifact ann an cruth pasgan deb / rpm airson an OS a tha thu ag iarraidh.

Mar thoradh air an sin, faodar grunn dhuilgheadasan a chruthachadh:

  • Chan eil an-còmhnaidh pasganan ann leis an dreach as ùire de Nginx.
  • Chan eil pacaidean ann leis na modalan riatanach.
  • Tha a bhith a’ cur ri chèile agus a’ togail pasgan le làimh a’ toirt ùine agus gu tur sgìth.
  • Chan eil tuairisgeul sam bith air mar a tha seo no an eisimpleir Nginx sin air a chruinneachadh.

Gus na duilgheadasan sin fhuasgladh, tha feum air inneal a bheireadh a-steach sònrachadh ann an cruth a ghabhas leughadh le daoine agus a chruinnicheadh ​​​​pasgan Nginx leis a’ ghnìomhachd riatanach stèidhichte air.

Gun a bhith a’ lorg roghainn iomchaidh dhuinn air farsaingeachd Github, chuir sinn romhainn an inneal againn fhèin a chruthachadh - nginx-togail.

Sònrachaidhean

Anns an inneal againn, bha sinn airson tuairisgeul a chruthachadh den t-sònrachadh ann an cruth còd, a dh’ fhaodar a chuir ann an stòr Git. Gus seo a dhèanamh, thagh sinn an cruth air a bheil sinn eòlach airson rudan mar sin - yaml. Eisimpleir sònrachadh:

nginx_version: 1.14.1
output_package: deb
modules:
  - module:
      name: nginx-auth-ldap
      git_url: https://github.com/kvspb/nginx-auth-ldap.git
      git_branch: master
      dependencies:
        - libldap2-dev
  - module:
      name: ngx_http_substitutions_filter_module
      git_url: https://github.com/yaoweibin/ngx_http_substitutions_filter_module.git
  - module:
      name: headers-more-nginx-module
      web_url: https://github.com/openresty/headers-more-nginx-module/archive/v0.261.zip
  - module:
      name: nginx-module-vts
      git_url: https://github.com/vozlt/nginx-module-vts.git
      git_tag: v0.1.18
  - module:
      name: ngx_devel_kit
      git_url: https://github.com/simplresty/ngx_devel_kit.git
      git_tag: v0.3.0
  - module:
      name: ngx_cache_purge
      git_url: https://github.com/FRiCKLE/ngx_cache_purge.git
  - module:
      name: ngx_http_dyups_module
      git_url: https://github.com/yzprofile/ngx_http_dyups_module.git
  - module:
      name: nginx-brotli
      git_url: https://github.com/eustas/ngx_brotli.git
      git_tag: v0.1.2
  - module:
      name: nginx_upstream_check_module
      git_url: https://github.com/yaoweibin/nginx_upstream_check_module.git
  - module:
      name: njs
      git_url: https://github.com/nginx/njs.git
      git_tag: 0.2.5
      config_folder_path: nginx

An seo tha sinn a’ comharrachadh gu bheil sinn airson pasgan deasbaid fhaicinn le Nginx dreach 1.14.2 leis an t-seata mhodalan a tha a dhìth. Tha an earrann le modalan roghainneil. Airson gach aon dhiubh faodaidh tu a shuidheachadh:

  • Ainm.
  • Seòladh far am faigh thu e:
    • Stòr-tasgaidh Git. Faodaidh tu cuideachd meur no tag a shònrachadh.
    • Tasglann ceangal-lìn.
    • Ceangal ionadail ris an tasglann.

Feumaidh cuid de mhodalan eisimeileachd a bharrachd a bhith air an stàladh, mar eisimpleir tha nginx-auth-ldap ag iarraidh libldap2-dev a chuir a-steach. Faodar eisimeileachd riatanach a shònrachadh cuideachd nuair a thathar a’ toirt cunntas air a’ mhodal.

An àrainneachd

Anns an inneal againn gheibh thu àrainneachd gu sgiobalta le goireasan stàlaichte airson cruinneachadh, co-chruinneachadh pacaid agus bathar-bog taice eile. Tha inneal Docker leis a h-uile dad a dh ’fheumas tu air leth freagarrach an seo (tha eisimpleir no dhà de fhaidhlichean Docker airson ubuntu agus centos aig an stòr mu thràth).

Às deidh an sònrachadh a bhith air a dhealbhadh agus an àrainneachd ullachadh, bidh sinn a ’cur air bhog an neach-togail againn, às deidh dhuinn na eisimeileachd a chuir a-steach roimhe:

pip3 install -r requirements.txt
./main.py build -f [конфиг_файл].yaml -r [номер_ревизии]

Tha an àireamh mùthaidh an seo roghainneil agus air a chleachdadh airson co-chruinneachaidhean dreach. Tha e sgrìobhte ann am fiosrachadh meta a’ phacaid, ga dhèanamh furasta ùrachadh air frithealaichean.
Bho na logaichean faodaidh tu sùil a chumail air na tha a 'tachairt. Seo eisimpleir de na prìomh phuingean:

builder - INFO - Parse yaml file: example.config.yaml
builder - INFO - Download scripts for build deb package
builder - INFO - Downloading nginx src...
builder - INFO - --> http://nginx.org/download/nginx-1.14.1.tar.gz
builder - INFO - Downloading 3d-party modules...
builder - INFO - Module nginx-auth-ldap will download by branch
builder - INFO - -- Done: nginx-auth-ldap
builder - INFO - -- Done: ngx_http_substitutions_filter_module
builder - INFO - Module headers-more-nginx-module will downloading
builder - INFO - Module nginx-module-vts will download by tag
builder - INFO - -- Done: nginx-module-vts
builder - INFO - Module ngx_devel_kit will download by tag
builder - INFO - -- Done: ngx_devel_kit
builder - INFO - -- Done: ngx_cache_purge
builder - INFO - -- Done: ngx_http_dyups_module
builder - INFO - Downloading dependencies
builder - INFO - Building .deb package
builder - INFO - Running 'dh_make'...
builder - INFO - Running 'dpkg-buildpackage'...
dpkg-deb: building package 'nginx' in '../nginx_1.14.1-1_amd64.deb'.

Mar sin, le dìreach òrdugh no dhà, bidh sinn a’ cruthachadh na h-àrainneachd agus an co-chruinneachadh Nginx a tha a dhìth, agus tha am pasgan a’ nochdadh anns an eòlaire far an tèid an sgriobt a chuir air bhog.

A' cur a-steach

Faodaidh sinn cuideachd ar n-inneal fhilleadh a-steach do phròiseasan CI/CD. Faodaidh gin de na h-iomadh siostam CI a th’ ann an-diugh cuideachadh le seo, mar eisimpleir Sgioba no Gitlab CI.

Mar thoradh air an sin, a h-uile uair a bhios an sònrachadh ag atharrachadh ann an stòr Git, thèid togail an artifact a chuir air bhog gu fèin-ghluasadach. Tha an àireamh mùthaidh ceangailte ris a’ chunntair tòiseachaidh togail.
Le beagan a bharrachd ùine, faodaidh tu an artifact a rèiteachadh airson a chuir chun stòr pacaid ionadail agad, Nexus, Artifactory, agus mar sin air adhart.

Is e buannachd a bharrachd a th’ ann gum faod am faidhle rèiteachaidh yaml a bhith ceangailte ri Ansible no siostam rèiteachaidh fèin-ghluasadach eile, agus às an sin is urrainn dhuinn an àireamh tionndaidh agus an seòrsa pacaid a tha sinn airson a chleachdadh a ghabhail.

Dè tha ri thighinn

Chan eil am pròiseact deiseil fhathast. Seo na tha sinn ag obair air a-nis:

  • Bidh sinn a’ leudachadh comas rèiteachaidh, ach aig an aon àm ga chumail cho sìmplidh ‘s a ghabhas. Chan eil thu airson mìle paramadair a mhìneachadh mura h-eil feum agad ach air dhà, agus bidh an còrr a’ freagairt gu bunaiteach. Tha seo a’ toirt a-steach brataichean cruinneachaidh (a-nis faodaidh tu an atharrachadh anns an fhaidhle rèiteachaidh a-staigh src/config.py), slighe stàlaidh, agus neach-cleachdaidh a chuir air bhog.
  • Tha sinn a’ cur roghainnean ris airson pasgan a chuir gu fèin-ghluasadach gu diofar stòran artifact.
  • Dèan òrdugh gnàthaichte nuair a bhios tu a’ luchdachadh modal (mar eisimpleir, airson a chleachdadh github.com/nginx-modules/nginx_upstream_check_module feumaidh tu an toiseach bad de dhreach sònraichte a chuir an sàs)
  • A’ cur deuchainnean ris:
    • Tha am pasgan air a stàladh ceart.
    • Tha an dreach riatanach aig Nginx agus tha e air a thogail leis na brataichean agus na modalan riatanach.
    • Tha na slighean riatanach, cunntasan, agus mar sin air adhart air an cruthachadh.

Ach faodaidh tu an inneal seo a chleachdadh a-nis, agus cuideachd leasachaidhean a mholadh - github.com/TinkoffCreditSystems/Nginx-builder fàilte ort!

Source: www.habr.com

Cuir beachd ann