ہم اپنے Nginx کو ایک دو کمانڈ کے ساتھ جمع کرتے ہیں۔

ہیلو!
میرا نام سرجی ہے، میں tinkoff.ru پلیٹ فارم کی API ٹیم میں انفراسٹرکچر انجینئر کے طور پر کام کرتا ہوں۔

اس مضمون میں میں ان مسائل کے بارے میں بات کروں گا جن کی بنیاد پر بیلنسرز کی تیاری کے دوران ہماری ٹیم کو سامنا کرنا پڑا نگنکس مختلف منصوبوں کے لیے۔ میں آپ کو اس ٹول کے بارے میں بھی بتاؤں گا جس نے مجھے ان میں سے بیشتر پر قابو پانے کی اجازت دی۔

Nginx ایک ملٹی فنکشنل اور فعال طور پر ترقی پذیر پراکسی سرور ہے۔ اس میں ماڈیولز کی ایک بڑی تعداد ہے، یہ مکمل فہرست نہیں ہے۔. ہر پروجیکٹ بیلنسر کی فعالیت اور Nginx کے ورژن (مثال کے طور پر، http/2 اور grpc پراکسینگ کی موجودگی) اور اس کے ماڈیولز کی تشکیل پر کچھ تقاضے عائد کرتا ہے۔

ہم ایک مخصوص لینکس ڈسٹری بیوشن کے تحت چلنے والے ماڈیولز کے مطلوبہ سیٹ کے ساتھ ایک تازہ ورژن دیکھنا چاہیں گے۔ ہمارے معاملے میں، یہ deb- اور rpm پر مبنی نظام ہیں۔ اس مضمون میں کنٹینرز کے ساتھ آپشن پر غور نہیں کیا گیا ہے۔

ہم اپنے بیلنسرز کی فعالیت کو تیزی سے تبدیل کرنا چاہتے ہیں۔ اور یہاں سوال فوری طور پر پیدا ہوتا ہے: ممکن حد تک کم وسائل خرچ کرتے ہوئے اسے کیسے حاصل کیا جائے؟ اس عمل کو ترتیب دینا اور بھی بہتر ہو گا تاکہ ہم ان پٹ پیرامیٹرز کی ایک محدود تعداد کی وضاحت کر سکیں، اور آؤٹ پٹ پر مطلوبہ OS کے لیے deb/rpm پیکیج کی شکل میں ایک نمونہ حاصل کریں۔

نتیجے کے طور پر، کئی مسائل کو تشکیل دیا جا سکتا ہے:

  • Nginx کے تازہ ترین ورژن کے ساتھ ہمیشہ پیکیج نہیں ہوتے ہیں۔
  • مطلوبہ ماڈیولز کے ساتھ کوئی پیکجز نہیں ہیں۔
  • پیکج کو دستی طور پر مرتب کرنا اور بنانا وقت طلب اور سراسر تکلیف دہ ہے۔
  • اس یا وہ Nginx مثال کو کیسے جمع کیا جاتا ہے اس کی کوئی تفصیل نہیں ہے۔

ان مسائل کو حل کرنے کے لیے، ایک ایسے ٹول کی ضرورت پیدا ہوتی ہے جو انسانی پڑھنے کے قابل فارمیٹ میں ایک تصریح کے طور پر ان پٹ لے اور اس کی بنیاد پر ضروری فعالیت کے ساتھ ایک Nginx پیکیج کو جمع کرے۔

گیتھب کی وسعت پر ہمارے لیے کوئی مناسب آپشن نہ ملنے پر ہم نے اپنا ٹول بنانے کا فیصلہ کیا۔ nginx بلڈر.

نردجیکرن

