நாங்கள் எங்கள் Nginx ஐ இரண்டு கட்டளைகளுடன் இணைக்கிறோம்

வாழ்த்துக்கள்!
எனது பெயர் செர்ஜி, நான் tinkoff.ru தளத்தின் API குழுவில் உள்கட்டமைப்பு பொறியாளராக பணிபுரிகிறேன்.

இந்த கட்டுரையில் நான் பேலன்சர்களை தயாரிப்பதில் எங்கள் குழு எதிர்கொள்ளும் சிக்கல்களைப் பற்றி பேசுவேன் nginx பல்வேறு திட்டங்களுக்கு. அவற்றில் பெரும்பாலானவற்றைக் கடக்க என்னை அனுமதித்த கருவியைப் பற்றியும் நான் உங்களுக்குச் சொல்கிறேன்.

Nginx ஒரு மல்டிஃபங்க்ஸ்னல் மற்றும் செயலில் வளரும் ப்ராக்ஸி சர்வர். இது அதிக எண்ணிக்கையிலான தொகுதிக்கூறுகளைக் கொண்டுள்ளது, இது ஒரு முழுமையான பட்டியல் அல்ல. ஒவ்வொரு திட்டமும் பேலன்சரின் செயல்பாடு மற்றும் Nginx இன் பதிப்பு (உதாரணமாக, http/2 மற்றும் grpc ப்ராக்ஸியின் இருப்பு) மற்றும் அதன் தொகுதிகளின் கலவை ஆகியவற்றில் சில தேவைகளை விதிக்கிறது.

குறிப்பிட்ட லினக்ஸ் விநியோகத்தின் கீழ் இயங்கும் தேவையான தொகுதிகள் கொண்ட புதிய பதிப்பைப் பார்க்க விரும்புகிறோம். எங்கள் விஷயத்தில், இவை deb- மற்றும் rpm அடிப்படையிலான அமைப்புகள். கொள்கலன்கள் கொண்ட விருப்பம் இந்த கட்டுரையில் கருதப்படவில்லை.

எங்கள் பேலன்சர்களின் செயல்பாட்டை விரைவாக மாற்ற விரும்புகிறோம். இங்கே கேள்வி உடனடியாக எழுகிறது: முடிந்தவரை சில வளங்களை செலவழித்து இதை எவ்வாறு அடைவது? செயல்முறையை அமைப்பது இன்னும் சிறப்பாக இருக்கும், இதன் மூலம் நாம் வரையறுக்கப்பட்ட எண்ணிக்கையிலான உள்ளீட்டு அளவுருக்களைக் குறிப்பிடலாம், மேலும் வெளியீட்டில் விரும்பிய OS க்கு deb/rpm தொகுப்பின் வடிவத்தில் ஒரு கலைப்பொருளைப் பெறலாம்.

இதன் விளைவாக, பல சிக்கல்களை உருவாக்கலாம்:

  • Nginx இன் சமீபத்திய பதிப்பில் எப்போதும் தொகுப்புகள் இருக்காது.
  • தேவையான தொகுதிகள் கொண்ட தொகுப்புகள் எதுவும் இல்லை.
  • ஒரு தொகுப்பை கைமுறையாக தொகுத்து உருவாக்குவது நேரத்தை எடுத்துக்கொள்வது மற்றும் மிகவும் கடினமானது.
  • இந்த அல்லது அந்த Nginx நிகழ்வு எவ்வாறு கூடியது என்பது பற்றிய விளக்கம் எதுவும் இல்லை.

இந்தச் சிக்கல்களைத் தீர்க்க, ஒரு கருவியின் தேவை எழுகிறது, அது மனிதனால் படிக்கக்கூடிய வடிவத்தில் ஒரு விவரக்குறிப்பை உள்ளீடாக எடுத்து அதன் அடிப்படையில் தேவையான செயல்பாட்டுடன் ஒரு Nginx தொகுப்பை இணைக்கிறது.

கிதுப்பின் பரந்த தன்மையில் எங்களுக்கு பொருத்தமான விருப்பத்தை காணவில்லை, நாங்கள் எங்கள் சொந்த கருவியை உருவாக்க முடிவு செய்தோம் - 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 நிறுவ வேண்டும். தொகுதியை விவரிக்கும் போது தேவையான சார்புகளையும் குறிப்பிடலாம்.

சூழல்

