اسان اسان جي نينگڪس کي گڏ ڪريون ٿا ڪجھ حڪمن سان

هيلو!
منهنجو نالو سرجي آهي، مان tinkoff.ru پليٽ فارم جي API ٽيم ۾ هڪ انفراسٽرڪچر انجنيئر طور ڪم ڪريان ٿو.

هن آرٽيڪل ۾ آئون انهن مسئلن جي باري ۾ ڳالهائيندس جيڪي اسان جي ٽيم کي منهن ڏيڻي پوندي جڏهن بيلنس تيار ڪرڻ جي بنياد تي نينڪس مختلف منصوبن لاء. مان توهان کي ان اوزار جي باري ۾ پڻ ٻڌايان ٿو جنهن مون کي انهن مان گهڻن تي غالب ڪرڻ جي اجازت ڏني.

نينڪس هڪ گھڻائي ۽ فعال طور تي ترقي ڪندڙ پراکسي سرور آهي. اهو ماڊلز جي وڏي تعداد جي خصوصيت، هي مڪمل فهرست نه آهي. هر پروجيڪٽ بيلنس جي ڪارڪردگي ۽ نينڪس جي ورزن تي ڪجهه گهرجون لاڳو ڪري ٿو (مثال طور، http/2 ۽ grpc پراکسي جي موجودگي)، ۽ ان جي ماڊلز جي جوڙجڪ.

اسان چاهيون ٿا ته هڪ نئون نسخو ماڊلز جي گهربل سيٽ سان، هڪ مخصوص لينڪس ڊويزن تحت هلندڙ. اسان جي حالت ۾، اهي deb- ۽ rpm تي ٻڌل سسٽم آهن. ڪنٽينرز سان اختيار هن مضمون ۾ نه سمجهيو ويندو.

اسان جلدي اسان جي بيلنس جي ڪارڪردگي کي تبديل ڪرڻ چاهيون ٿا. ۽ هتي سوال فوري طور تي پيدا ٿئي ٿو: ممڪن طور تي گهٽ وسيلن کي خرچ ڪرڻ دوران اهو ڪيئن حاصل ڪجي؟ اهو اڃا به بهتر ٿيندو ته پروسيس کي ترتيب ڏيو ته جيئن اسان ان پٽ پيٽرولر جو هڪ محدود تعداد بيان ڪري سگهون ٿا، ۽ آئوٽ پٽ تي گهربل OS لاءِ deb/rpm پيڪيج جي صورت ۾ هڪ آرٽيڪل حاصل ڪريون.

نتيجي طور، ڪيترن ئي مسئلن کي ترتيب ڏئي سگهجي ٿو:

  • هتي هميشه پيڪيجز نه آهن 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 سان ماڊلز جي گهربل سيٽ سان. ماڊلز سان سيڪشن اختياري آھي. انهن مان هر هڪ لاء توهان مقرر ڪري سگهو ٿا:

  • نالو.
  • پتو جتي توهان حاصل ڪري سگهو ٿا:
    • Git مخزن. توھان پڻ ھڪڙي شاخ يا ٽيگ بيان ڪري سگھو ٿا.
    • آرڪائيو ويب لنڪ.
    • آرڪائيو ڏانهن مقامي لنڪ.

ڪجھ ماڊلز کي انسٽال ڪرڻ لاءِ اضافي انحصار جي ضرورت آھي، مثال طور nginx-auth-ldap کي libldap2-dev انسٽال ڪرڻ جي ضرورت آھي. ضروري انحصار پڻ بيان ڪري سگھجي ٿو جڏهن ماڊل کي بيان ڪيو وڃي.

ماحول

