Gitigum namo ang among Nginx nga adunay duha ka mga sugo

Hello!
Ang akong ngalan kay Sergey, nagtrabaho ko isip inhinyero sa imprastraktura sa API team sa tinkoff.ru nga plataporma.

Niini nga artikulo maghisgot ako bahin sa mga problema nga giatubang sa among team sa pag-andam sa mga balanse nga gibase sa Nginx alang sa lain-laing mga proyekto. Isulti usab nako kanimo ang bahin sa himan nga nagtugot kanako sa pagbuntog sa kadaghanan niini.

Ang Nginx usa ka multifunctional ug aktibo nga nagpalambo sa proxy server. Kini adunay daghang mga module, dili kini kompleto nga listahan. Ang matag proyekto nagpahamtang ug piho nga mga kinahanglanon sa pagpaandar sa balancer ug sa bersyon sa Nginx (pananglitan, ang presensya sa http/2 ug grpc proxying), ug ang komposisyon sa mga modules niini.

Gusto namon nga makakita og bag-ong bersyon nga adunay gikinahanglan nga set sa mga module, nga nagdagan ubos sa usa ka piho nga distribusyon sa Linux. Sa among kaso, kini ang mga sistema nga nakabase sa deb ug rpm. Ang kapilian nga adunay mga sudlanan wala gikonsiderar sa kini nga artikulo.

Gusto namon nga dali nga usbon ang pagpaandar sa among mga balanse. Ug dinhi ang pangutana mitungha dayon: unsaon pagkab-ot niini samtang naggasto og gamay nga mga kapanguhaan kutob sa mahimo? Mas maayo pa nga i-set up ang proseso aron matino namon ang usa ka limitado nga gidaghanon sa mga parameter sa pag-input, ug sa output makadawat usa ka artifact sa porma sa usa ka deb/rpm nga pakete alang sa gusto nga OS.

Ingon usa ka sangputanan, daghang mga problema ang mahimong maporma:

  • Dili kanunay nga mga pakete nga adunay pinakabag-o nga bersyon sa Nginx.
  • Walay mga pakete nga adunay gikinahanglan nga mga module.
  • Ang pag-compile ug paghimo sa usa ka pakete nga mano-mano usa ka pag-usik sa oras ug labi ka makapakapoy.
  • Wala’y paghulagway kung giunsa kini o kana nga pananglitan sa Nginx gitigum.

Aron masulbad kini nga mga problema, ang panginahanglan mitungha alang sa usa ka himan nga magkuha ingon usa ka pag-input sa usa ka detalye sa usa ka format nga mabasa sa tawo ug mag-assemble sa usa ka package nga Nginx nga adunay kinahanglan nga gamit nga gibase niini.

Dili pagpangita og angay nga kapilian alang kanamo sa kadaghanon sa Github, nakahukom kami nga maghimo sa among kaugalingon nga himan - nginx-builder.

Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ

Sa among himan, gusto namon nga maghimo usa ka paghulagway sa detalye sa porma sa code, nga mahimo’g ibutang sa usa ka repositoryo sa Git. Aron mahimo kini, gipili namon ang format nga pamilyar sa ingon nga mga butang - yaml. Pananglitan sa espesipikasyon:

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

Dinhi among gipakita nga gusto namong makita ang usa ka deb package nga adunay Nginx version 1.14.2 nga adunay gikinahanglan nga set sa modules. Ang seksyon nga adunay mga module kay opsyonal. Alang sa matag usa kanila mahimo nimong itakda:

  • Ngalan.
  • Address kung asa nimo makuha:
    • Git repository. Mahimo usab nimo ipiho ang usa ka sanga o tag.
    • I-archive ang link sa web.
    • Lokal nga link sa archive.

Ang ubang mga module nanginahanglan dugang nga mga dependency nga ma-install, pananglitan nginx-auth-ldap nanginahanglan libldap2-dev nga na-install. Ang gikinahanglan nga mga dependency mahimo usab nga ipiho kung ihulagway ang module.

