Hoʻākoakoa mākou i kā mākou Nginx me nā kauoha ʻelua

Alohaʻoe!
ʻO Sergey koʻu inoa, hana wau ma ke ʻano he ʻenekinia ʻenehana i ka hui API o ka tinkoff.ru platform.

Ma kēia ʻatikala e kamaʻilio wau e pili ana i nā pilikia i loaʻa i kā mākou hui i ka hoʻomākaukau ʻana i nā mea kaulike Nginx no nā papahana like ʻole. E haʻi pū wau iā ʻoe e pili ana i ka mea hana i hiki iaʻu ke lanakila i ka hapa nui o lākou.

ʻO Nginx kahi multifunctional a hoʻomohala ikaika i ka server proxy. Loaʻa iā ia kahi helu nui o nā modula, ʻAʻole kēia he papa inoa piha. Ke kau nei kēlā me kēia papahana i kekahi mau koi i ka hana o ka mea kaulike a me ka mana o Nginx (no ka laʻana, ka hele ʻana o ka http/2 a me ka grpc proxying), a me ke ʻano o kāna mau modula.

Makemake mākou e ʻike i kahi mana hou me ka hoʻonohonoho pono o nā modules, e holo ana ma lalo o kahi mahele Linux kikoʻī. I kā mākou hihia, ʻo kēia nā ʻōnaehana deb a me rpm. ʻAʻole i noʻonoʻo ʻia ka koho me nā ipu i kēia ʻatikala.

Makemake mākou e hoʻololi koke i ka hana o kā mākou mea kaulike. A eia koke ka nīnau: pehea e hoʻokō ai i kēia me ka hoʻolilo ʻana i nā kumuwaiwai liʻiliʻi? ʻOi aku ka maikaʻi o ka hoʻonohonoho ʻana i ke kaʻina hana i hiki iā mākou ke kuhikuhi i kahi helu palena o nā ʻāpana hoʻokomo, a ma ka hoʻopuka e loaʻa kahi artifact ma ke ʻano o kahi pūʻulu deb/rpm no ka OS makemake.

ʻO ka hopena, hiki ke hoʻohālikelike ʻia nā pilikia he nui:

  • ʻAʻohe mau pūʻolo me ka mana hou o Nginx.
  • ʻAʻohe pūʻolo me nā modula i koi ʻia.
  • ʻO ka hōʻuluʻulu ʻana a me ke kūkulu ʻana i kahi pūʻolo me ka lima he manawa a paʻakikī loa.
  • ʻAʻohe wehewehe e pili ana i ka hui ʻana o kēia a i ʻole kēlā Nginx.

No ka hoʻoponopono ʻana i kēia mau pilikia, pono e loaʻa kahi mea hana e hoʻokomo i kahi kikoʻī i kahi palapala hiki ke heluhelu ʻia e ke kanaka a hōʻuluʻulu i kahi pūʻulu Nginx me nā hana pono e pili ana iā ia.

ʻAʻole i loaʻa kahi koho kūpono no mākou ma ka nui o Github, ua hoʻoholo mākou e hana i kā mākou pono ponoʻī - nginx-kūkulu.

Nā kikowaena

Ma kā mākou mea hana, makemake mākou e hana i kahi wehewehe o ka kikoʻī ma ke ʻano o ke code, a laila hiki ke waiho ʻia i loko o kahi waihona Git. No ka hana ʻana i kēia, ua koho mākou i ke ʻano maʻamau no ia mau mea - yaml. Laʻana kikoʻī:

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

Maanei mākou e hōʻike nei makemake mākou e ʻike i kahi pūʻulu deb me Nginx version 1.14.2 me ka hoʻonohonoho pono o nā modula. ʻO ka ʻāpana me nā modula he koho. No kēlā me kēia o lākou hiki iā ʻoe ke hoʻonohonoho:

  • Tagu inoa.
  • Helu wahi e kiʻi ai:
    • waihona waihona Git. Hiki iā ʻoe ke kuhikuhi i kahi lālā a i ʻole ka hōʻailona.
    • Waihona pūnaewele loulou.
    • loulou kūloko i ka waihona.

Pono kekahi mau modula e hoʻokomo i nā hilinaʻi ʻē aʻe, no ka laʻana, pono ʻo nginx-auth-ldap e hoʻokomo i ka libldap2-dev. Hiki ke kuhikuhi ʻia nā mea hilinaʻi e pono ai i ka wehewehe ʻana i ka module.

Ka kaiapuni

