F'dan l-artikolu ser nitkellem dwar il-problemi li ffaċċja t-tim tagħna meta pprepara balancers ibbażati fuqhom Nginx għal diversi proġetti. Ngħidlek ukoll dwar l-għodda li ppermettietni negħleb ħafna minnhom.
Nginx huwa proxy server multifunzjonali u li qed jiżviluppa b'mod attiv. Hija fiha numru kbir ta 'moduli, din mhix lista kompluta. Kull proġett jimponi ċerti rekwiżiti fuq il-funzjonalità tal-balancer u l-verżjoni ta 'Nginx (per eżempju, il-preżenza ta' http/2 u grpc proxy), u l-kompożizzjoni tal-moduli tiegħu.
Nixtiequ naraw verżjoni ġdida bis-sett meħtieġ ta 'moduli, li taħdem taħt distribuzzjoni speċifika tal-Linux. Fil-każ tagħna, dawn huma sistemi bbażati fuq deb u rpm. L-għażla bil-kontenituri mhix ikkunsidrata f'dan l-artikolu.
Irridu nbiddlu malajr il-funzjonalità tal-balancers tagħna. U hawnhekk immedjatament tqum il-mistoqsija: kif tikseb dan filwaqt li tonfoq l-inqas riżorsi possibbli? Ikun saħansitra aħjar li twaqqaf il-proċess sabiex inkunu nistgħu nispeċifikaw numru finit ta 'parametri ta' input, u fl-output nirċievu artifact fil-forma ta 'pakkett deb / rpm għall-OS mixtieq.
Bħala riżultat, għadd ta 'problemi jistgħu jiġu fformulati:
Mhux dejjem hemm pakketti bl-aħħar verżjoni ta 'Nginx.
M'hemm l-ebda pakketti bil-moduli meħtieġa.
Il-kumpilazzjoni u l-bini ta 'pakkett manwalment jieħu ħafna ħin u detta tedjanti.
M'hemm l-ebda deskrizzjoni ta 'kif din jew dik l-istanza Nginx hija mmuntata.
Biex issolvi dawn il-problemi, tqum il-ħtieġa għal għodda li tieħu bħala input speċifikazzjoni f'format li jinqara mill-bniedem u tgħaqqad pakkett Nginx bil-funzjonalità meħtieġa bbażata fuqha.
Ma sibna għażla adattata għalina fuq il-kobor ta 'Github, iddeċidejna li noħolqu l-għodda tagħna stess - nginx-bennej.
Speċifikazzjonijiet
Fl-għodda tagħna, ridna noħolqu deskrizzjoni tal-ispeċifikazzjoni fil-forma ta 'kodiċi, li mbagħad tista' titqiegħed f'repożitorju Git. Biex tagħmel dan, għażilna l-format familjari għal affarijiet bħal dawn - yaml. Eżempju ta' speċifikazzjoni:
Hawnhekk nindikaw li rridu naraw pakkett deb bil-verżjoni Nginx 1.14.2 bis-sett meħtieġ ta 'moduli. Is-sezzjoni bil-moduli hija fakultattiva. Għal kull wieħed minnhom tista' tissettja:
Isem.
Indirizz minn fejn tista' tiksbu:
Repożitorju Git. Tista 'wkoll tispeċifika fergħa jew tikketta.
Link tal-web tal-arkivju.
Link lokali għall-arkivju.
Xi moduli jeħtieġu dipendenzi addizzjonali biex jiġu installati, pereżempju nginx-auth-ldap jeħtieġ libldap2-dev installat. Id-dipendenzi meħtieġa jistgħu wkoll jiġu speċifikati meta jiddeskrivu l-modulu.
Ambjent
Fl-għodda tagħna tista 'malajr tikseb ambjent b'utilitajiet installati għal kumpilazzjoni, assemblaġġ ta' pakketti u softwer awżiljarju ieħor. Kontenitur Docker b'dak kollu li għandek bżonn huwa ideali hawn (ir-repożitorju diġà għandu ftit eżempji ta 'fajls Docker għal ubuntu u centos).
Wara li titfassal l-ispeċifikazzjoni u jiġi ppreparat l-ambjent, inniedu l-bennej tagħna, wara li installa d-dipendenzi tiegħu:
In-numru tar-reviżjoni hawnhekk huwa fakultattiv u jintuża għall-assemblaġġi tal-verżjoni. Huwa miktub fil-meta informazzjoni tal-pakkett, li jagħmilha faċli biex taġġorna fuq is-servers.
Miċ-zkuk tista' tissorvelja dak li qed jiġri. Hawn eżempju tal-punti ewlenin:
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'.
Allura, bi ftit kmandijiet biss, noħolqu l-ambjent u l-assemblaġġ Nginx meħtieġ, u l-pakkett jidher fid-direttorju minn fejn titnieda l-iskrittura.
Inkorporazzjoni
Nistgħu wkoll nintegraw l-għodda tagħna fil-proċessi CI/CD. Kwalunkwe mill-ħafna sistemi CI eżistenti llum jistgħu jgħinu f'dan, pereżempju Teamcity jew Gitlab CI.
Bħala riżultat, kull darba li l-ispeċifikazzjoni tinbidel fir-repożitorju Git, il-bini tal-artifact titnieda awtomatikament. In-numru tar-reviżjoni huwa marbut mal-counter tat-tnedija tal-bini.
Bi ftit aktar ħin, tista 'tikkonfigura l-artifact biex jintbagħat lir-repożitorju tal-pakketti lokali tiegħek, Nexus, Artifactory, eċċ.
Vantaġġ addizzjonali huwa li l-fajl ta 'konfigurazzjoni yaml jista' jiġi konness ma 'Ansible jew sistema ta' konfigurazzjoni awtomatika oħra, u minn hemm nistgħu nieħdu n-numru tal-verżjoni u t-tip ta 'pakkett li rridu niskjeraw.
X'hemm Li jmiss
Il-proġett għadu mhux lest. Hawn dak li qed naħdmu fuqu issa:
Aħna nespandu l-possibbiltà ta 'konfigurazzjoni, iżda fl-istess ħin inżommuha sempliċi kemm jista' jkun. Ma tridx tiddefinixxi elf parametru jekk għandek bżonn tnejn biss, u l-bqija jaqbel awtomatikament. Dan jinkludi bnadar ta 'kumpilazzjoni (issa tista' tbiddelhom fil-fajl tal-konfigurazzjoni interna src/config.py), mogħdija ta 'installazzjoni, u utent tal-varar.
Qed inżidu għażliet biex nibagħtu awtomatikament pakkett lil diversi repożitorji tal-artifact.