Ang kalikopan

Sa among himan dali ka nga makakuha usa ka palibot nga adunay na-install nga mga gamit para sa pag-compile, package assembly ug uban pang auxiliary software. Ang usa ka sudlanan sa Docker nga adunay tanan nga imong kinahanglan maayo dinhi (ang repositoryo adunay usa ka pares nga mga pananglitan sa mga file sa Docker alang sa ubuntu ug centos).

Human ma-drawing ang espesipikasyon ug maandam na ang palibot, gilusad namo ang among tigtukod, nga nag-instalar na sa mga dependency niini:

pip3 install -r requirements.txt
./main.py build -f [ΠΊΠΎΠ½Ρ„ΠΈΠ³_Ρ„Π°ΠΉΠ»].yaml -r [Π½ΠΎΠΌΠ΅Ρ€_Ρ€Π΅Π²ΠΈΠ·ΠΈΠΈ]

Ang rebisyon nga numero dinhi kay opsyonal ug gigamit alang sa pag-bersiyon sa mga asembliya. Gisulat kini sa meta nga impormasyon sa package, nga nagpasayon ​​sa pag-update sa mga server.
Gikan sa mga troso mahimo nimong bantayan kung unsa ang nahitabo. Ania ang usa ka pananglitan sa mga nag-unang punto:

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

Busa, sa pipila lang ka mga sugo, naghimo kami sa palibot ug sa gikinahanglan nga asembliya sa Nginx, ug ang package makita sa direktoryo diin ang script gilunsad.

Pag-embed

Mahimo usab natong i-integrate ang atong himan ngadto sa mga proseso sa CI/CD. Bisan unsa sa daghang mga sistema sa CI nga naa karon makatabang niini, pananglitan Teamcity o Gitlab CI.

Ingon nga resulta, sa matag higayon nga ang espesipikasyon mausab sa Git repository, ang pagtukod sa artifact awtomatik nga gilunsad. Ang rebisyon nga numero nalambigit sa build launch counter.
Sa gamay pa nga panahon, mahimo nimong i-configure ang artifact nga ipadala sa imong lokal nga repository sa package, Nexus, Artifactory, ug uban pa.

Ang usa ka dugang nga bentaha mao nga ang yaml configuration file mahimong konektado sa Ansible o lain nga automatic configuration system, ug gikan didto makuha nato ang version number ug package type nga gusto namong i-deploy.

Unsa ang sunod

Wala pa nahuman ang proyekto. Ania ang among gitrabaho karon:

  • Gipalapdan namon ang posibilidad sa pag-configure, apan sa samang higayon ipadayon kini nga yano kutob sa mahimo. Dili nimo gusto nga ipasabut ang usa ka libo nga mga parameter kung kinahanglan nimo ang duha, ug ang nahabilin mohaum sa default. Naglakip kini sa mga bandila sa kompilasyon (karon mahimo nimong usbon kini sa internal nga configuration file src/config.py), agianan sa pag-instalar, ug paglansad sa user.
  • Nagdugang kami mga kapilian alang sa awtomatikong pagpadala usa ka pakete sa lainlaing mga repositoryo sa artifact.
  • Ipatuman ang usa ka naandan nga mando kung nagkarga sa usa ka module (pananglitan, aron magamit github.com/nginx-modules/nginx_upstream_check_module kinahanglan una nimong i-apply ang usa ka patch sa usa ka piho nga bersyon)
  • Pagdugang mga pagsulay:
    • Ang package na-install sa husto.
    • Ang Nginx adunay gikinahanglan nga bersyon ug gitukod uban ang gikinahanglan nga mga bandila ug mga module.
    • Ang gikinahanglan nga mga agianan, mga asoy, ug uban pa gihimo.

Apan mahimo nimong gamiton kini nga himan karon, ug isugyot usab ang mga pagpaayo - github.com/TinkoffCreditSystems/Nginx-builder maayong pag-abot!

Source: www.habr.com

Idugang sa usa ka comment