Ma kā mākou mea hana hiki iā ʻoe ke loaʻa koke i kahi kaiapuni me nā pono i hoʻonohonoho ʻia no ka hoʻohui ʻana, ka hui pūʻulu a me nā polokalamu kōkua ʻē aʻe. ʻO kahi pahu Docker me nā mea a pau āu e makemake ai he mea maikaʻi loa ma aneʻi (ua loaʻa i ka waihona i kekahi mau hiʻohiʻona o nā faila Docker no ubuntu a me centos).

Ma hope o ka huki ʻia ʻana o ka kikoʻī a hoʻomākaukau ʻia ke kaiapuni, hoʻomaka mākou i kā mākou mea hana, ua hoʻokomo mua i kāna mau hilinaʻi:

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

He koho ka helu hoʻoponopono ma aneʻi a hoʻohana ʻia no ka hoʻololi ʻana i nā hui. Ua kākau ʻia i loko o ka ʻike meta o ka pūʻolo, e maʻalahi ka hoʻonui ʻana ma nā kikowaena.
Mai nā lāʻau hiki iā ʻoe ke nānā i nā mea e hana nei. Eia kekahi laʻana o nā mea nui:

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

No laila, me nā kauoha ʻelua, hana mākou i ke kaiapuni a me ka hui Nginx i koi ʻia, a ʻike ʻia ka pōʻai i ka papa kuhikuhi kahi i hoʻokuʻu ʻia ai ka palapala.

Hoʻopili ʻana

Hiki iā mākou ke hoʻohui i kā mākou mea hana i nā kaʻina CI/CD. Hiki i kekahi o nā ʻōnaehana CI i kēia lā ke kōkua me kēia, no ka laʻana huikauhale ai ole ia, Gitlab CI.

ʻO ka hopena, i kēlā me kēia manawa e hoʻololi ai ka kikoʻī i ka waihona Git, hoʻomaka ʻia ke kūkulu ʻana o ka artifact. Hoʻopili ʻia ka helu hoʻoponopono i ka papa kuhikuhi kūkulu hale.
Me ka manawa liʻiliʻi, hiki iā ʻoe ke hoʻonohonoho i ka artifact e hoʻouna ʻia i kāu waihona pūʻolo kūloko, Nexus, Artifactory, a pēlā aku.

ʻO kahi pōmaikaʻi ʻē aʻe, hiki ke hoʻopili ʻia ka faila hoʻonohonoho yaml iā Ansible a i ʻole kahi ʻōnaehana hoʻonohonoho ʻokoʻa ʻē aʻe, a mai laila hiki iā mākou ke lawe i ka helu helu a me ke ʻano pūʻolo a mākou e makemake ai e kau.

He aha ka mea aʻe

ʻAʻole i pau ka papahana. Eia kā mākou e hana nei i kēia manawa:

  • Hoʻonui mākou i ka hiki ke hoʻonohonoho, akā i ka manawa like e mālama i ka maʻalahi e like me ka hiki. ʻAʻole ʻoe makemake e wehewehe i hoʻokahi kaukani ʻāpana inā makemake ʻoe i ʻelua wale nō, a ʻo ke koena e kūpono i ka paʻamau. Hoʻopili kēia i nā hae hōʻuluʻulu (i kēia manawa hiki iā ʻoe ke hoʻololi iā lākou i loko o ka faila hoʻonohonoho kūloko src/config.py), ala hoʻonohonoho, a hoʻomaka i ka mea hoʻohana.
  • Ke hoʻohui nei mākou i nā koho no ka hoʻouna ʻana i kahi pūʻolo i nā waihona artifact like ʻole.
  • E hoʻokō i kahi kauoha maʻamau i ka wā e hoʻouka ai i kahi module (no ka laʻana, e hoʻohana github.com/nginx-modules/nginx_upstream_check_module pono ʻoe e hoʻopili mua i kahi ʻāpana o kahi mana kikoʻī)
  • Hoʻohui i nā hoʻokolohua:
    • Ua hoʻokomo pono ʻia ka pūʻolo.
    • Loaʻa iā Nginx ka mana i makemake ʻia a kūkulu ʻia me nā hae a me nā modula i koi ʻia.
    • Hana ʻia nā ala kūpono, nā moʻokāki, a pēlā aku.

Akā hiki iā ʻoe ke hoʻohana i kēia mea hana i kēia manawa, a hōʻike pū i nā hoʻomaikaʻi - github.com/TinkoffCreditSystems/Nginx-builder aloha!

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka