Cuirimid ár Nginx le chéile le cúpla orduithe

Dia duit!
Is é mo ainm Sergey, tá mé ag obair mar innealtóir bonneagair i bhfoireann API an ardán tinkoff.ru.

San Airteagal seo beidh mé ag caint faoi na fadhbanna a bhí ag ár bhfoireann agus iad ag ullmhú cothromóirí bunaithe ar Nginx do thionscadail éagsúla. Inseoidh mé duit freisin faoin uirlis a thug deis dom an chuid is mó acu a shárú.

Is seachfhreastalaí ilfheidhmeach é Nginx atá ag forbairt go gníomhach. Tá líon mór modúl ann, ní liosta iomlán é seo. Forchuireann gach tionscadal ceanglais áirithe ar fheidhmiúlacht an balancer agus an leagan de Nginx (mar shampla, láithreacht http/2 agus grpc proxying), agus comhdhéanamh a modúil.

Ba mhaith linn leagan úr a fheiceáil leis an tsraith modúil riachtanach, ag rith faoi dháileadh Linux ar leith. Inár gcás, is córais deb- agus rpm-bhunaithe iad seo. Ní thugtar aird ar an rogha le coimeádáin san Airteagal seo.

Ba mhaith linn feidhmiúlacht ár gcuid comhardaitheoirí a athrú go tapa. Agus anseo éiríonn an cheist láithreach: conas é seo a bhaint amach agus a chaitheamh chomh beag acmhainní agus is féidir? Bheadh ​​sé níos fearr fós an próiseas a shocrú ionas gur féidir linn líon teoranta paraiméadair ionchuir a shonrú, agus déantán a fháil ag an aschur i bhfoirm pacáiste deb/rpm don OS atá ag teastáil.

Mar thoradh air sin, is féidir roinnt fadhbanna a fhoirmiú:

  • Ní bhíonn pacáistí i gcónaí leis an leagan is déanaí de Nginx.
  • Níl aon phacáistí ann leis na modúil riachtanacha.
  • Tógann sé go leor ama pacáiste a thiomsú agus a thógáil de láimh agus tá sé thar a bheith deacair.
  • Níl aon tuairisc ar an gcaoi a gcuirtear an sampla seo nó an cás Nginx sin le chéile.

Chun na fadhbanna seo a réiteach, tá gá le huirlis a ghlacfadh mar ionchur sonraíochta i bhformáid atá inléite ag an duine agus a chuirfeadh le chéile pacáiste Nginx leis an bhfeidhmiúlacht riachtanach bunaithe air.

Gan rogha oiriúnach a aimsiú dúinn ar fhairsinge Github, shocraigh muid ár n-uirlis féin a chruthú - nginx-tógálaí.

Sonraíochtaí

In ár n-uirlis, bhíomar ag iarraidh cur síos a chruthú ar an tsonraíocht i bhfoirm cód, ar féidir é a chur i stór Git ansin. Chun seo a dhéanamh, roghnaigh muid an fhormáid eolach le haghaidh rudaí den sórt sin - yaml. Sampla sonraíochta:

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

Anseo léirímid gur mhaith linn pacáiste deb a fheiceáil le Nginx leagan 1.14.2 leis an tsraith modúil riachtanach. Tá an chuid ina bhfuil modúil roghnach. I gcás gach ceann acu is féidir leat a shocrú:

  • Ainm.
  • Seoladh inar féidir leat é a fháil:
    • Stór Git. Is féidir leat brainse nó clib a shonrú freisin.
    • Nasc gréasáin cartlainne.
    • Nasc áitiúil leis an gcartlann.

Éilíonn roinnt modúil spleáchais bhreise a shuiteáil, mar shampla éilíonn nginx-auth-ldap libldap2-dev suiteáilte. Is féidir spleáchais riachtanacha a shonrú freisin agus an modúl á chur síos.

An timpeallacht

In ár n-uirlis is féidir leat timpeallacht a fháil go tapa le fóntais suiteáilte le haghaidh tiomsú, cóimeáil pacáiste agus bogearraí cúnta eile. Tá coimeádán Docker le gach rud atá uait oiriúnach anseo (tá cúpla sampla de chomhaid Docker do ubuntu agus centos sa stór cheana féin).

Tar éis an tsonraíocht a dhréachtú agus an timpeallacht a ullmhú, seolann muid ár dtógálaí, tar éis dúinn a spleáchais a shuiteáil roimhe seo:

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

Tá an uimhir athbhreithnithe anseo roghnach agus úsáidtear í chun tionóil a leagan. Tá sé scríofa isteach i meitefhaisnéis an phacáiste, rud a fhágann go bhfuil sé éasca é a nuashonrú ar fhreastalaithe.
Ó na logs is féidir leat monatóireacht a dhéanamh ar cad atá ag tarlú. Seo sampla de na príomhphointí:

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 cúpla ordú, cruthaímid an timpeallacht agus an tionól Nginx atá ag teastáil, agus tá an pacáiste le feiceáil san eolaire ón áit a seoladh an script.

neadú

Is féidir linn ár n-uirlis a chomhtháthú le próisis CI/CD freisin. Is féidir le haon cheann de na córais CI atá ann inniu cabhrú leis seo, mar shampla TeamcityGitlab CI.

Mar thoradh air sin, gach uair a athraíonn an tsonraíocht sa stór Git, seoltar tógáil an déantáin go huathoibríoch. Tá an uimhir athbhreithnithe nasctha leis an gcuntar seoladh tógála.
Le beagán níos mó ama, is féidir leat an Déantán a chumrú le seoladh chuig do stór pacáiste áitiúil, Nexus, Artifactory, agus mar sin de.

Buntáiste breise is ea gur féidir an comhad cumraíochta yaml a nascadh le Ansible nó le córas cumraíochta uathoibríoch eile, agus as sin is féidir linn an uimhir leagain agus an cineál pacáiste a theastaíonn uainn a imscaradh a ghlacadh.

Cad atá ar Aghaidh

Níl an tionscadal críochnaithe go fóill. Seo a bhfuilimid ag obair air anois:

  • Leathnóimid an fhéidearthacht cumraíochta, ach ag an am céanna é a choinneáil chomh simplí agus is féidir. Níl tú ag iarraidh míle paraiméadair a shainiú mura bhfuil uait ach dhá cheann, agus go n-oireann an chuid eile de réir réamhshocraithe. Áirítear leis seo bratacha tiomsaithe (anois is féidir leat iad a athrú sa chomhad cumraíochta inmheánach src/config.py), cosán suiteála, agus úsáideoir seolta.
  • Táimid ag cur roghanna leis chun pacáiste a sheoladh go huathoibríoch chuig stórtha déantán éagsúla.
  • Déan ordú saincheaptha agus modúl á luchtú (mar shampla, le húsáid github.com/nginx-modules/nginx_upstream_check_module caithfidh tú paiste de leagan ar leith a chur i bhfeidhm ar dtús)
  • Ag cur tástálacha leis:
    • Tá an pacáiste suiteáilte i gceart.
    • Tá an leagan riachtanach ag Nginx agus tá sé tógtha leis na bratacha agus na modúil riachtanacha.
    • Cruthaítear na cosáin, na cuntais, agus mar sin de.

Ach is féidir leat an uirlis seo a úsáid anois, agus feabhsuithe a mholadh freisin - github.com/TinkoffCreditSystems/Nginx-builder fáilte romhat!

Foinse: will.com

Add a comment