Біз Nginx-ті бірнеше командалармен құрастырамыз

Сәлем!
Менің атым Сергей, мен tinkoff.ru платформасының API командасында инфрақұрылым инженері болып жұмыс істеймін.

Бұл мақалада мен біздің команданың негізінде балансизаторларды дайындау кезінде кездесетін мәселелер туралы айтатын боламын Nginx әртүрлі жобалар үшін. Мен олардың көпшілігін жеңуге мүмкіндік берген құрал туралы айтып беремін.

Nginx - көп функциялы және белсенді дамып келе жатқан прокси сервер. Онда көптеген модульдер бар, бұл толық тізім емес. Әрбір жоба балансизатордың және Nginx нұсқасының функционалдығына (мысалы, http / 2 және grpc проксиінің болуы) және оның модульдерінің құрамына белгілі талаптар қояды.

Біз белгілі бір Linux дистрибутивінде жұмыс істейтін модульдердің дұрыс жиынтығы бар жаңа нұсқаны көргіміз келеді. Біздің жағдайда бұл дебитті және айналымға негізделген жүйелер. Бұл мақалада контейнерлері бар опция қарастырылмаған.

Біз балансерлеріміздің функционалдығын тез өзгерткіміз келеді. Міне, бірден сұрақ туындайды - мүмкіндігінше аз ресурстарды жұмсай отырып, бұған қалай қол жеткізуге болады? Процесті кіріс параметрлерінің шектеулі санын орнатуға болатындай етіп орнату одан да жақсы болар еді, ал шығыста біз қалаған ОЖ үшін deb / rpm пакеті түріндегі артефакт аламыз.

Нәтижесінде бірқатар мәселелерді тұжырымдауға болады:

  • Nginx жаңа нұсқасы бар пакеттер әрқашан бола бермейді.
  • Қажетті модульдері бар пакеттер жоқ.
  • Пакетті қолмен құрастыру және құрастыру көп уақытты қажет етеді және жалықтырады.
  • Белгілі бір Nginx данасы қалай салынғаны туралы ешқандай сипаттама жоқ.

Бұл мәселелерді шешу үшін адам оқи алатын пішімдегі спецификацияны енгізу ретінде қабылдайтын және оның негізінде қажетті функционалдығы бар Nginx бумасын құрастыратын белгілі бір құрал өзін ұсынады.

Github кеңістігінде біз үшін қолайлы нұсқаны таппағандықтан, біз өз құралымызды жасауды шештік - nginx құрастырушы.

Ерекшеліктер

Біздің құралда біз спецификацияның сипаттамасын код түрінде жасағымыз келді, оны кейін 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 орнатуды талап етеді. Қажетті тәуелділіктерді модульді сипаттау кезінде де көрсетуге болады.

Қоршау

Біздің құралда сіз компиляцияға, пакетті құруға және басқа көмекші бағдарламалық жасақтамаға арналған орнатылған утилиталары бар ортаны жылдам ала аласыз. Сізге қажет нәрсенің бәрі бар докер контейнері бұл жерде ең қолайлы болып табылады (репозиторийде ubuntu және centos үшін докер файлдарының бірнеше мысалдары бар).

Техникалық сипаттама құрастырылып, орта дайындалғаннан кейін біз оның тәуелділіктерін бұрын орнатып, құрастырушыны іске қосамыз:

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

пікір қалдыру