Сайн уу!
Намайг Сергей гэдэг, би tinkoff.ru платформын API багт дэд бүтцийн инженерээр ажилладаг.
Энэ нийтлэлд би тэнцвэржүүлэгч бэлтгэхэд манай баг тулгарч байсан бэрхшээлүүдийн талаар ярих болно
Nginx бол олон үйлдэлт, идэвхтэй хөгжиж буй прокси сервер юм. Энэ нь олон тооны модулиудтай,
Бид тодорхой Линукс түгээлтийн дор ажилладаг шаардлагатай модулиудын шинэ хувилбарыг харахыг хүсч байна. Манай тохиолдолд эдгээр нь deb- болон rpm-д суурилсан системүүд юм. Энэ зүйлд савтай сонголтыг авч үзэхгүй.
Бид тэнцвэржүүлэгчийнхээ функцийг хурдан өөрчлөхийг хүсч байна. Эндээс нэн даруй асуулт гарч ирнэ: аль болох бага нөөц зарцуулж байхад яаж үүнд хүрэх вэ? Хязгаарлагдмал тооны оролтын параметрүүдийг зааж өгөх, гаралт дээр хүссэн үйлдлийн системд зориулж deb/rpm багц хэлбэрээр олдворыг хүлээн авахын тулд процессыг тохируулах нь илүү дээр байх болно.
Үүний үр дүнд хэд хэдэн асуудлыг тодорхойлж болно:
- Nginx-ийн хамгийн сүүлийн хувилбартай багцууд үргэлж байдаггүй.
- Шаардлагатай модулиудтай багц байхгүй.
- Багцыг гараар эмхэтгэх, бүтээх нь цаг хугацаа их шаарддаг бөгөөд уйтгартай ажил юм.
- Энэ эсвэл тэр Nginx инстанцыг хэрхэн угсардаг талаар ямар ч тайлбар байхгүй байна.
Эдгээр асуудлыг шийдвэрлэхийн тулд хүний унших боломжтой форматын тодорхойлолтыг оруулан авч, түүн дээр суурилсан шаардлагатай функц бүхий Nginx багцыг цуглуулах хэрэгсэл шаардлагатай байна.
Github-ийн өргөн уудам газар дээр бидэнд тохирох сонголтыг олохгүй байгаа тул бид өөрсдийн хэрэгсэл бүтээхээр шийдсэн -
Спецификации
Манай хэрэгсэлд бид техникийн тодорхойлолтын тайлбарыг код хэлбэрээр үүсгэхийг хүссэн бөгөөд үүнийг 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 суулгасан байхыг шаарддаг. Мөн модулийг тайлбарлахдаа шаардлагатай хамаарлыг зааж өгч болно.
Байгаль орчин
Манай хэрэгсэлд та эмхэтгэх, багц угсрах болон бусад туслах програм хангамжийг суулгасан хэрэгслүүдийг хурдан авах боломжтой. Танд хэрэгтэй бүх зүйл бүхий Docker контейнер энд хамгийн тохиромжтой (ангад ubuntu болон centos-д зориулсан 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'.
Тиймээс бид хэдхэн командын тусламжтайгаар орчин болон шаардлагатай Nginx угсралтыг бий болгож, багц нь скриптийг эхлүүлсэн лавлах хэсэгт гарч ирнэ.
Оруулсан
Мөн бид хэрэглүүрээ CI/CD процесст нэгтгэх боломжтой. Жишээлбэл, өнөөдөр байгаа олон тооны CI системүүдийн аль нэг нь үүнд тусалж чадна
Үүний үр дүнд Git репозиторийн техникийн үзүүлэлт өөрчлөгдөх бүрт олдворыг бүтээх ажил автоматаар нээгддэг. Засварын дугаар нь бүтээх эхлүүлэх тоолууртай холбогдсон байна.
Бага зэрэг хугацаа зарцуулснаар та олдворыг өөрийн локал багцын агуулах, Nexus, Artifactory гэх мэт рүү илгээхээр тохируулах боломжтой.
Нэмэлт давуу тал нь yaml тохиргооны файлыг Ansible эсвэл өөр автомат тохиргооны системд холбох боломжтой бөгөөд тэндээс бид суулгахыг хүсч буй хувилбарын дугаар болон багцын төрлийг авч болно.
Дараа нь юу юм
Төсөл хараахан дуусаагүй байна. Одоо бид юу дээр ажиллаж байна:
- Бид тохиргоо хийх боломжийг өргөжүүлдэг, гэхдээ үүнтэй зэрэгцэн үүнийг аль болох энгийн байлгах хэрэгтэй. Хэрэв танд зөвхөн хоёр хэрэгтэй бол мянган параметрийг тодорхойлохыг хүсэхгүй байгаа бөгөөд бусад нь анхдагчаар тохирно. Үүнд эмхэтгэлийн туг (одоо та тэдгээрийг src/config.py дотоод тохиргооны файлаас өөрчлөх боломжтой), суулгах зам, хэрэглэгчийг эхлүүлэх зэрэг орно.
- Бид төрөл бүрийн олдворын агуулах руу автоматаар багц илгээх сонголтыг нэмж байна.
- Модуль ачаалах үед захиалгат командыг гүйцэтгэх (жишээлбэл, ашиглах
github.com/nginx-modules/nginx_upstream_check_module та эхлээд тодорхой хувилбарын нөхөөсийг ашиглах ёстой) - Тест нэмэх:
- Багцыг зөв суулгасан.
- Nginx нь шаардлагатай хувилбартай бөгөөд шаардлагатай туг, модулиудаар бүтээгдсэн.
- Шаардлагатай зам, данс гэх мэтийг бий болгодог.
Гэхдээ та одоо энэ хэрэгслийг ашиглаж болно, мөн сайжруулалтыг санал болгож болно -
Эх сурвалж: www.habr.com