Rydyn ni'n cydosod ein Nginx gyda chwpl o orchmynion

Hi!
Fy enw i yw Sergey, rwy'n gweithio fel peiriannydd seilwaith yn nhîm API y platfform tinkoff.ru.

Yn yr erthygl hon byddaf yn siarad am y problemau a wynebodd ein tîm wrth baratoi balanswyr yn seiliedig ar Nginx ar gyfer prosiectau amrywiol. Byddaf hefyd yn dweud wrthych am yr offeryn a ganiataodd i mi oresgyn y rhan fwyaf ohonynt.

Mae Nginx yn weinydd dirprwy amlswyddogaethol sy'n datblygu'n weithredol. Mae'n cynnwys nifer fawr o fodiwlau, nid yw hon yn rhestr gyflawn. Mae pob prosiect yn gosod gofynion penodol ar ymarferoldeb y balancer a'r fersiwn o Nginx (er enghraifft, presenoldeb http/2 a grpc proxying), a chyfansoddiad ei fodiwlau.

Hoffem weld fersiwn newydd gyda'r set ofynnol o fodiwlau, yn rhedeg o dan ddosbarthiad Linux penodol. Yn ein hachos ni, mae'r rhain yn systemau sy'n seiliedig ar deb- a rpm. Nid yw'r opsiwn gyda chynwysyddion yn cael ei ystyried yn yr erthygl hon.

Rydym am newid ymarferoldeb ein balanswyr yn gyflym. Ac yma mae'r cwestiwn yn codi ar unwaith: sut i gyflawni hyn wrth wario cyn lleied o adnoddau â phosib? Byddai hyd yn oed yn well sefydlu'r broses fel y gallwn nodi nifer gyfyngedig o baramedrau mewnbwn, ac yn yr allbwn derbyn arteffact ar ffurf pecyn deb / rpm ar gyfer yr OS a ddymunir.

O ganlyniad, gellir llunio nifer o broblemau:

  • Nid oes pecynnau bob amser gyda'r fersiwn ddiweddaraf o Nginx.
  • Nid oes unrhyw becynnau gyda'r modiwlau gofynnol.
  • Mae llunio ac adeiladu pecyn â llaw yn cymryd llawer o amser ac yn gwbl ddiflas.
  • Nid oes unrhyw ddisgrifiad o sut mae'r enghraifft hon neu'r enghraifft Nginx honno'n cael ei chydosod.

Er mwyn datrys y problemau hyn, mae'r angen yn codi am offeryn a fyddai'n cynnwys manyleb mewn fformat y gall pobl ei ddarllen ac yn cydosod pecyn Nginx gyda'r swyddogaeth angenrheidiol yn seiliedig arno.

Heb ddod o hyd i opsiwn addas i ni ar ehangder Github, fe benderfynon ni greu ein teclyn ein hunain - nginx-adeiladydd.

Manylebau

Yn ein hofferyn, roeddem am greu disgrifiad o'r fanyleb ar ffurf cod, y gellir wedyn ei roi mewn ystorfa Git. I wneud hyn, fe ddewison ni'r fformat cyfarwydd ar gyfer pethau o'r fath - yaml. Enghraifft o fanyleb:

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

Yma rydym yn nodi ein bod am weld pecyn deb gyda fersiwn Nginx 1.14.2 gyda'r set ofynnol o fodiwlau. Mae'r adran gyda modiwlau yn ddewisol. Ar gyfer pob un ohonynt gallwch chi osod:

  • Enw.
  • Cyfeiriad lle gallwch ei gael:
    • Ystorfa Git. Gallwch hefyd nodi cangen neu dag.
    • Archif dolen we.
    • Dolen leol i'r archif.

Mae angen gosod dibyniaethau ychwanegol ar rai modiwlau, er enghraifft mae angen gosod libldap2-dev ar nginx-auth-ldap. Gellir hefyd nodi dibyniaethau angenrheidiol wrth ddisgrifio'r modiwl.

Amgylchedd

Yn ein hofferyn gallwch chi gael amgylchedd yn gyflym gyda chyfleustodau wedi'u gosod ar gyfer llunio, cydosod pecynnau a meddalwedd ategol arall. Mae cynhwysydd Docker gyda phopeth sydd ei angen arnoch yn ddelfrydol yma (mae gan yr ystorfa ychydig o enghreifftiau o ffeiliau Docker ar gyfer ubuntu a centos eisoes).

Ar ôl i'r fanyleb gael ei llunio a pharatoi'r amgylchedd, rydym yn lansio ein hadeiladwr, ar ôl gosod ei ddibyniaethau o'r blaen:

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

Mae'r rhif adolygu yma yn ddewisol ac fe'i defnyddir ar gyfer fersiynau fersiynau. Mae wedi'i ysgrifennu i mewn i wybodaeth meta y pecyn, gan ei gwneud hi'n hawdd ei diweddaru ar weinyddion.
O'r logiau gallwch fonitro beth sy'n digwydd. Dyma enghraifft o’r prif bwyntiau:

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'.

Felly, gyda dim ond cwpl o orchmynion, rydyn ni'n creu'r amgylchedd a'r cynulliad Nginx gofynnol, ac mae'r pecyn yn ymddangos yn y cyfeiriadur lle mae'r sgript yn cael ei lansio.

Gwreiddio

Gallwn hefyd integreiddio ein hofferyn i brosesau CI/CD. Gall unrhyw un o'r systemau CI niferus sy'n bodoli heddiw helpu gyda hyn, er enghraifft Teamcity neu Gitlab CI.

O ganlyniad, bob tro y bydd y fanyleb yn newid yn ystorfa Git, mae adeiladu'r arteffact yn cael ei lansio'n awtomatig. Mae'r rhif adolygu wedi'i gysylltu â'r rhifydd lansio adeiladu.
Gydag ychydig mwy o amser, gallwch chi ffurfweddu'r arteffact i'w anfon i'ch ystorfa pecyn lleol, Nexus, Artifactory, ac ati.

Mantais ychwanegol yw y gellir cysylltu ffeil ffurfweddu yaml ag Ansible neu system ffurfweddu awtomatig arall, ac oddi yno gallwn gymryd y rhif fersiwn a'r math o becyn yr ydym am ei ddefnyddio.

Beth sydd nesaf

Nid yw'r prosiect wedi'i gwblhau eto. Dyma beth rydyn ni'n gweithio arno nawr:

  • Rydym yn ehangu'r posibilrwydd o gyfluniad, ond ar yr un pryd yn ei gadw mor syml â phosib. Nid ydych am ddiffinio mil o baramedrau os mai dim ond dau sydd eu hangen arnoch, ac mae'r gweddill yn cyd-fynd yn ddiofyn. Mae hyn yn cynnwys baneri casglu (nawr gallwch eu newid yn y ffeil ffurfweddu mewnol src/config.py), llwybr gosod, a defnyddiwr lansio.
  • Rydym yn ychwanegu opsiynau ar gyfer anfon pecyn yn awtomatig i wahanol storfeydd arteffactau.
  • Gweithredwch orchymyn arferol wrth lwytho modiwl (er enghraifft, i'w ddefnyddio github.com/nginx-modules/nginx_upstream_check_module rhaid i chi gymhwyso darn o fersiwn benodol yn gyntaf)
  • Ychwanegu profion:
    • Mae'r pecyn wedi'i osod yn gywir.
    • Mae gan Nginx y fersiwn ofynnol ac fe'i hadeiladir gyda'r baneri a'r modiwlau gofynnol.
    • Mae'r llwybrau angenrheidiol, cyfrifon, ac ati yn cael eu creu.

Ond gallwch chi ddefnyddio'r offeryn hwn nawr, a hefyd awgrymu gwelliannau - github.com/TinkoffCreditSystems/Nginx-builder croeso!

Ffynhonnell: hab.com

Ychwanegu sylw