Við setjum saman Nginx okkar með nokkrum skipunum

РџСЂРІРμы!
Ég heiti Sergey, ég vinn sem innviðaverkfræðingur í API teyminu á tinkoff.ru pallinum.

Í þessari grein mun ég tala um vandamálin sem teymið okkar stóð frammi fyrir við að útbúa jafnvægismenn út frá Nginx til ýmissa verkefna. Ég mun líka segja þér frá tólinu sem gerði mér kleift að sigrast á flestum þeirra.

Nginx er fjölvirkur proxy-þjónn sem er í virku þróun. Það býður upp á mikinn fjölda eininga, þetta er ekki tæmandi listi. Hvert verkefni setur ákveðnar kröfur um virkni jafnvægisbúnaðarins og útgáfu Nginx (til dæmis tilvist http/2 og grpc umboð), og samsetningu eininga þess.

Okkur langar til að sjá nýja útgáfu með nauðsynlegum einingum sem keyra undir tiltekinni Linux dreifingu. Í okkar tilviki eru þetta deb- og rpm-undirstaða kerfi. Valkosturinn með gámum er ekki tekinn til greina í þessari grein.

Við viljum fljótt breyta virkni jafnvægistækjanna okkar. Og hér vaknar strax spurningin: hvernig á að ná þessu með því að eyða eins litlu fjármagni og mögulegt er? Það væri enn betra að setja ferlið upp þannig að við getum tilgreint takmarkaðan fjölda inntaksbreytur og við úttakið fengið grip í formi deb/rpm pakka fyrir viðkomandi stýrikerfi.

Fyrir vikið er hægt að móta fjölda vandamála:

  • Það eru ekki alltaf pakkar með nýjustu útgáfunni af Nginx.
  • Það eru engir pakkar með nauðsynlegum einingum.
  • Að setja saman og smíða pakka handvirkt er tímafrekt og beinlínis leiðinlegt.
  • Það er engin lýsing á því hvernig þetta eða hitt Nginx tilvik er sett saman.

Til að leysa þessi vandamál skapast þörf fyrir tól sem myndi taka sem inntak forskrift á mönnum læsilegu sniði og setja saman Nginx pakka með nauðsynlegri virkni byggt á því.

Þar sem við fundum ekki viðeigandi valkost fyrir okkur á víðáttumiklu Github, ákváðum við að búa til okkar eigið tól - nginx-byggir.

Tæknilýsing

Í tólinu okkar vildum við búa til lýsingu á forskriftinni í formi kóða, sem síðan er hægt að setja í Git geymslu. Til að gera þetta völdum við sniðið sem er kunnuglegt fyrir slíka hluti - yaml. Dæmi um forskrift:

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

Hér gefum við til kynna að við viljum sjá deb pakka með Nginx útgáfu 1.14.2 með nauðsynlegu setti eininga. Hlutinn með einingum er valfrjáls. Fyrir hvert þeirra geturðu stillt:

  • Nafn.
  • Heimilisfang þar sem þú getur nálgast það:
    • Git geymsla. Þú getur líka tilgreint útibú eða merki.
    • Vefhlekkur í skjalasafn.
    • Staðbundin hlekkur á skjalasafnið.

Sumar einingar krefjast þess að fleiri ósjálfstæði séu sett upp, til dæmis þarf nginx-auth-ldap að libldap2-dev sé uppsett. Einnig er hægt að tilgreina nauðsynlegar ósjálfstæði þegar einingunni er lýst.

Umhverfið

Í tólinu okkar geturðu fljótt fengið umhverfi með uppsettum tólum fyrir samantekt, pakkasamsetningu og annan aukahugbúnað. Docker gámur með öllu sem þú þarft er tilvalinn hér (geymslan hefur nú þegar nokkur dæmi um Docker skrár fyrir Ubuntu og centos).

Eftir að forskriftin hefur verið samin og umhverfið undirbúið, ræsum við smiðinn okkar, eftir að hafa áður sett upp ósjálfstæði þess:

pip3 install -r requirements.txt
./main.py build -f [конфиг_файл].yaml -r [номер_ревизии]

Endurskoðunarnúmerið hér er valfrjálst og er notað fyrir útgáfu samsetningar. Það er skrifað inn í metaupplýsingar pakkans, sem gerir það auðvelt að uppfæra á netþjónum.
Úr skránum er hægt að fylgjast með því sem er að gerast. Hér er dæmi um aðalatriðin:

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

Svo, með aðeins nokkrum skipunum, búum við til umhverfið og nauðsynlega Nginx samsetningu og pakkinn birtist í möppunni þar sem handritið er ræst.

Innfelling

Við getum líka samþætt tólið okkar í CI/CD ferla. Einhver af mörgum CI kerfum sem eru til í dag getur hjálpað til við þetta, til dæmis Teamcity eða Gitlab CI.

Þar af leiðandi, í hvert sinn sem forskriftin breytist í Git geymslunni, er smíði gripsins ræst sjálfkrafa. Endurskoðunarnúmerið er tengt við ræsingarteljarann.
Með aðeins meiri tíma geturðu stillt gripinn þannig að hann verði sendur í pakkageymsluna þína, Nexus, Artifactory og svo framvegis.

Aukakostur er að hægt er að tengja yaml stillingarskrána við Ansible eða annað sjálfvirkt stillingarkerfi, og þaðan getum við tekið útgáfunúmerið og pakkagerðina sem við viljum dreifa.

Hvað er næst

Verkinu er enn ekki lokið. Hér er það sem við erum að vinna að núna:

  • Við víkkum út möguleika á stillingum en höldum því um leið eins einfalt og mögulegt er. Þú vilt ekki skilgreina þúsund færibreytur ef þú þarft aðeins tvær, og restin passar sjálfgefið. Þetta felur í sér safnflögg (nú geturðu breytt þeim í innri stillingarskránni src/config.py), uppsetningarslóð og ræst notanda.
  • Við erum að bæta við valkostum til að senda pakka sjálfkrafa í ýmsar gripageymslur.
  • Framkvæma sérsniðna skipun þegar eining er hlaðin (til dæmis til að nota github.com/nginx-modules/nginx_upstream_check_module þú verður fyrst að setja plástur af tiltekinni útgáfu)
  • Bætir við prófum:
    • Pakkinn er rétt settur upp.
    • Nginx er með nauðsynlega útgáfu og er smíðað með nauðsynlegum fánum og einingum.
    • Nauðsynlegar slóðir, reikningar og svo framvegis eru búnar til.

En þú getur notað þetta tól núna og einnig lagt til úrbætur - github.com/TinkoffCreditSystems/Nginx-builder velkominn!

Heimild: www.habr.com

Bæta við athugasemd