Timasonkhanitsa Nginx yathu ndi malamulo angapo

ΠŸΡ€ΠΈΠ²Π΅Ρ‚!
Dzina langa ndi Sergey, ndimagwira ntchito ngati injiniya wa zomangamanga mu gulu la API la nsanja ya tinkoff.ru.

M'nkhaniyi ndilankhula za mavuto omwe gulu lathu lidakumana nalo pokonzekera ma balancers potengera Nginx za ntchito zosiyanasiyana. Ndikuuzaninso za chida chomwe chinandilola kugonjetsa ambiri a iwo.

Nginx ndi seva ya proxy yogwira ntchito zambiri komanso yokhazikika. Ili ndi ma module ambiri, uwu si mndandanda wathunthu. Pulojekiti iliyonse imayika zofunikira zina pakugwira ntchito kwa balancer ndi mtundu wa Nginx (mwachitsanzo, kukhalapo kwa http/2 ndi grpc proxying), komanso mapangidwe ake.

Tikufuna kuwona mtundu watsopano wokhala ndi ma module ofunikira, omwe akuyenda pansi pa kugawa kwa Linux. Kwa ife, awa ndi machitidwe a deb- ndi rpm. Chosankha chokhala ndi zotengera sichikuganiziridwa m'nkhaniyi.

Tikufuna kusintha mwamsanga ntchito ya balancers athu. Ndipo apa funso limadza nthawi yomweyo: momwe mungakwaniritsire izi mukugwiritsa ntchito zinthu zochepa momwe mungathere? Zingakhale bwinonso kukhazikitsa ndondomekoyi kuti tithe kutchula chiwerengero chochepa cha magawo olowera, ndipo pazotulukapo tilandire chojambula mu mawonekedwe a deb/rpm phukusi la OS yomwe mukufuna.

Chifukwa chake, zovuta zingapo zitha kukhazikitsidwa:

  • Sikuti nthawi zonse mapaketi okhala ndi mtundu waposachedwa wa Nginx.
  • Palibe mapaketi okhala ndi ma module ofunikira.
  • Kupanga ndi kupanga phukusi pamanja ndi nthawi yambiri komanso yotopetsa.
  • Palibe kufotokozera momwe izi kapena chitsanzo cha Nginx chasonkhanitsidwa.

Kuti athetse mavutowa, pakufunika chida chomwe chingatenge ngati cholowetsamo mumtundu wowerengeka ndi anthu ndikusonkhanitsa phukusi la Nginx ndi ntchito yofunikira potengera izo.

Osapeza njira yoyenera kwa ife pa kukula kwa Github, tinaganiza zopanga chida chathu - nginx-builder.

Mafotokozedwe

Pachida chathu, tinkafuna kupanga kufotokozera kwazomwe zili mumtundu wa code, zomwe zitha kuyikidwa munkhokwe ya Git. Kuti tichite izi, tidasankha mtundu wodziwika bwino pazinthu zotere - yaml. Chitsanzo:

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

Apa tikuwonetsa kuti tikufuna kuwona phukusi la deb ndi mtundu wa Nginx 1.14.2 wokhala ndi ma module ofunikira. Gawo lokhala ndi ma module ndilosankha. Kwa aliyense wa iwo mutha kupanga:

  • Dzina.
  • Adilesi komwe mungapeze:
    • Git repository. Mukhozanso kufotokoza nthambi kapena tag.
    • Sungani ulalo wapaintaneti.
    • Ulalo wapafupi ndi zosungidwa zakale.

Ma module ena amafunikira zodalira zina kuti ziyikidwe, mwachitsanzo nginx-auth-ldap imafuna libldap2-dev kuyika. Kudalira kofunikira kungatchulidwenso pofotokoza gawoli.

Zachilengedwe

Mu chida chathu mutha kupeza mwachangu malo okhala ndi zida zomwe zidayikidwa kuti muphatikize, kuphatikiza phukusi ndi mapulogalamu ena othandizira. Chidebe cha Docker chokhala ndi chilichonse chomwe mungafune ndichabwino apa (malo osungira ali kale ndi zitsanzo zingapo zamafayilo a Docker a ubuntu ndi centos).

Mafotokozedwewo akapangidwa ndi chilengedwe chakonzedwa, timayambitsa omanga athu, atayikapo zodalira zake m'mbuyomu:

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

Nambala yokonzanso pano ndiyosasankha ndipo imagwiritsidwa ntchito pomasulira misonkhano. Zimalembedwa muzodziwitso za phukusi, zomwe zimapangitsa kuti zikhale zosavuta kusintha pa maseva.
Kuchokera pazipika mungathe kuwunika zomwe zikuchitika. Nachi chitsanzo cha mfundo zazikulu:

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

Kotero, ndi malamulo angapo chabe, timapanga chilengedwe ndi msonkhano wofunikira wa Nginx, ndipo phukusi likuwonekera mu bukhuli kuchokera kumene script imayambitsidwa.

Kuyika

Titha kuphatikizanso chida chathu munjira za CI/CD. Zina mwazinthu zambiri za CI zomwe zilipo masiku ano zingathandize pa izi, mwachitsanzo Teamcity kapena Gitlab CI.

Zotsatira zake, nthawi iliyonse yomwe mafotokozedwe akusintha munkhokwe ya Git, kumangidwa kwa chinthucho kumangoyambitsidwa. Nambala yokonzanso imalumikizidwa ndi kauntala yoyambira yomanga.
Pokhala ndi nthawi yochulukirapo, mutha kukonza chojambulacho kuti chitumizidwe kumalo osungira kwanuko, Nexus, Artifactory, ndi zina zotero.

Ubwino wowonjezera ndikuti fayilo yosinthira yaml imatha kulumikizidwa ku Ansible kapena njira ina yosinthira yokha, ndipo kuchokera pamenepo titha kutenga nambala yamtunduwu ndi mtundu wa phukusi womwe tikufuna kuyika.

Chotsatira

Ntchitoyi sinamalizidwebe. Nazi zomwe tikugwira pano:

  • Timakulitsa kuthekera kwa kasinthidwe, koma nthawi yomweyo sungani mophweka momwe tingathere. Simukufuna kufotokozera magawo chikwi ngati mukufuna awiri okha, ndipo ena onse amakwanira mwachisawawa. Izi zikuphatikiza mbendera zophatikiza (tsopano mutha kuzisintha mu fayilo yamkati src/config.py), njira yoyika, ndikuyambitsa wosuta.
  • Tikuwonjezera zosankha zotumizira zokha phukusi kumalo osiyanasiyana osungira zinthu zakale.
  • Perekani lamulo lokhazikika potsegula gawo (mwachitsanzo, kugwiritsa ntchito github.com/nginx-modules/nginx_upstream_check_module muyenera choyamba kuyika chigamba cha mtundu wina)
  • Kuwonjezera mayeso:
    • Phukusili limayikidwa bwino.
    • Nginx ili ndi mtundu wofunikira ndipo imamangidwa ndi mbendera ndi ma module ofunikira.
    • Njira zofunika, akaunti, ndi zina zotero zimapangidwa.

Koma mutha kugwiritsa ntchito chida ichi tsopano, ndikuwonetsanso zosintha - github.com/TinkoffCreditSystems/Nginx-builder bwino!

Source: www.habr.com

Kuwonjezera ndemanga