Sihlanganisa iNginx yethu kunye nemiyalelo embalwa

Sawubona!
Igama lam nguSergey, ndisebenza njengenjineli yeziseko zophuhliso kwiqela le-API yeqonga letinkoff.ru.

Kweli nqaku ndiza kuthetha ngeengxaki iqela lethu elijongene nazo xa lilungiselela abalinganisi ngokusekelwe kuzo Nginx kwiiprojekthi ezahlukeneyo. Ndiza kukuxelela ngesixhobo esindivumele ukuba ndoyise uninzi lwazo.

I-Nginx yi-multifunctional kwaye iphuhlisa ngokusebenzayo iseva yommeleli. Ibonisa inani elikhulu leemodyuli, olu ayiloluhlu olupheleleyo. Iprojekthi nganye ibeka iimfuno ezithile ekusebenzeni kwe-balancer kunye nenguqulo ye-Nginx (umzekelo, ubukho be-http/2 kunye ne-grpc proxying), kunye nokubunjwa kweemodyuli zayo.

Singathanda ukubona inguqulelo entsha eneseti efunekayo yeemodyuli, esebenza phantsi konikezelo oluthile lweLinux. Kwimeko yethu, ezi ziinkqubo ezisekwe kwi-deb- kunye ne-rpm. Inketho enezikhongozeli ayiqwalaselwa kweli nqaku.

Sifuna ukutshintsha ngokukhawuleza ukusebenza kwabalinganisi bethu. Kwaye apha umbuzo uvela ngokukhawuleza: njani ukufezekisa oku ngelixa uchitha izixhobo ezimbalwa ngangokunokwenzeka? Kuya kuba ngcono ngakumbi ukuseta inkqubo ukuze sikwazi ukukhankanya inani eliqinisekileyo leeparamitha zongeniso, kwaye kwisiphumo sifumane i-artifact ngendlela ye-deb/rpm package ye-OS efunwayo.

Ngenxa yoko, iingxaki ezininzi zinokuqulunqwa:

  • Akusoloko kukho iipakethe ezinenguqulelo yamva nje yeNginx.
  • Akukho zipakethe ezineemodyuli ezifunekayo.
  • Ukuqulunqa kunye nokwakha ipakethe ngesandla kudla ixesha kwaye kuyadinisa.
  • Akukho nkcazo yendlela le okanye loo mzekelo weNginx uhlanganiswe ngayo.

Ukucombulula ezi ngxaki, imfuno ivela kwisixhobo esiya kuthatha njengegalelo kwinkcazo kwifomathi efundeka ngumntu kwaye ihlanganise iphakheji ye-Nginx kunye nokusebenza okuyimfuneko ngokusekelwe kuyo.

Ukungafumani ukhetho olufanelekileyo kuthi kubukhulu beGithub, sigqibe kwelokuba senze esathu isixhobo- nginx-umakhi.

Iinkcukacha

Kwisixhobo sethu, besifuna ukwenza inkcazo yenkcazo ngendlela yekhowudi, enokuthi ifakwe kwindawo yokugcina iGit. Ukwenza oku, sikhethe ifomathi eqhelekileyo kwizinto ezinjalo - yaml. Umzekelo wokuchaza:

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

Apha sibonisa ukuba sifuna ukubona iphakheji ye-deb kunye ne-Nginx version 1.14.2 kunye neeseti ezifunekayo zeemodyuli. Icandelo elineemodyuli linokukhetha. Ngamnye kubo unokuseta:

  • Igama.
  • Idilesi apho unokuyifumana khona:
    • Uvimba weGit. Ungakhankanya kwakhona isebe okanye ithegi.
    • Gcina ikhonkco lewebhu.
    • Ikhonkco lendawo kwindawo yokugcina.

Ezinye iimodyuli zifuna ukuxhomekeka okongeziweyo ukuba kufakwe, umzekelo i-nginx-auth-ldap ifuna i-libldap2-dev ehlohliweyo. Ukuxhomekeka okuyimfuneko kunokuchazwa xa kuchazwa imodyuli.

