Waxaanu ku ururinay Nginx-keena dhawr amarro

Hello!
Magacaygu waa Sergey, waxaan u shaqeeyaa sidii injineer kaabayaasha kooxda API ee tinkoff.ru platform.

Maqaalkan waxaan kaga hadli doonaa dhibaatooyinka ay kooxdeenu la kulantay markii ay diyaarinayeen dheelliyaal ku salaysan Nginx mashaariic kala duwan. Waxaan sidoo kale kuu sheegi doonaa qalabka ii oggolaaday inaan ka adkaado intooda badan.

Nginx waa hawl-fulin badan oo si firfircoon u horumarinaya server-ka wakiil. Waxay leedahay tiro badan oo modules ah, Tani maaha liis dhamaystiran. Mashruuc kastaa wuxuu soo rogayaa shuruudo gaar ah oo ku saabsan shaqeynta dheelitiriyaha iyo nooca Nginx (tusaale ahaan, joogitaanka http/2 iyo grpc proxying), iyo halabuurka cutubkiisa.

Waxaan jeclaan lahayn inaan aragno nooc cusub oo wata cutubyada loo baahan yahay, oo hoos imanaya qaybinta Linux gaar ah. Xaaladeena, kuwani waa nidaamyo deb-iyo rpm ku salaysan. Doorashada weelasha laguma tixgelin qodobkan.

Waxaan rabnaa inaan si deg deg ah u bedelno shaqeynta dheelitirayaashayada. Oo halkan su'aashu waxay isla markiiba soo baxaysaa: sida loo gaaro tan iyadoo la isticmaalayo inta ugu yar ee suurtogalka ah? Xitaa way ka fiicnaan lahayd in la dejiyo habka si aan u qeexno tiro xaddidan oo xaddidaad ah, iyo marka la soo saaro hel artifact qaab xirmo deb/rpm OS la doonayo.

Natiijo ahaan, dhibaatooyin dhowr ah ayaa la diyaarin karaa:

  • Had iyo jeer ma jiraan xirmo wata nooca ugu dambeeyay ee Nginx.
  • Ma jiraan baakado leh cutubyada loo baahan yahay.
  • Ururinta iyo dhisidda xirmo gacanta ah waa waqti badan oo aad loo daaliyo.
  • Ma jirto sharraxaad ku saabsan sida tan ama tan Nginx loo soo ururiyey.

Si loo xalliyo dhibaatooyinkan, baahida loo qabo qalab u qaadan lahaa qayb ka mid ah qeexitaan qaab aadanaha-akhrisan karo oo kulmin xirmo Nginx ah oo leh shaqada lagama maarmaanka ah iyada oo ku saleysan.

Anagoo helin ikhtiyaar ku habboon annaga xagga baaxadda Github, waxaan go'aansannay inaan abuurno qalab noo gaar ah - nginx-dhise.

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

Qalabkayaga, waxaan rabnay inaan abuurno sharaxaad ku saabsan qaabka koodka, kaas oo markaa lagu dhejin karo kaydka Git. Si tan loo sameeyo, waxaan dooranay qaabka caanka ah ee waxyaabahan oo kale - yaml. Tusaalaha gaarka ah:

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

Halkan waxaan ku muujineynaa inaan rabno inaan aragno xirmo deb ah oo leh nooca Nginx 1.14.2 oo leh cutubyada loo baahan yahay. Qaybta leh modules waa ikhtiyaari. Mid kasta oo iyaga ka mid ah waxaad u dejin kartaa:

  • Magaca.
  • Cinwaanka meesha aad ka heli karto:
    • Kaydka Git Waxa kale oo aad cayimi kartaa laan ama sumad.
    • Kaydi isku xirka shabakada
    • Isku xirka maxaliga ah ee kaydka

Qaybaha qaarkood waxay u baahan yihiin ku-tiirsanaan dheeri ah si loo rakibo, tusaale nginx-auth-ldap waxay u baahan tahay libldap2-dev in la rakibo. Ku-tiirsanaanta lama huraanka ah sidoo kale waa la cayimi karaa marka la qeexayo cutubka.