اسان جي ٽوليءَ ۾ توھان تڪڙو ماحول حاصل ڪري سگھو ٿا تنصيب، پيڪيج اسيمبليءَ ۽ ٻين معاون سافٽ ويئر لاءِ نصب ڪيل يوٽيلٽيز سان. هڪ Docker ڪنٽينر جنهن سان توهان کي هر شيءِ جي ضرورت آهي هتي مثالي آهي (مخزن ۾ اڳ ۾ ئي ubuntu ۽ سينٽوس لاءِ 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'.

تنهن ڪري، صرف ڪجهه حڪمن سان، اسان ماحول ۽ گهربل نينڪس اسيمبلي ٺاهي، ۽ پيڪيج ڊاريڪٽري ۾ ظاهر ٿئي ٿو جتان اسڪرپٽ شروع ڪئي وئي آهي.

ايمبيڊنگ

اسان پڻ اسان جي اوزار کي CI/CD عملن ۾ ضم ڪري سگھون ٿا. اڄ موجود ڪيترن ئي CI سسٽم مان ڪو به هن سان مدد ڪري سگهي ٿو، مثال طور ٽيم شهر يا Gitlab CI.

نتيجي طور، هر دفعي Git مخزن ۾ وضاحتن جي تبديلي، نموني جي تعمير خودڪار طريقي سان شروع ڪئي وئي آهي. نظرثاني نمبر تعمير ٿيل لانچ ڪاؤنٽر سان ڳنڍيل آھي.
ٿوري وڌيڪ وقت سان، توهان ترتيب ڏئي سگهو ٿا آرٽيڪل کي موڪليو وڃي توهان جي مقامي پئڪيج ريپوزٽري، Nexus، Artifactory، وغيره.

هڪ اضافي فائدو اهو آهي ته yaml ترتيب واري فائل کي ڳنڍي سگهجي ٿو جوابي يا ٻئي خودڪار ترتيب واري نظام سان، ۽ اتان کان اسان ورزن نمبر ۽ پيڪيج جو قسم وٺي سگهون ٿا جيڪو اسان لڳائڻ چاهيون ٿا.

ايندڙ ڇا آهي

پروجيڪٽ اڃا مڪمل نه ٿيو آهي. ھتي آھي جيڪو اسان ھاڻي ڪم ڪري رھيا آھيون:

  • اسان ترتيب جي امڪان کي وڌايو، پر ساڳئي وقت ان کي ممڪن طور تي سادو رکون ٿا. توهان نه ٿا چاهيو ته هڪ هزار پيٽرولر بيان ڪريو جيڪڏهن توهان کي صرف ٻن جي ضرورت آهي، ۽ باقي ڊفالٽ سان ٺهڪي اچي ٿي. ھن ۾ تاليف جا جھنڊا شامل آھن (ھاڻي توھان انھن کي اندروني ترتيب واري فائل ۾ تبديل ڪري سگھو ٿا src/config.py)، تنصيب جو رستو، ۽ صارف لانچ ڪريو.
  • اسان پاڻمرادو پيڪيج موڪلڻ لاءِ اختيارن کي شامل ڪري رھيا آھيون مختلف نمونن جي ذخيرو ڏانھن.
  • ماڊل لوڊ ڪرڻ وقت ڪسٽم حڪم جاري ڪريو (مثال طور، استعمال ڪرڻ لاء github.com/nginx-modules/nginx_upstream_check_module توهان کي پهريان هڪ مخصوص ورزن جو پيچ لاڳو ڪرڻ گهرجي)
  • ٽيسٽ شامل ڪرڻ:
    • پيڪيج صحيح طور تي نصب ٿيل آهي.
    • نينگڪس کي گهربل نسخو آهي ۽ گهربل پرچم ۽ ماڊلز سان ٺهيل آهي.
    • ضروري رستا، اڪائونٽس، وغيره ٺاهيا ويا آهن.

پر توھان ھاڻي ھي اوزار استعمال ڪري سگھو ٿا، ۽ بھتر ڪرڻ جو مشورو ڏئي سگھو ٿا. github.com/TinkoffCreditSystems/Nginx-builder ڀلي ڪري آيا!

جو ذريعو: www.habr.com

تبصرو شامل ڪريو