هيلو!
منهنجو نالو سرجي آهي، مان tinkoff.ru پليٽ فارم جي API ٽيم ۾ هڪ انفراسٽرڪچر انجنيئر طور ڪم ڪريان ٿو.
هن آرٽيڪل ۾ آئون انهن مسئلن جي باري ۾ ڳالهائيندس جيڪي اسان جي ٽيم کي منهن ڏيڻي پوندي جڏهن بيلنس تيار ڪرڻ جي بنياد تي نينڪس مختلف منصوبن لاء. مان توهان کي ان اوزار جي باري ۾ پڻ ٻڌايان ٿو جنهن مون کي انهن مان گهڻن تي غالب ڪرڻ جي اجازت ڏني.
نينڪس هڪ گھڻائي ۽ فعال طور تي ترقي ڪندڙ پراکسي سرور آهي. اهو ماڊلز جي وڏي تعداد جي خصوصيت، هي مڪمل فهرست نه آهي. هر پروجيڪٽ بيلنس جي ڪارڪردگي ۽ نينڪس جي ورزن تي ڪجهه گهرجون لاڳو ڪري ٿو (مثال طور، http/2 ۽ grpc پراکسي جي موجودگي)، ۽ ان جي ماڊلز جي جوڙجڪ.
اسان چاهيون ٿا ته هڪ نئون نسخو ماڊلز جي گهربل سيٽ سان، هڪ مخصوص لينڪس ڊويزن تحت هلندڙ. اسان جي حالت ۾، اهي deb- ۽ rpm تي ٻڌل سسٽم آهن. ڪنٽينرز سان اختيار هن مضمون ۾ نه سمجهيو ويندو.
اسان جلدي اسان جي بيلنس جي ڪارڪردگي کي تبديل ڪرڻ چاهيون ٿا. ۽ هتي سوال فوري طور تي پيدا ٿئي ٿو: ممڪن طور تي گهٽ وسيلن کي خرچ ڪرڻ دوران اهو ڪيئن حاصل ڪجي؟ اهو اڃا به بهتر ٿيندو ته پروسيس کي ترتيب ڏيو ته جيئن اسان ان پٽ پيٽرولر جو هڪ محدود تعداد بيان ڪري سگهون ٿا، ۽ آئوٽ پٽ تي گهربل OS لاءِ deb/rpm پيڪيج جي صورت ۾ هڪ آرٽيڪل حاصل ڪريون.
نتيجي طور، ڪيترن ئي مسئلن کي ترتيب ڏئي سگهجي ٿو:
هتي هميشه پيڪيجز نه آهن Nginx جي جديد ورزن سان.
گهربل ماڊلز سان گڏ ڪي به پيڪيجز نه آهن.
دستي طور تي ھڪڙي پيڪيج کي گڏ ڪرڻ ۽ تعمير ڪرڻ وقت سازي ۽ بلڪل مشڪل آھي.
ڪابه وضاحت نه آهي ته هي يا اهو نينگڪس مثال ڪيئن گڏ ڪيو ويو آهي.
انهن مسئلن کي حل ڪرڻ لاء، هڪ اوزار جي ضرورت پيدا ٿئي ٿي جيڪا انسان جي پڙهڻ واري فارميٽ ۾ هڪ وضاحت جي ان پٽ جي طور تي وٺي ۽ ان جي بنياد تي ضروري ڪارڪردگي سان گڏ هڪ نينڪس پيڪيج گڏ ڪري.
Github جي وسعت تي اسان لاء مناسب اختيار نه ڳولي، اسان پنهنجو اوزار ٺاهڻ جو فيصلو ڪيو. nginx-بلڊر.
وضاحت
اسان جي ٽول ۾، اسان ڪوڊ جي صورت ۾ وضاحت جي وضاحت ٺاهڻ چاهيون ٿا، جيڪو پوء Git مخزن ۾ رکي سگھجي ٿو. هن کي ڪرڻ لاء، اسان اهڙين شين لاء واقف فارميٽ چونڊيو - yaml. وضاحت مثال:
ڪجھ ماڊلز کي انسٽال ڪرڻ لاءِ اضافي انحصار جي ضرورت آھي، مثال طور nginx-auth-ldap کي libldap2-dev انسٽال ڪرڻ جي ضرورت آھي. ضروري انحصار پڻ بيان ڪري سگھجي ٿو جڏهن ماڊل کي بيان ڪيو وڃي.
ماحول
اسان جي ٽوليءَ ۾ توھان تڪڙو ماحول حاصل ڪري سگھو ٿا تنصيب، پيڪيج اسيمبليءَ ۽ ٻين معاون سافٽ ويئر لاءِ نصب ڪيل يوٽيلٽيز سان. هڪ Docker ڪنٽينر جنهن سان توهان کي هر شيءِ جي ضرورت آهي هتي مثالي آهي (مخزن ۾ اڳ ۾ ئي ubuntu ۽ سينٽوس لاءِ Docker فائلن جا ٻه مثال آهن).
تفصيلات تيار ٿيڻ کان پوء ۽ ماحول تيار ڪيو ويو آهي، اسان اسان جي بلڊر کي لانچ ڪيو، اڳ ۾ ئي ان جي انحصار کي نصب ڪيو ويو آهي:
نظرثاني نمبر هتي اختياري آهي ۽ ورزننگ اسيمبلين لاءِ استعمال ڪيو ويندو آهي. اهو پيڪيج جي ميٽا معلومات ۾ لکيل آهي، انهي کي سرور تي تازه ڪاري ڪرڻ آسان بڻائي ٿي.
لاگن مان توهان مانيٽر ڪري سگهو ٿا ته ڇا ٿي رهيو آهي. هتي بنيادي نقطن جو هڪ مثال آهي:
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)، تنصيب جو رستو، ۽ صارف لانچ ڪريو.
اسان پاڻمرادو پيڪيج موڪلڻ لاءِ اختيارن کي شامل ڪري رھيا آھيون مختلف نمونن جي ذخيرو ڏانھن.