Deegaanka

Qalabkayaga waxaad si dhakhso ah u heli kartaa jawi leh qalab rakiban oo loogu talagalay isku-dubarid, isku-dubarid xirmo iyo software kale oo caawiya. Weelka Docker oo leh wax kasta oo aad u baahan tahay ayaa halkan ku habboon (kaydka ayaa horeba u lahaa dhowr tusaale oo ah faylasha Docker ee ubuntu iyo centos).

Ka dib marka la qeexo oo deegaanka la diyaariyo, waxaanu bilaabaynaa dhisahayaga, anagoo hore u rakibnay ku tiirsanaanta:

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

Nambarka dib u eegistu halkan waa ikhtiyaari waxaana loo istcimaalaa samaynta shirarka. Waxay ku qoran tahay macluumaadka meta ee xirmada, taasoo sahlaysa in lagu cusboonaysiiyo server-yada.
Laga soo bilaabo diiwaanka waxaad kala socon kartaa waxa dhacaya. Waa kuwan tusaale ka mid ah qodobbada ugu muhiimsan:

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

Markaa, iyada oo dhawr amarro ah, waxaanu abuurnaa deegaanka iyo golaha loo baahan yahay ee Nginx, baakidhkuna wuxuu ka muuqdaa tusaha halka qoraalka laga bilaabay.

Isku-xidhka

Waxaan sidoo kale ku dari karnaa qalabkayaga hababka CI/CD. Mid kasta oo ka mid ah nidaamyada CI ee badan ee jira maanta ayaa kaa caawin kara tan, tusaale ahaan Koox ahaan ama Gitlab CI.

Natiijo ahaan, mar kasta oo qeexiddu isbedesho bakhaarka Git, dhismaha artifact si toos ah ayaa loo bilaabay. Nambarka dib u eegisku wuxuu ku xidhan yahay miiska soo saarista dhismaha.
Waqti yar oo dheeri ah, waxaad habayn kartaa farshaxanka si loogu soo diro kaydka xirmada deegaankaaga, Nexus, Farshaxanka, iyo wixii la mid ah.

Faa'iidada dheeraadka ah ayaa ah in faylka qaabeynta yaml lagu xiri karo Ansible ama nidaam kale oo isku-dubbarid oo toos ah, halkaasna waxaan ka qaadan karnaa lambarka nooca iyo nooca xirmada ee aan dooneyno inaan geyno.

Maxaa ku xiga

Mashruucu wali ma dhamaan. Waa kan waxa aan hadda ka shaqaynayno:

  • Waxaan ballaarineynaa suurtagalnimada qaabeynta, laakiin isla markaaba u dhig sida ugu fudud ee suurtogalka ah. Ma rabto inaad qeexdo kun cabbir haddii aad u baahan tahay laba kaliya, inta soo hartayna waxay ku habboon tahay default. Tan waxa ku jira calamada la soo ururiyey (hadda waxaad ku beddeli kartaa faylka qaabeynta gudaha src/config.py), dariiqa rakibaadda, iyo isticmaale bilowga ah.
  • Waxaan ku dareynaa ikhtiyaarka ah in si toos ah loogu diro xirmo goobo farshaxan oo kala duwan.
  • Fuli amarka gaarka ah marka la shubayo moduleka (tusaale ahaan, si aad u isticmaasho github.com/nginx-modules/nginx_upstream_check_module marka hore waa inaad dalbataa balastar nooc gaar ah)
  • Ku darida imtixaanada:
    • Xirmada si sax ah ayaa loo rakibay.
    • Nginx waxay leedahay nooca loo baahan yahay waxaana lagu dhisay calamada iyo cutubyada loo baahan yahay.
    • Wadooyinka lagama maarmaanka ah, xisaabaadka, iyo wixii la mid ah ayaa la abuuray.

Laakin waxaad isticmaali kartaa qalabkan hadda, sidoo kale waxaad soo jeedin kartaa horumarin - github.com/TinkoffCreditSystems/Nginx-builder soo dhawaada!

Source: www.habr.com

Add a comment