Gure Nginx komando pare batekin muntatzen dugu

Hi!
Nire izena Sergey da, azpiegitura ingeniari gisa lan egiten dut tinkoff.ru plataformako API taldean.

Artikulu honetan gure taldeak orekatzaileak prestatzeko orduan izan zituen arazoei buruz hitz egingo dut nginx hainbat proiektutarako. Gehienak gainditzeko aukera eman zidan tresnaren berri ere emango dizut.

Nginx funtzio anitzeko eta aktiboki garatzen duen proxy zerbitzaria da. Modulu ugari ditu, hau ez da zerrenda osoa. Proiektu bakoitzak baldintza batzuk ezartzen ditu orekatzailearen funtzionaltasunari eta Nginx-en bertsioari (adibidez, http/2 eta grpc proxy-aren presentzia), eta bere moduluen osaeran.

Bertsio berri bat ikusi nahiko genuke behar den modulu-multzoarekin, Linux banaketa zehatz baten pean exekutatzen. Gure kasuan, deb eta rpm-n oinarritutako sistemak dira. Artikulu honetan ez da edukiontzien aukera kontuan hartzen.

Gure orekatzaileen funtzionaltasuna azkar aldatu nahi dugu. Eta hemen berehala sortzen da galdera: nola lortu hori ahalik eta baliabide gutxien gastatuz? Are hobea izango litzateke prozesua konfiguratzea, sarrerako parametro kopuru finitu bat ezarri ahal izateko, eta irteeran artefaktu bat jaso nahi dugun OSrako deb/rpm pakete moduan.

Ondorioz, hainbat arazo plantea daitezke:

  • Ez dago beti Nginx-en azken bertsioa duten paketeak.
  • Ez dago behar diren moduluak dituen paketerik.
  • Pakete bat eskuz konpilatzea eta eraikitzea denbora asko eta guztiz aspergarria da.
  • Ez dago Nginx instantzia hau edo hura nola muntatzen den deskribatzen.

Arazo hauek konpontzeko, tresna baten beharra sortzen da, sarrera gisa zehaztapen bat hartuko lukeen gizakiak irakurtzeko moduko formatuan eta Nginx pakete bat muntatuko luke bertan oinarritutako beharrezko funtzionalitatearekin.

Github-en zabaltasunean aukera egokirik aurkitu ez genuenez, gure tresna propioa sortzea erabaki genuen - nginx-eraikitzailea.

Zehaztapenak

Gure tresnan, zehaztapenaren deskribapen bat sortu nahi izan dugu kode moduan, gero Git biltegi batean sartu ahal izateko. Horretarako, horrelako gauzetarako ezaguna den formatua aukeratu dugu - yaml. Zehaztapen adibidea:

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

Hemen adierazten dugu Nginx 1.14.2 bertsioarekin deb pakete bat ikusi nahi dugula beharrezko modulu multzoarekin. Moduluak dituen atala hautazkoa da. Horietako bakoitzarentzat ezar dezakezu:

  • Izena.
  • Helbidea non eskuratu dezakezun:
    • Git biltegia. Adarra edo etiketa bat ere zehaztu dezakezu.
    • Artxiboaren web esteka.
    • Artxiborako esteka lokala.

Modulu batzuek menpekotasun gehigarriak instalatu behar dituzte, adibidez nginx-auth-ldap-ek libldap2-dev instalatu behar du. Beharrezko mendekotasunak ere zehaztu daitezke modulua deskribatzerakoan.

Ingurumena

Gure tresnan azkar lor dezakezu konpilaziorako, paketeen muntatzeko eta beste software osagarri batzuk instalatutako utilitateekin ingurune bat. Behar duzun guztia duen Docker edukiontzi bat aproposa da hemen (biltegiak dagoeneko baditu Docker fitxategien adibide pare bat ubuntu eta centos-erako).

Zehaztapena egin eta ingurunea prestatu ondoren, gure eraikitzailea abiarazten dugu, aldez aurretik bere menpekotasunak instalatuta:

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

Hemen berrikuspen-zenbakia hautazkoa da eta bertsioak muntatzeko erabiltzen da. Paketearen metainformazioan idatzita dago, zerbitzarietan eguneratzea erraztuz.
Erregistroetatik gertatzen ari dena kontrolatu dezakezu. Hona hemen puntu nagusien adibide bat:

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

Beraz, literalki komando pare batekin ingurunea eta beharrezko Nginx muntaia sortzen dugu, eta paketea scripta abiarazten den direktorioan agertzen da.

Txertatzea

Gure tresna CI/CD prozesuetan ere integra dezakegu. Gaur egun dauden CI sistema askotako edozeinek lagundu dezake horretan, adibidez Teamcity edo Gitlab CI.

Ondorioz, Git biltegian zehaztapena aldatzen den bakoitzean, artefaktuaren eraikuntza automatikoki abiarazten da. Berrikuspen-zenbakia eraikitze-abiarazte-kontagailuari lotuta dago.
Denbora pixka bat gehiagorekin, artefaktua konfigura dezakezu zure tokiko paketeen biltegira, Nexus, Artifactory eta abarretara bidaltzeko.

Abantaila gehigarri bat yaml konfigurazio fitxategia Ansible edo beste konfigurazio sistema automatiko batera konektatu daitekeela da, eta hortik zabaldu nahi dugun bertsio zenbakia eta pakete mota har ditzakegu.

Zer da hurrengoa

Proiektua oraindik ez dago amaituta. Hona hemen zertan ari garen lanean:

  • Konfiguratzeko aukera zabaltzen dugu, baina, aldi berean, ahalik eta sinpleena mantentzen dugu. Ez dituzu mila parametro definitu nahi bi bakarrik behar badituzu, eta gainerakoak berez egokitzen dira. Honek konpilazio-markak barne hartzen ditu (orain src/config.py barneko konfigurazio fitxategian alda ditzakezu), instalazio-bidea eta abiarazteko erabiltzailea.
  • Pakete bat automatikoki hainbat artifaktu biltegietara bidaltzeko aukerak gehitzen ari gara.
  • Exekutatu komando pertsonalizatu bat modulu bat kargatzean (adibidez, erabiltzeko github.com/nginx-modules/nginx_upstream_check_module lehenik bertsio zehatz baten adabaki bat aplikatu behar duzu)
  • Probak gehitzea:
    • Paketea behar bezala instalatuta dago.
    • Nginx-ek beharrezko bertsioa du eta beharrezko bandera eta moduluekin eraikita dago.
    • Beharrezko bideak, kontuak eta abar sortzen dira.

Baina tresna hau erabil dezakezu orain, eta hobekuntzak ere iradoki ditzakezu - github.com/TinkoffCreditSystems/Nginx-builder ongi etorri!

Iturria: www.habr.com

Gehitu iruzkin berria