A ṣe apejọ Nginx wa pẹlu awọn aṣẹ meji

Hi!
Orukọ mi ni Sergey, Mo ṣiṣẹ bi ẹlẹrọ amayederun ni ẹgbẹ API ti pẹpẹ tinkoff.ru.

Ninu nkan yii Emi yoo sọrọ nipa awọn iṣoro ti ẹgbẹ wa dojuko nigbati o ngbaradi awọn iwọntunwọnsi ti o da lori Nginx fun orisirisi ise agbese. Emi yoo tun sọ fun ọ nipa ọpa ti o gba mi laaye lati bori pupọ julọ wọn.

Nginx jẹ multifunctional ati olupin aṣoju ti n dagbasoke ni itara. O ni nọmba nla ti awọn modulu, eyi kii ṣe atokọ pipe. Ise agbese kọọkan fa awọn ibeere kan lori iṣẹ-ṣiṣe ti iwọntunwọnsi ati ẹya Nginx (fun apẹẹrẹ, wiwa http/2 ati proxying grpc), ati akojọpọ awọn modulu rẹ.

A yoo fẹ lati rii ẹya tuntun pẹlu eto awọn modulu ti o nilo, ti nṣiṣẹ labẹ pinpin Linux kan pato. Ninu ọran wa, iwọnyi jẹ awọn eto ipilẹ-deb ati rpm. Aṣayan pẹlu awọn apoti ko ni imọran ninu nkan yii.

A fẹ lati yipada iṣẹ-ṣiṣe ti awọn iwọntunwọnsi wa ni kiakia. Ati nibi ibeere naa waye lẹsẹkẹsẹ: bawo ni a ṣe le ṣaṣeyọri eyi lakoko lilo awọn orisun diẹ bi o ti ṣee? Yoo dara julọ paapaa lati ṣeto ilana naa ki a le ṣalaye nọmba ipari ti awọn aye titẹ sii, ati ni iṣelọpọ gba ohun-ọṣọ kan ni irisi package deb/rpm fun OS ti o fẹ.

Bi abajade, ọpọlọpọ awọn iṣoro le ṣe agbekalẹ: +

  • Ko si awọn idii nigbagbogbo pẹlu ẹya tuntun ti Nginx.
  • Ko si awọn idii pẹlu awọn modulu ti a beere.
  • Ṣiṣakojọpọ ati kikọ package pẹlu ọwọ jẹ akoko n gba ati pe o nira pupọ.
  • Ko si apejuwe bi eyi tabi apẹẹrẹ Nginx ṣe pejọ.

Lati yanju awọn iṣoro wọnyi, iwulo wa fun ohun elo kan ti yoo gba bi titẹ sipesifikesonu ni ọna kika kika eniyan ati pejọ package Nginx kan pẹlu iṣẹ ṣiṣe pataki ti o da lori rẹ.

Laisi wiwa aṣayan ti o yẹ fun wa lori titobi Github, a pinnu lati ṣẹda ohun elo tiwa - nginx-akọle.

Awọn alaye pato (satunkọ)

Ninu ọpa wa, a fẹ lati ṣẹda apejuwe ti sipesifikesonu ni irisi koodu, eyiti o le fi sii sinu ibi ipamọ Git kan. Lati ṣe eyi, a yan ọna kika ti o mọ fun iru nkan bẹẹ - yaml. Apeere pato:

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

Nibi a fihan pe a fẹ lati rii package deb pẹlu ẹya Nginx 1.14.2 pẹlu eto ti a beere ti awọn modulu. Awọn apakan pẹlu awọn modulu jẹ iyan. Fun ọkọọkan wọn o le ṣeto:

  • Oruko.
  • Adirẹsi nibiti o ti le gba:
    • Ibi ipamọ Git. O tun le pato ẹka tabi tag.
    • Archive ayelujara ọna asopọ.
    • Ọna asopọ agbegbe si ile ifi nkan pamosi.

Diẹ ninu awọn modulu nilo afikun awọn igbẹkẹle lati fi sori ẹrọ, fun apẹẹrẹ nginx-auth-ldap nilo fifi sori ẹrọ libldap2-dev. Awọn igbẹkẹle pataki le tun jẹ pato nigbati o n ṣalaye module naa.