Yendalo

Kwisixhobo sethu unokufumana indawo engqongileyo ngokukhawuleza enezixhobo ezifakiweyo zokuhlanganiswa, indibano yephakheji kunye nezinye iisoftware ezincedisayo. Isikhongozeli seDocker esinayo yonke into oyifunayo ilungile apha (indawo yokugcina sele inemizekelo embalwa yeefayile zeDocker zobuntu kunye neecentos).

Emva kokuba inkcazo yenziwe kwaye indalo ilungisiwe, sisungula umakhi wethu, sele efakele ukuxhomekeka kwayo ngaphambili:

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

Inombolo yohlaziyo apha ayinyanzelekanga kwaye isetyenziselwa uguqulelo lweendibano. Ibhalwe kulwazi lwemeta yephakheji, ikwenza kube lula ukuhlaziya kwiiseva.
Ukusuka kwizigodo unokubeka iliso okwenzekayo. Nanku umzekelo weengongoma eziphambili:

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

Ke, ngemiyalelo nje embalwa, senza okusingqongileyo kunye nendibano yeNginx efunekayo, kwaye iphakheji ibonakala kulawulo ukusuka apho iskripthi siqaliswe khona.

Ukufakela

Sinokudibanisa isixhobo sethu kwiinkqubo zeCI/CD. Naziphi na iinkqubo ezininzi zeCI ezikhoyo namhlanje zinokunceda ngale nto, umzekelo Iqela leqela okanye Gitlab CI.

Ngenxa yoko, ngalo lonke ixesha utshintsho oluchaziweyo kwindawo yokugcina iGit, ukwakhiwa kwe-artifact kuqaliswa ngokuzenzekelayo. Inombolo yohlaziyo idityaniswe nekhawuntara yokuqalisa ukwakha.
Ngexesha elincinci, ungaqwalasela i-artifact ukuba ithunyelwe kwindawo yakho yokugcina ipakethe, i-Nexus, i-Artifactory, njalo njalo.

Inzuzo eyongezelelweyo kukuba ifayile yoqwalaselo ye-yaml inokudityaniswa kwi-Ansible okanye enye inkqubo yoqwalaselo oluzenzekelayo, kwaye ukusuka apho sinokuthatha inombolo yenguqulo kunye nohlobo lwephakheji esifuna ukuyifaka.

Yintoni elandelayo

Iprojekthi ayikagqitywa. Nantsi into esisebenza ngayo ngoku:

  • Sandisa amathuba okucwangciswa, kodwa kwangaxeshanye sigcine silula kangangoko. Awufuni ukuchaza iwaka leeparamitha ukuba ufuna ezimbini kuphela, kwaye ezinye zilingana ngokuzenzekelayo. Oku kuquka iiflegi zokuqokelela (ngoku unokuzitshintsha kwifayile yoqwalaselo yangaphakathi src/config.py), indlela yokufaka, kunye nokuqaliswa komsebenzisi.
  • Songeza iinketho zokuthumela ipakethe ngokuzenzekelayo kwiindawo ezahlukeneyo zokugcina izinto zakudala.
  • Yenza umyalelo wesiko xa ulayisha imodyuli (umzekelo, ukusebenzisa github.com/nginx-modules/nginx_upstream_check_module kufuneka uqale ufake isiqwenga sohlobo oluthile)
  • Ukongeza iimvavanyo:
    • Iphakheji ifakwe ngokuchanekileyo.
    • I-Nginx inenguqu efunekayo kwaye yakhiwe ngeeflegi ezifunekayo kunye neemodyuli.
    • Iindlela eziyimfuneko, iiakhawunti, njalo njalo ziyadalwa.

Kodwa ungasebenzisa esi sixhobo ngoku, kwaye ucebise uphuculo- github.com/TinkoffCreditSystems/Nginx-builder wamkelekile!

umthombo: www.habr.com

Yongeza izimvo