Бид Nginx-ээ хэд хэдэн тушаалаар угсардаг

Сайн уу!
Намайг Сергей гэдэг, би tinkoff.ru платформын API багт дэд бүтцийн инженерээр ажилладаг.

Энэ нийтлэлд би тэнцвэржүүлэгч бэлтгэхэд манай баг тулгарч байсан бэрхшээлүүдийн талаар ярих болно Nginx янз бүрийн төслүүдэд зориулагдсан. Би тэдний ихэнхийг даван туулах боломжийг олгосон хэрэгслийн талаар танд хэлэх болно.

Nginx бол олон үйлдэлт, идэвхтэй хөгжиж буй прокси сервер юм. Энэ нь олон тооны модулиудтай, энэ бол бүрэн жагсаалт биш юм. Төсөл бүр тэнцвэржүүлэгчийн ажиллагаа болон Nginx-ийн хувилбарт (жишээлбэл, http/2 болон grpc прокси байгаа эсэх), түүний модулиудын найрлагад тодорхой шаардлага тавьдаг.

Бид тодорхой Линукс түгээлтийн дор ажилладаг шаардлагатай модулиудын шинэ хувилбарыг харахыг хүсч байна. Манай тохиолдолд эдгээр нь deb- болон rpm-д суурилсан системүүд юм. Энэ зүйлд савтай сонголтыг авч үзэхгүй.

Бид тэнцвэржүүлэгчийнхээ функцийг хурдан өөрчлөхийг хүсч байна. Эндээс нэн даруй асуулт гарч ирнэ: аль болох бага нөөц зарцуулж байхад яаж үүнд хүрэх вэ? Хязгаарлагдмал тооны оролтын параметрүүдийг зааж өгөх, гаралт дээр хүссэн үйлдлийн системд зориулж deb/rpm багц хэлбэрээр олдворыг хүлээн авахын тулд процессыг тохируулах нь илүү дээр байх болно.

Үүний үр дүнд хэд хэдэн асуудлыг тодорхойлж болно:

  • Nginx-ийн хамгийн сүүлийн хувилбартай багцууд үргэлж байдаггүй.
  • Шаардлагатай модулиудтай багц байхгүй.
  • Багцыг гараар эмхэтгэх, бүтээх нь цаг хугацаа их шаарддаг бөгөөд уйтгартай ажил юм.
  • Энэ эсвэл тэр Nginx инстанцыг хэрхэн угсардаг талаар ямар ч тайлбар байхгүй байна.

Эдгээр асуудлыг шийдвэрлэхийн тулд хүний ​​унших боломжтой форматын тодорхойлолтыг оруулан авч, түүн дээр суурилсан шаардлагатай функц бүхий Nginx багцыг цуглуулах хэрэгсэл шаардлагатай байна.

Github-ийн өргөн уудам газар дээр бидэнд тохирох сонголтыг олохгүй байгаа тул бид өөрсдийн хэрэгсэл бүтээхээр шийдсэн - nginx-Builder.

Спецификации

Манай хэрэгсэлд бид техникийн тодорхойлолтын тайлбарыг код хэлбэрээр үүсгэхийг хүссэн бөгөөд үүнийг Git репозитор руу оруулах боломжтой. Үүнийг хийхийн тулд бид ийм зүйлд танил болсон форматыг сонгосон - yaml. Тодорхойлолтын жишээ:

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

Энд бид Nginx 1.14.2 хувилбар бүхий deb багцыг шаардлагатай модулиудын багцыг харахыг хүсч байгаагаа илэрхийлж байна. Модулиудтай хэсэг нь сонголттой. Тэдгээрийн хувьд та дараахь зүйлийг тохируулж болно.

  • Нэр.
  • Та авах боломжтой хаяг:
    • Git репозитор. Та мөн салбар эсвэл шошгыг зааж өгч болно.
    • Архив вэб холбоос.
    • Архивын орон нутгийн холбоос.

Зарим модулиуд нь нэмэлт хамаарлыг суулгахыг шаарддаг, жишээлбэл nginx-auth-ldap нь libldap2-dev суулгасан байхыг шаарддаг. Мөн модулийг тайлбарлахдаа шаардлагатай хамаарлыг зааж өгч болно.

