Aħna niġbru l-Nginx tagħna bi ftit kmandi

Hi!
Jisimni Sergey, naħdem bħala inġinier tal-infrastruttura fit-tim tal-API tal-pjattaforma tinkoff.ru.

F'dan l-artikolu ser nitkellem dwar il-problemi li ffaċċja t-tim tagħna meta pprepara balancers ibbażati fuqhom Nginx għal diversi proġetti. Ngħidlek ukoll dwar l-għodda li ppermettietni negħleb ħafna minnhom.

Nginx huwa proxy server multifunzjonali u li qed jiżviluppa b'mod attiv. Hija fiha numru kbir ta 'moduli, din mhix lista kompluta. Kull proġett jimponi ċerti rekwiżiti fuq il-funzjonalità tal-balancer u l-verżjoni ta 'Nginx (per eżempju, il-preżenza ta' http/2 u grpc proxy), u l-kompożizzjoni tal-moduli tiegħu.

Nixtiequ naraw verżjoni ġdida bis-sett meħtieġ ta 'moduli, li taħdem taħt distribuzzjoni speċifika tal-Linux. Fil-każ tagħna, dawn huma sistemi bbażati fuq deb u rpm. L-għażla bil-kontenituri mhix ikkunsidrata f'dan l-artikolu.

Irridu nbiddlu malajr il-funzjonalità tal-balancers tagħna. U hawnhekk immedjatament tqum il-mistoqsija: kif tikseb dan filwaqt li tonfoq l-inqas riżorsi possibbli? Ikun saħansitra aħjar li twaqqaf il-proċess sabiex inkunu nistgħu nispeċifikaw numru finit ta 'parametri ta' input, u fl-output nirċievu artifact fil-forma ta 'pakkett deb / rpm għall-OS mixtieq.

Bħala riżultat, għadd ta 'problemi jistgħu jiġu fformulati:

  • Mhux dejjem hemm pakketti bl-aħħar verżjoni ta 'Nginx.
  • M'hemm l-ebda pakketti bil-moduli meħtieġa.
  • Il-kumpilazzjoni u l-bini ta 'pakkett manwalment jieħu ħafna ħin u detta tedjanti.
  • M'hemm l-ebda deskrizzjoni ta 'kif din jew dik l-istanza Nginx hija mmuntata.

Biex issolvi dawn il-problemi, tqum il-ħtieġa għal għodda li tieħu bħala input speċifikazzjoni f'format li jinqara mill-bniedem u tgħaqqad pakkett Nginx bil-funzjonalità meħtieġa bbażata fuqha.

Ma sibna għażla adattata għalina fuq il-kobor ta 'Github, iddeċidejna li noħolqu l-għodda tagħna stess - nginx-bennej.

Speċifikazzjonijiet

Fl-għodda tagħna, ridna noħolqu deskrizzjoni tal-ispeċifikazzjoni fil-forma ta 'kodiċi, li mbagħad tista' titqiegħed f'repożitorju Git. Biex tagħmel dan, għażilna l-format familjari għal affarijiet bħal dawn - yaml. Eżempju ta' speċifikazzjoni:

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

Hawnhekk nindikaw li rridu naraw pakkett deb bil-verżjoni Nginx 1.14.2 bis-sett meħtieġ ta 'moduli. Is-sezzjoni bil-moduli hija fakultattiva. Għal kull wieħed minnhom tista' tissettja:

  • Isem.
  • Indirizz minn fejn tista' tiksbu:
    • Repożitorju Git. Tista 'wkoll tispeċifika fergħa jew tikketta.
    • Link tal-web tal-arkivju.
    • Link lokali għall-arkivju.

Xi moduli jeħtieġu dipendenzi addizzjonali biex jiġu installati, pereżempju nginx-auth-ldap jeħtieġ libldap2-dev installat. Id-dipendenzi meħtieġa jistgħu wkoll jiġu speċifikati meta jiddeskrivu l-modulu.

Ambjent

Fl-għodda tagħna tista 'malajr tikseb ambjent b'utilitajiet installati għal kumpilazzjoni, assemblaġġ ta' pakketti u softwer awżiljarju ieħor. Kontenitur Docker b'dak kollu li għandek bżonn huwa ideali hawn (ir-repożitorju diġà għandu ftit eżempji ta 'fajls Docker għal ubuntu u centos).

Wara li titfassal l-ispeċifikazzjoni u jiġi ppreparat l-ambjent, inniedu l-bennej tagħna, wara li installa d-dipendenzi tiegħu:

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

In-numru tar-reviżjoni hawnhekk huwa fakultattiv u jintuża għall-assemblaġġi tal-verżjoni. Huwa miktub fil-meta informazzjoni tal-pakkett, li jagħmilha faċli biex taġġorna fuq is-servers.
Miċ-zkuk tista' tissorvelja dak li qed jiġri. Hawn eżempju tal-punti ewlenin:

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

Allura, bi ftit kmandijiet biss, noħolqu l-ambjent u l-assemblaġġ Nginx meħtieġ, u l-pakkett jidher fid-direttorju minn fejn titnieda l-iskrittura.

Inkorporazzjoni

Nistgħu wkoll nintegraw l-għodda tagħna fil-proċessi CI/CD. Kwalunkwe mill-ħafna sistemi CI eżistenti llum jistgħu jgħinu f'dan, pereżempju Teamcity jew Gitlab CI.

Bħala riżultat, kull darba li l-ispeċifikazzjoni tinbidel fir-repożitorju Git, il-bini tal-artifact titnieda awtomatikament. In-numru tar-reviżjoni huwa marbut mal-counter tat-tnedija tal-bini.
Bi ftit aktar ħin, tista 'tikkonfigura l-artifact biex jintbagħat lir-repożitorju tal-pakketti lokali tiegħek, Nexus, Artifactory, eċċ.

Vantaġġ addizzjonali huwa li l-fajl ta 'konfigurazzjoni yaml jista' jiġi konness ma 'Ansible jew sistema ta' konfigurazzjoni awtomatika oħra, u minn hemm nistgħu nieħdu n-numru tal-verżjoni u t-tip ta 'pakkett li rridu niskjeraw.

X'hemm Li jmiss

Il-proġett għadu mhux lest. Hawn dak li qed naħdmu fuqu issa:

  • Aħna nespandu l-possibbiltà ta 'konfigurazzjoni, iżda fl-istess ħin inżommuha sempliċi kemm jista' jkun. Ma tridx tiddefinixxi elf parametru jekk għandek bżonn tnejn biss, u l-bqija jaqbel awtomatikament. Dan jinkludi bnadar ta 'kumpilazzjoni (issa tista' tbiddelhom fil-fajl tal-konfigurazzjoni interna src/config.py), mogħdija ta 'installazzjoni, u utent tal-varar.
  • Qed inżidu għażliet biex nibagħtu awtomatikament pakkett lil diversi repożitorji tal-artifact.
  • Eżegwixxi kmand tad-dwana meta tgħabbi modulu (per eżempju, biex tuża github.com/nginx-modules/nginx_upstream_check_module l-ewwel trid tapplika garża ta' verżjoni speċifika)
  • Żieda tat-testijiet:
    • Il-pakkett huwa installat b'mod korrett.
    • Nginx għandu l-verżjoni meħtieġa u huwa mibni bil-bnadar u l-moduli meħtieġa.
    • Jinħolqu l-mogħdijiet, il-kontijiet, eċċ meħtieġa.

Imma tista' tuża din l-għodda issa, u tissuġġerixxi wkoll titjib - github.com/TinkoffCreditSystems/Nginx-builder merħba!

Sors: www.habr.com

Żid kumment