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