اپنے ٹول میں، ہم کوڈ کی شکل میں تصریح کی تفصیل بنانا چاہتے تھے، جسے پھر گٹ ریپوزٹری میں رکھا جا سکتا ہے۔ ایسا کرنے کے لیے، ہم نے ایسی چیزوں کے لیے واقف فارمیٹ کا انتخاب کیا - 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 کے ساتھ ڈیب پیکیج دیکھنا چاہتے ہیں۔ ماڈیولز والا سیکشن اختیاری ہے۔ ان میں سے ہر ایک کے لیے آپ سیٹ کر سکتے ہیں:

  • عنوان
  • پتہ جہاں آپ اسے حاصل کر سکتے ہیں:
    • گٹ ذخیرہ۔ آپ برانچ یا ٹیگ بھی بتا سکتے ہیں۔
    • ویب لنک کو محفوظ کریں۔
    • محفوظ شدہ دستاویزات کا مقامی لنک۔

کچھ ماڈیولز کو انسٹال کرنے کے لیے اضافی انحصار کی ضرورت ہوتی ہے، مثال کے طور پر 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.

نتیجے کے طور پر، جب بھی گٹ ریپوزٹری میں تفصیلات تبدیل ہوتی ہیں، آرٹفیکٹ کی تعمیر خود بخود شروع ہو جاتی ہے۔ نظر ثانی کا نمبر بلڈ لانچ کاؤنٹر سے منسلک ہے۔
کچھ اور وقت کے ساتھ، آپ اپنے مقامی پیکج ریپوزٹری، Nexus، Artifactory، وغیرہ کو بھیجے جانے کے لیے نمونے ترتیب دے سکتے ہیں۔

ایک اضافی فائدہ یہ ہے کہ yaml کنفیگریشن فائل کو Ansible یا کسی اور خودکار کنفیگریشن سسٹم سے منسلک کیا جا سکتا ہے، اور وہاں سے ہم ورژن نمبر اور پیکیج کی قسم لے سکتے ہیں جسے ہم تعینات کرنا چاہتے ہیں۔

آگے کیا ہے

منصوبہ ابھی تک مکمل نہیں ہوا۔ یہ ہے جس پر ہم ابھی کام کر رہے ہیں:

  • ہم ترتیب کے امکان کو بڑھاتے ہیں، لیکن ساتھ ہی اسے جتنا ممکن ہو آسان بھی رکھتے ہیں۔ اگر آپ کو صرف دو کی ضرورت ہے تو آپ ہزار پیرامیٹرز کی وضاحت نہیں کرنا چاہتے ہیں، اور باقی ڈیفالٹ کے مطابق فٹ بیٹھتے ہیں۔ اس میں کمپائلیشن فلیگ شامل ہیں (اب آپ ان کو اندرونی کنفیگریشن فائل src/config.py میں تبدیل کر سکتے ہیں)، انسٹالیشن پاتھ، اور لانچ یوزر۔
  • ہم خودکار طور پر مختلف نمونوں کے ذخیروں میں پیکج بھیجنے کے اختیارات شامل کر رہے ہیں۔
  • ماڈیول لوڈ کرتے وقت اپنی مرضی کے مطابق کمانڈ پر عمل کریں (مثال کے طور پر، استعمال کرنے کے لیے github.com/nginx-modules/nginx_upstream_check_module آپ کو پہلے کسی مخصوص ورژن کا پیچ لگانا ہوگا)
  • ٹیسٹ شامل کرنا:
    • پیکج صحیح طریقے سے انسٹال ہے۔
    • Nginx کا مطلوبہ ورژن ہے اور اسے مطلوبہ جھنڈوں اور ماڈیولز کے ساتھ بنایا گیا ہے۔
    • ضروری راستے، اکاؤنٹس وغیرہ بنائے جاتے ہیں۔

لیکن آپ ابھی اس ٹول کو استعمال کر سکتے ہیں، اور بہتری بھی تجویز کر سکتے ہیں۔ github.com/TinkoffCreditSystems/Nginx-builder خوش آمدید!

ماخذ: www.habr.com

نیا تبصرہ شامل کریں