எங்கள் கருவியில் நீங்கள் தொகுத்தல், தொகுப்பு அசெம்பிளி மற்றும் பிற துணை மென்பொருளுக்கான நிறுவப்பட்ட பயன்பாடுகளுடன் கூடிய சூழலை விரைவாகப் பெறலாம். உங்களுக்கு தேவையான அனைத்தையும் கொண்ட டோக்கர் கொள்கலன் இங்கே சிறந்தது (உபுண்டு மற்றும் சென்டோஸிற்கான டோக்கர் கோப்புகளின் இரண்டு எடுத்துக்காட்டுகள் களஞ்சியத்தில் ஏற்கனவே உள்ளது).

விவரக்குறிப்பு வரையப்பட்டு சூழல் தயாரிக்கப்பட்ட பிறகு, நாங்கள் எங்கள் பில்டரைத் தொடங்குகிறோம், முன்பு அதன் சார்புகளை நிறுவியுள்ளோம்:

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 அமைப்புகளில் ஏதேனும் இதற்கு உதவலாம் குழு நகரம் அல்லது கிட்லாப் சிஐ.

இதன் விளைவாக, ஒவ்வொரு முறையும் Git களஞ்சியத்தில் விவரக்குறிப்புகள் மாறும்போது, ​​கலைப்பொருளின் உருவாக்கம் தானாகவே தொடங்கப்படும். திருத்த எண் உருவாக்க வெளியீட்டு கவுண்டருடன் இணைக்கப்பட்டுள்ளது.
இன்னும் சிறிது நேரத்தில், உங்கள் உள்ளூர் தொகுப்பு களஞ்சியமான நெக்ஸஸ், ஆர்டிஃபாக்டரி மற்றும் பலவற்றிற்கு அனுப்பப்படும் கலைப்பொருளை உள்ளமைக்கலாம்.

ஒரு கூடுதல் நன்மை என்னவென்றால், yaml உள்ளமைவு கோப்பை அன்சிபிள் அல்லது மற்றொரு தானியங்கி உள்ளமைவு அமைப்புடன் இணைக்க முடியும், மேலும் அங்கிருந்து நாம் வரிசைப்படுத்த விரும்பும் பதிப்பு எண் மற்றும் தொகுப்பு வகையை எடுக்கலாம்.

அடுத்தது என்ன

திட்டம் இன்னும் நிறைவடையவில்லை. நாங்கள் இப்போது என்ன வேலை செய்கிறோம் என்பது இங்கே:

  • உள்ளமைவின் சாத்தியத்தை நாங்கள் விரிவுபடுத்துகிறோம், ஆனால் அதே நேரத்தில் அதை முடிந்தவரை எளிமையாக வைத்திருக்கிறோம். உங்களுக்கு இரண்டு மட்டுமே தேவைப்பட்டால், நீங்கள் ஆயிரம் அளவுருக்களை வரையறுக்க விரும்பவில்லை, மீதமுள்ளவை இயல்பாகவே பொருந்தும். இதில் தொகுத்தல் கொடிகள் (இப்போது நீங்கள் அவற்றை உள் கட்டமைப்பு கோப்பான src/config.py இல் மாற்றலாம்), நிறுவல் பாதை மற்றும் பயனர் துவக்குதல் ஆகியவை அடங்கும்.
  • பல்வேறு கலைப்பொருட்கள் களஞ்சியங்களுக்கு ஒரு தொகுப்பை தானாக அனுப்புவதற்கான விருப்பங்களை நாங்கள் சேர்க்கிறோம்.
  • ஒரு தொகுதியை ஏற்றும்போது தனிப்பயன் கட்டளையை இயக்கவும் (உதாரணமாக, பயன்படுத்த github.com/nginx-modules/nginx_upstream_check_module நீங்கள் முதலில் ஒரு குறிப்பிட்ட பதிப்பின் பேட்சைப் பயன்படுத்த வேண்டும்)
  • சோதனைகளைச் சேர்த்தல்:
    • தொகுப்பு சரியாக நிறுவப்பட்டுள்ளது.
    • Nginx தேவையான பதிப்பைக் கொண்டுள்ளது மற்றும் தேவையான கொடிகள் மற்றும் தொகுதிகளுடன் கட்டப்பட்டுள்ளது.
    • தேவையான பாதைகள், கணக்குகள் மற்றும் பல உருவாக்கப்படுகின்றன.

ஆனால் நீங்கள் இப்போது இந்த கருவியைப் பயன்படுத்தலாம், மேலும் மேம்பாடுகளையும் பரிந்துரைக்கலாம் - github.com/TinkoffCreditSystems/Nginx-builder வருக!

ஆதாரம்: www.habr.com

கருத்தைச் சேர்