Rydyn ni'n cydosod ein Nginx gyda chwpl o orchmynion
Hi!
Fy enw i yw Sergey, rwy'n gweithio fel peiriannydd seilwaith yn nhîm API y platfform tinkoff.ru.
Yn yr erthygl hon byddaf yn siarad am y problemau a wynebodd ein tîm wrth baratoi balanswyr yn seiliedig ar Nginx ar gyfer prosiectau amrywiol. Byddaf hefyd yn dweud wrthych am yr offeryn a ganiataodd i mi oresgyn y rhan fwyaf ohonynt.
Mae Nginx yn weinydd dirprwy amlswyddogaethol sy'n datblygu'n weithredol. Mae'n cynnwys nifer fawr o fodiwlau, nid yw hon yn rhestr gyflawn. Mae pob prosiect yn gosod gofynion penodol ar ymarferoldeb y balancer a'r fersiwn o Nginx (er enghraifft, presenoldeb http/2 a grpc proxying), a chyfansoddiad ei fodiwlau.
Hoffem weld fersiwn newydd gyda'r set ofynnol o fodiwlau, yn rhedeg o dan ddosbarthiad Linux penodol. Yn ein hachos ni, mae'r rhain yn systemau sy'n seiliedig ar deb- a rpm. Nid yw'r opsiwn gyda chynwysyddion yn cael ei ystyried yn yr erthygl hon.
Rydym am newid ymarferoldeb ein balanswyr yn gyflym. Ac yma mae'r cwestiwn yn codi ar unwaith: sut i gyflawni hyn wrth wario cyn lleied o adnoddau â phosib? Byddai hyd yn oed yn well sefydlu'r broses fel y gallwn nodi nifer gyfyngedig o baramedrau mewnbwn, ac yn yr allbwn derbyn arteffact ar ffurf pecyn deb / rpm ar gyfer yr OS a ddymunir.
O ganlyniad, gellir llunio nifer o broblemau:
Nid oes pecynnau bob amser gyda'r fersiwn ddiweddaraf o Nginx.
Nid oes unrhyw becynnau gyda'r modiwlau gofynnol.
Mae llunio ac adeiladu pecyn â llaw yn cymryd llawer o amser ac yn gwbl ddiflas.
Nid oes unrhyw ddisgrifiad o sut mae'r enghraifft hon neu'r enghraifft Nginx honno'n cael ei chydosod.
Er mwyn datrys y problemau hyn, mae'r angen yn codi am offeryn a fyddai'n cynnwys manyleb mewn fformat y gall pobl ei ddarllen ac yn cydosod pecyn Nginx gyda'r swyddogaeth angenrheidiol yn seiliedig arno.
Heb ddod o hyd i opsiwn addas i ni ar ehangder Github, fe benderfynon ni greu ein teclyn ein hunain - nginx-adeiladydd.
Manylebau
Yn ein hofferyn, roeddem am greu disgrifiad o'r fanyleb ar ffurf cod, y gellir wedyn ei roi mewn ystorfa Git. I wneud hyn, fe ddewison ni'r fformat cyfarwydd ar gyfer pethau o'r fath - yaml. Enghraifft o fanyleb:
Yma rydym yn nodi ein bod am weld pecyn deb gyda fersiwn Nginx 1.14.2 gyda'r set ofynnol o fodiwlau. Mae'r adran gyda modiwlau yn ddewisol. Ar gyfer pob un ohonynt gallwch chi osod:
Enw.
Cyfeiriad lle gallwch ei gael:
Ystorfa Git. Gallwch hefyd nodi cangen neu dag.
Archif dolen we.
Dolen leol i'r archif.
Mae angen gosod dibyniaethau ychwanegol ar rai modiwlau, er enghraifft mae angen gosod libldap2-dev ar nginx-auth-ldap. Gellir hefyd nodi dibyniaethau angenrheidiol wrth ddisgrifio'r modiwl.
Amgylchedd
Yn ein hofferyn gallwch chi gael amgylchedd yn gyflym gyda chyfleustodau wedi'u gosod ar gyfer llunio, cydosod pecynnau a meddalwedd ategol arall. Mae cynhwysydd Docker gyda phopeth sydd ei angen arnoch yn ddelfrydol yma (mae gan yr ystorfa ychydig o enghreifftiau o ffeiliau Docker ar gyfer ubuntu a centos eisoes).
Ar ôl i'r fanyleb gael ei llunio a pharatoi'r amgylchedd, rydym yn lansio ein hadeiladwr, ar ôl gosod ei ddibyniaethau o'r blaen:
Mae'r rhif adolygu yma yn ddewisol ac fe'i defnyddir ar gyfer fersiynau fersiynau. Mae wedi'i ysgrifennu i mewn i wybodaeth meta y pecyn, gan ei gwneud hi'n hawdd ei diweddaru ar weinyddion.
O'r logiau gallwch fonitro beth sy'n digwydd. Dyma enghraifft o’r prif bwyntiau:
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'.
Felly, gyda dim ond cwpl o orchmynion, rydyn ni'n creu'r amgylchedd a'r cynulliad Nginx gofynnol, ac mae'r pecyn yn ymddangos yn y cyfeiriadur lle mae'r sgript yn cael ei lansio.
Gwreiddio
Gallwn hefyd integreiddio ein hofferyn i brosesau CI/CD. Gall unrhyw un o'r systemau CI niferus sy'n bodoli heddiw helpu gyda hyn, er enghraifft Teamcity neu Gitlab CI.
O ganlyniad, bob tro y bydd y fanyleb yn newid yn ystorfa Git, mae adeiladu'r arteffact yn cael ei lansio'n awtomatig. Mae'r rhif adolygu wedi'i gysylltu â'r rhifydd lansio adeiladu.
Gydag ychydig mwy o amser, gallwch chi ffurfweddu'r arteffact i'w anfon i'ch ystorfa pecyn lleol, Nexus, Artifactory, ac ati.
Mantais ychwanegol yw y gellir cysylltu ffeil ffurfweddu yaml ag Ansible neu system ffurfweddu awtomatig arall, ac oddi yno gallwn gymryd y rhif fersiwn a'r math o becyn yr ydym am ei ddefnyddio.
Beth sydd nesaf
Nid yw'r prosiect wedi'i gwblhau eto. Dyma beth rydyn ni'n gweithio arno nawr:
Rydym yn ehangu'r posibilrwydd o gyfluniad, ond ar yr un pryd yn ei gadw mor syml â phosib. Nid ydych am ddiffinio mil o baramedrau os mai dim ond dau sydd eu hangen arnoch, ac mae'r gweddill yn cyd-fynd yn ddiofyn. Mae hyn yn cynnwys baneri casglu (nawr gallwch eu newid yn y ffeil ffurfweddu mewnol src/config.py), llwybr gosod, a defnyddiwr lansio.
Rydym yn ychwanegu opsiynau ar gyfer anfon pecyn yn awtomatig i wahanol storfeydd arteffactau.