Ayika

Ninu ọpa wa o le yara gba agbegbe kan pẹlu awọn ohun elo ti a fi sori ẹrọ fun akopọ, apejọ package ati sọfitiwia oluranlọwọ miiran. Apoti Docker pẹlu ohun gbogbo ti o nilo jẹ apẹrẹ nibi (ibi ipamọ tẹlẹ ti ni awọn apẹẹrẹ meji ti awọn faili Docker fun ubuntu ati centos).

Lẹhin ti o ti fa sipesifikesonu ati agbegbe ti pese sile, a ṣe ifilọlẹ olupilẹṣẹ wa, ti fi sori ẹrọ awọn igbẹkẹle rẹ tẹlẹ:

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

Nọmba atunyẹwo nibi jẹ iyan ati pe o lo fun awọn apejọ ti ikede. O ti kọ sinu alaye meta ti package, jẹ ki o rọrun lati ṣe imudojuiwọn lori olupin.
Lati awọn akọọlẹ o le ṣe atẹle ohun ti n ṣẹlẹ. Eyi ni apẹẹrẹ ti awọn aaye akọkọ:

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

Nitorinaa, pẹlu awọn aṣẹ meji kan, a ṣẹda agbegbe ati apejọ Nginx ti o nilo, ati package naa han ninu itọsọna lati ibiti a ti ṣe ifilọlẹ iwe afọwọkọ naa.

Ifisinu

A tun le ṣepọ ọpa wa sinu awọn ilana CI/CD. Eyikeyi ninu ọpọlọpọ awọn eto CI ti o wa loni le ṣe iranlọwọ pẹlu eyi, fun apẹẹrẹ Teamcity tabi Gitlab CI.

Bi abajade, ni gbogbo igba ti sipesifikesonu yipada ni ibi ipamọ Git, kikọ ohun-ọṣọ naa jẹ ifilọlẹ laifọwọyi. Nọmba àtúnyẹwò ti sopọ mọ counter ifilọlẹ Kọ.
Pẹlu akoko diẹ diẹ sii, o le tunto artifact lati firanṣẹ si ibi ipamọ package agbegbe rẹ, Nesusi, Artifacty, ati bẹbẹ lọ.

Anfani afikun ni pe faili atunto yaml le sopọ si Ansible tabi eto atunto adaṣe adaṣe miiran, ati pe lati ibẹ a le mu nọmba ẹya ati iru package ti a fẹ gbe lọ.

Kini atẹle

Ise agbese na ko tii pari. Eyi ni ohun ti a n ṣiṣẹ lori ni bayi:

  • A faagun awọn seese ti iṣeto ni, sugbon ni akoko kanna pa o bi o rọrun bi o ti ṣee. O ko fẹ lati ṣalaye ẹgbẹrun awọn paramita ti o ba nilo meji nikan, ati pe iyokù baamu nipasẹ aiyipada. Eyi pẹlu awọn asia akopo (bayi o le yi wọn pada ninu faili iṣeto inu src/config.py), ọna fifi sori ẹrọ, ati olumulo ifilọlẹ.
  • A n ṣafikun awọn aṣayan fun fifiranṣẹ package kan laifọwọyi si ọpọlọpọ awọn ibi ipamọ ohun-ọṣọ.
  • Ṣiṣe aṣẹ aṣa nigbati o ba n ṣajọpọ module kan (fun apẹẹrẹ, lati lo github.com/nginx-modules/nginx_upstream_check_module o gbọdọ kọkọ lo alemo ti ẹya kan pato)
  • Awọn idanwo afikun:
    • Awọn package ti fi sori ẹrọ ti tọ.
    • Nginx ni ẹya ti o nilo ati pe a ṣe pẹlu awọn asia ti o nilo ati awọn modulu.
    • Awọn ọna pataki, awọn akọọlẹ, ati bẹbẹ lọ ni a ṣẹda.

Ṣugbọn o le lo ọpa yii ni bayi, ati tun daba awọn ilọsiwaju - github.com/TinkoffCreditSystems/Nginx-builder kaabo!

orisun: www.habr.com

Fi ọrọìwòye kun