Байгаль орчин

Манай хэрэгсэлд та эмхэтгэх, багц угсрах болон бусад туслах програм хангамжийг суулгасан хэрэгслүүдийг хурдан авах боломжтой. Танд хэрэгтэй бүх зүйл бүхий Docker контейнер энд хамгийн тохиромжтой (ангад ubuntu болон centos-д зориулсан Docker файлуудын хэд хэдэн жишээ байгаа).

Техникийн тодорхойлолтыг боловсруулж, орчныг бэлтгэсний дараа бид түүний хамаарлыг өмнө нь суулгаж, бүтээгчээ ажиллуулж байна.

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

Энд байгаа засварын дугаар нь сонголттой бөгөөд угсралтыг хувилбар болгоход ашиглагддаг. Энэ нь багцын мета мэдээлэлд бичигдсэн тул серверүүд дээр шинэчлэхэд хялбар болгодог.
Бүртгэлээс та юу болж байгааг хянах боломжтой. Гол санаануудын жишээ энд байна:

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

Тиймээс бид хэдхэн командын тусламжтайгаар орчин болон шаардлагатай Nginx угсралтыг бий болгож, багц нь скриптийг эхлүүлсэн лавлах хэсэгт гарч ирнэ.

Оруулсан

Мөн бид хэрэглүүрээ CI/CD процесст нэгтгэх боломжтой. Жишээлбэл, өнөөдөр байгаа олон тооны CI системүүдийн аль нэг нь үүнд тусалж чадна Багийн хот буюу Gitlab CI.

Үүний үр дүнд Git репозиторийн техникийн үзүүлэлт өөрчлөгдөх бүрт олдворыг бүтээх ажил автоматаар нээгддэг. Засварын дугаар нь бүтээх эхлүүлэх тоолууртай холбогдсон байна.
Бага зэрэг хугацаа зарцуулснаар та олдворыг өөрийн локал багцын агуулах, Nexus, Artifactory гэх мэт рүү илгээхээр тохируулах боломжтой.

Нэмэлт давуу тал нь yaml тохиргооны файлыг Ansible эсвэл өөр автомат тохиргооны системд холбох боломжтой бөгөөд тэндээс бид суулгахыг хүсч буй хувилбарын дугаар болон багцын төрлийг авч болно.

Дараа нь юу юм

Төсөл хараахан дуусаагүй байна. Одоо бид юу дээр ажиллаж байна:

  • Бид тохиргоо хийх боломжийг өргөжүүлдэг, гэхдээ үүнтэй зэрэгцэн үүнийг аль болох энгийн байлгах хэрэгтэй. Хэрэв танд зөвхөн хоёр хэрэгтэй бол мянган параметрийг тодорхойлохыг хүсэхгүй байгаа бөгөөд бусад нь анхдагчаар тохирно. Үүнд эмхэтгэлийн туг (одоо та тэдгээрийг src/config.py дотоод тохиргооны файлаас өөрчлөх боломжтой), суулгах зам, хэрэглэгчийг эхлүүлэх зэрэг орно.
  • Бид төрөл бүрийн олдворын агуулах руу автоматаар багц илгээх сонголтыг нэмж байна.
  • Модуль ачаалах үед захиалгат командыг гүйцэтгэх (жишээлбэл, ашиглах github.com/nginx-modules/nginx_upstream_check_module та эхлээд тодорхой хувилбарын нөхөөсийг ашиглах ёстой)
  • Тест нэмэх:
    • Багцыг зөв суулгасан.
    • Nginx нь шаардлагатай хувилбартай бөгөөд шаардлагатай туг, модулиудаар бүтээгдсэн.
    • Шаардлагатай зам, данс гэх мэтийг бий болгодог.

Гэхдээ та одоо энэ хэрэгслийг ашиглаж болно, мөн сайжруулалтыг санал болгож болно - github.com/TinkoffCreditSystems/Nginx-builder тавтай морил!

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх