Tere!
Minu nimi on Sergei, ma töötan infrastruktuuriinsenerina tinkoff.ru API platvormi meeskonnas.
Selles artiklis rÀÀgin probleemidest, millega meie meeskond silmitsi seisis tasakaalustajate seadistamisel, mis pĂ”hinevad erinevate projektide jaoks. RÀÀgin ka tööriistast, mis aitas enamik probleeme ĂŒletada.
Nginx on multifunktsionaalne ja aktiivselt arenev pöördusserver. Sellel on palju mooduleid, . Igal projektijal on teatud nÔuded tasakaalustaja funktsionaalsusele ja Nginx-i versioonile (nÀiteks http/2 toe ja grpc edastamine) ning selle moodulite komplektile.
Soovime nĂ€ha uut versiooni vajaliku moodulite komplektiga, töötamas kindlal Linuxi distributsioonil. Meie puhul on need deb- ja rpm-pĂ”hised sĂŒsteemid. Konteinerite varianti ei kĂ€sitleta kĂ€esolevas artiklis.
Soovime kiiresti muuta oma tasakaalustajate funktsionaalsust. Ja siin kerkib kohe kĂŒsimus â kuidas seda saavutada, kasutades vĂ”imalikult vĂ€he ressursse? Ja veel parem, kui saaksime organiseerida protsessi nii, et saaksime sisendparameetreid mÀÀratleda ja vĂ€ljundina saada artefakti deb/rpm paketi kujul vajaliku operatsioonisĂŒsteemi jaoks.
SeetÔttu saame sÔnastada mitmed probleemid:
- Ei ole alati saadaval pakette uue Nginx-i versiooniga.
- Ei ole pakette vajalike moodulitega.
- Paketi kÀsitsi kompileerimine ja koostamine vÔtab palju aega ning on lihtsalt vÀsitav.
- Ei ole kirjeldust selle kohta, kuidas on kokku pandud teatud Nginx-i instants.
Nende probleemide lahendamiseks tuleb leida tööriist, mis vÔtaks vastu spetsifitseeringu inimloetavas vormingus ja koostaks selle pÔhjal vajalikku funktsionaalsust pakkuva Nginx-i paketi.
Leides GitHubist sobivat varianti ei Ă”nnestunud, otsustasime luua oma tööriista â .
Spetsifikatsioonid
Meie tööriistas soovisime luua spetsifikatsiooni kirjelduse koodi kujul, mille seejĂ€rel vĂ”iks panna Git-repositooriumisse. Selleks valisime selliste asjade jaoks tuttava formaadi â yaml. Spetsifikatsiooni nĂ€ide:
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
Siin mÀÀrame, et tahame nĂ€ha deb-paketti versiooniga Nginx 1.14.2 ja soovitud moodulite kogum. Moodulite sektsioon on valikuline. IgaĂŒhe jaoks saab mÀÀrata:
- Nimi.
- Aadress, kus see saadaval on:
- Git-repositoorium. Samuti saab mÀÀrata haru vÔi sildi.
- Veebiviide arhiivile.
- Kohalik link arhiivile.
MÔned moodulid vajavad tÀiendavate sÔltuvuste installimist, nÀiteks nginx-auth-ldap jaoks on vajalik libldap2-dev. Vajalikud sÔltuvused saab samuti mÀÀrata mooduli kirjelduses.
Keskkond
Meie tööriist vÔimaldab kiiresti hankida keskkonna koos installitud utiliitidega paketi kompileerimiseks, ehitamiseks ja muuks abitarkvaraks. Siin sobib kÔige paremini docker-konteiner, milles on kÔik vajalik (repositooriumis on juba paar docker-faili nÀidet ubuntu ja centos jaoks).
PÀrast spetsifikatsiooni koostamist ja keskkonna ettevalmistamist kÀivitame meie kogujat, eelnevalt installides selle sÔltuvused:
pip3 install -r requirements.txt
./main.py build -f [konfig_fail].yaml -r [reviseerimise_numbriga]
Reviseerimisnumber on siia valikuline ja teenib versioonide haldamise eesmÀrki. See kantakse paketi meta-informatsiooni, mis vÔimaldab seda serverites hÔlpsasti uuendada.
Logide kaudu saab jÀlgida, mis toimub. Siin on nÀide peamistest hetkedest:
builder - INFO - Yaml faili parsimine: example.config.yaml
builder - INFO - Skriptide allalaadimine deb paketi ehitamiseks
builder - INFO - Allalaadimine nginx src...
builder - INFO - --> http://nginx.org/download/nginx-1.14.1.tar.gz
builder - INFO - Allalaadimine 3d-party mooduleid...
builder - INFO - Moodul nginx-auth-ldap laaditakse alla harult
builder - INFO - -- Tehtud: nginx-auth-ldap
builder - INFO - -- Tehtud: ngx_http_substitutions_filter_module
builder - INFO - Moodul headers-more-nginx-module laaditakse alla
builder - INFO - Moodul nginx-module-vts laaditakse alla sildi jÀrgi
builder - INFO - -- Tehtud: nginx-module-vts
builder - INFO - Moodul ngx_devel_kit laaditakse alla sildi jÀrgi
builder - INFO - -- Tehtud: ngx_devel_kit
builder - INFO - -- Tehtud: ngx_cache_purge
builder - INFO - -- Tehtud: ngx_http_dyups_module
builder - INFO - Allalaadimine sÔltuvustest
builder - INFO - .deb paketi ehitamine
builder - INFO - KĂ€ivitamine 'dh_make'...
builder - INFO - KĂ€ivitamine 'dpkg-buildpackage'...
dpkg-deb: ehitamine pakett 'nginx' asukohas '..\/nginx_1.14.1-1_amd64.deb'.
Nii, paarikaupa kÀsuga loome keskkonna ja vajaliku Nginx'i ehituse, ning pakett ilmub katalooge, millest skript kÀivitatakse.
Sisseehitamine
Samuti saame oma tööriista integreerida CI/CD protsessidesse. Seda saab aidata ĂŒks paljusid tĂ€napĂ€eval olemasolevaid CI sĂŒsteeme, nĂ€iteks vĂ”i .
LÔppkokkuvÔttes kÀivitatakse artefakti koostamine automaatselt iga muudatuse korral spetsifikatsioonis Git-i repos.
Veidi rohkem aega investeerides on vÔimalik seadistada artefakti saatmine kohalikku pakettide hoidlasse, Nexus, Artifactory jne.
Lisaeelisena on see, et konfigureerimise yaml-faili saab integreerida Ansible'i vĂ”i muusse automaatse konfigureerimise sĂŒsteemi, ning vĂ”tta sealt versiooni ja paketi tĂŒĂŒbi numbrid, mida soovime juurutada.
Mis edasi
Projekt ei ole veel lÔpetatud. Siin on, millega me praegu töötame:
- Kohandamise vĂ”imaluste laiendamine, sĂ€ilitades samal ajal selle vĂ”imalikult lihtsana. Ei taha mÀÀrata tuhandet parameetrit, kui vajame vaid kahte, samas kui ĂŒlejÀÀnud sobib vaikimisi. See hĂ”lmab kompileerimise lippe (praegu saab neid muuta sisemises konfigureerimise failis src/config.py), installimise teed, kasutajat kĂ€ivitamiseks.
- Lisame vÔimalused paketi automaatseks saatmiseks erinevatesse artefaktide hoidlatesse.
- Kasutaja kÀsu tÀitmine mooduli laadimisel (nt kasutamiseks peab esmalt rakendama teatud versiooni paranduse)
- Lisame testide teostamise:
- Pakett installitakse Ôigesti.
- Nginx'il on vajalik versioon ja see on koostatud vajalike lippude ja moodulitega.
- Loodud on vajalikud teed, kontod jne.
Kuid saate seda tööriista juba praegu kasutada ning pakkuda tĂ€iustusi â teretulemast!
Allikas: habr.com
