Kita ngumpulake Nginx kanthi sawetara prentah

Hello!
Jenengku Sergey, aku kerja dadi insinyur infrastruktur ing tim API platform tinkoff.ru.

Ing artikel iki aku bakal ngomong babagan masalah sing diadhepi tim kita nalika nyiapake balancers adhedhasar Nginx kanggo macem-macem proyek. Aku uga bakal pitutur marang kowe bab alat sing ngidini kula kanggo ngatasi paling mau.

Nginx minangka server proxy sing multifungsi lan aktif ngembangake. Nduwe akeh modul, iki dudu daftar lengkap. Saben proyek ngetrapake syarat tartamtu babagan fungsi balancer lan versi Nginx (contone, ananΓ© http / 2 lan proxying grpc), lan komposisi modul.

Kita pengin ndeleng versi anyar kanthi set modul sing dibutuhake, mlaku ing distribusi Linux tartamtu. Ing kasus kita, iki minangka sistem basis deb lan rpm. Pilihan karo kontaner ora dianggep ing artikel iki.

Kita pengin cepet ngganti fungsi balancers kita. Lan ing kene pitakonan langsung muncul: carane entuk iki nalika mbuwang sumber daya sabisa? Iku bakal luwih apik kanggo nyiyapake proses supaya kita bisa nemtokake nomer winates saka paramèter input, lan ing output nampa artefak ing wangun paket deb / rpm kanggo OS dikarepake.

AkibatΓ©, sawetara masalah bisa dirumusake:

  • Ora mesthi ana paket karo versi paling anyar saka Nginx.
  • Ora ana paket karo modul sing dibutuhake.
  • Nglumpukake lan mbangun paket kanthi manual mbutuhake wektu lan mboseni.
  • Ora ana katrangan babagan carane iki utawa conto Nginx dirakit.

Kanggo ngatasi masalah kasebut, perlu ana alat sing bakal njupuk spesifikasi ing format sing bisa diwaca manungsa lan ngumpulake paket Nginx kanthi fungsi sing dibutuhake adhedhasar.

Ora nemokake pilihan sing cocog kanggo kita babagan jembar Github, kita mutusake nggawe alat dhewe - nginx-builder.

Spesifikasi

Ing alat kita, kita pengin nggawe deskripsi spesifikasi ing bentuk kode, sing banjur bisa dilebokake ing repositori Git. Kanggo nindakake iki, kita milih format sing dikenal kanggo perkara kasebut - yaml. Tuladha spesifikasi:

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

Ing kene kita nuduhake yen kita pengin ndeleng paket deb karo Nginx versi 1.14.2 kanthi set modul sing dibutuhake. Bagean karo modul opsional. Kanggo saben sampeyan bisa nyetel:

  • Jeneng
  • Alamat ngendi sampeyan bisa njaluk:
    • Repositori Git. Sampeyan uga bisa nemtokake cabang utawa tag.
    • Link web arsip.
    • Link lokal menyang arsip.

Sawetara modul mbutuhake dependensi tambahan kanggo diinstal, contone nginx-auth-ldap mbutuhake libldap2-dev diinstal. Ketergantungan sing dibutuhake uga bisa ditemtokake nalika njlentrehake modul kasebut.

Lingkungan

Ing alat kita, sampeyan bisa kanthi cepet entuk lingkungan kanthi utilitas sing diinstal kanggo kompilasi, perakitan paket lan piranti lunak tambahan liyane. Wadah Docker kanthi kabeh sing dibutuhake ing kene (gudang wis duwe sawetara conto file Docker kanggo ubuntu lan centos).

Sawise spesifikasi digambar lan lingkungan disiapake, kita miwiti pembangun, sing sadurunge wis nginstal dependensi:

pip3 install -r requirements.txt
./main.py build -f [ΠΊΠΎΠ½Ρ„ΠΈΠ³_Ρ„Π°ΠΉΠ»].yaml -r [Π½ΠΎΠΌΠ΅Ρ€_Ρ€Π΅Π²ΠΈΠ·ΠΈΠΈ]

Nomer revisi ing kene opsional lan digunakake kanggo nggawe versi rakitan. Iki ditulis ing informasi meta paket, supaya gampang nganyari ing server.
Saka log sampeyan bisa ngawasi apa sing kedadeyan. Punika conto titik utama:

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'.

Dadi, kanthi mung sawetara prentah, kita nggawe lingkungan lan perakitan Nginx sing dibutuhake, lan paket kasebut katon ing direktori saka ngendi skrip kasebut diluncurake.

Embedding

Kita uga bisa nggabungake alat kita menyang proses CI/CD. Sembarang sistem CI sing ana saiki bisa mbantu, contone Teamcity utawa Gitlab CI.

AkibatΓ©, saben-saben spesifikasi diganti ing gudang Git, mbangun artefak kasebut kanthi otomatis diluncurake. Nomer rΓ©visi disambung karo counter peluncuran mbangun.
Kanthi wektu sethithik, sampeyan bisa ngatur artefak sing bakal dikirim menyang repositori paket lokal, Nexus, Artifactory, lan liya-liyane.

Kauntungan tambahan yaiku file konfigurasi yaml bisa disambungake menyang Ansible utawa sistem konfigurasi otomatis liyane, lan saka ing kono kita bisa njupuk nomer versi lan jinis paket sing arep kita pasang.

Apa mbesuk

Proyek kasebut durung rampung. Mangkene apa sing lagi ditindakake saiki:

  • We nggedhekake kamungkinan saka konfigurasi, nanging ing wektu sing padha tetep minangka prasaja sabisa. Sampeyan ora pengin nemtokake sewu paramΓ¨ter yen sampeyan mung perlu loro, lan liyane mathuk standar. Iki kalebu panji kompilasi (saiki sampeyan bisa ngganti ing file konfigurasi internal src/config.py), path instalasi, lan pangguna peluncuran.
  • Kita nambahake opsi kanggo ngirim paket kanthi otomatis menyang macem-macem repositori artefak.
  • Nglakokake perintah khusus nalika ngemot modul (contone, kanggo nggunakake github.com/nginx-modules/nginx_upstream_check_module sampeyan kudu ngetrapake patch versi tartamtu)
  • Tambah tes:
    • Paket wis diinstal kanthi bener.
    • Nginx duwe versi sing dibutuhake lan dibangun nganggo panji lan modul sing dibutuhake.
    • Path sing dibutuhake, akun, lan liya-liyane digawe.

Nanging sampeyan bisa nggunakake alat iki saiki, lan uga menehi saran dandan - github.com/TinkoffCreditSystems/Nginx-builder sugeng rawuh!

Source: www.habr.com

Add a comment