අපි විධාන කිහිපයක් සමඟ අපගේ Nginx එකලස් කරමු

හෙලෝ!
මගේ නම සර්ජි, මම tinkoff.ru වේදිකාවේ API කණ්ඩායමේ යටිතල පහසුකම් ඉංජිනේරුවෙකු ලෙස වැඩ කරමි.

මත පදනම්ව සමතුලිතතා සකස් කිරීමේදී අපගේ කණ්ඩායම මුහුණ දුන් ගැටළු පිළිබඳව මම මෙම ලිපියෙන් කතා කරමි Nginx විවිධ ව්යාපෘති සඳහා. ඒවායින් බොහොමයක් ජය ගැනීමට මට ඉඩ දුන් මෙවලම ගැනද මම ඔබට කියමි.

Nginx යනු බහුකාර්ය සහ සක්‍රීයව සංවර්ධනය වන ප්‍රොක්සි සේවාදායකයකි. එය මොඩියුල විශාල සංඛ්‍යාවක් දක්වයි, මෙය සම්පූර්ණ ලැයිස්තුවක් නොවේ. සෑම ව්‍යාපෘතියක්ම balancer හි ක්‍රියාකාරීත්වය සහ Nginx අනුවාදය (උදාහරණයක් ලෙස, http/2 සහ grpc proxying තිබීම) සහ එහි මොඩියුලවල සංයුතිය මත යම් අවශ්‍යතා පනවයි.

නිශ්චිත ලිනක්ස් බෙදාහැරීමක් යටතේ ක්‍රියාත්මක වන අවශ්‍ය මොඩියුල කට්ටලයක් සහිත නැවුම් අනුවාදයක් දැකීමට අපි කැමැත්තෙමු. අපගේ නඩුවේදී, මේවා 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 ස්ථාපනය කිරීම අවශ්‍ය වේ. මොඩියුලය විස්තර කිරීමේදී අවශ්‍ය පරායත්තතා ද නියම කළ හැක.

පරිසරය

අපගේ මෙවලම තුළ ඔබට ඉක්මනින් සම්පාදනය, පැකේජ එකලස් කිරීම සහ අනෙකුත් සහායක මෘදුකාංග සඳහා ස්ථාපිත උපයෝගිතා සහිත පරිසරයක් ලබා ගත හැකිය. ඔබට අවශ්‍ය සියල්ල සහිත ඩොකර් කන්ටේනරයක් මෙහි ඉතා සුදුසුය (උබුන්ටු සහ සෙන්ටෝස් සඳහා ඩොකර් ගොනු සඳහා උදාහරණ කිහිපයක් ගබඩාවේ දැනටමත් ඇත).

පිරිවිතර සකස් කර පරිසරය සකස් කිරීමෙන් පසු, අපි එහි පරායත්තතා කලින් ස්ථාපනය කර ඇති අතර අපගේ තනන්නා දියත් කරමු:

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

අදහස් එක් කරන්න