Generasi configs kanggo nginx, sajarah siji panjalukan narik

Salam, kanca. Cantik ing server tempurku nginx wis mlaku wiwit 2006 lan liwat taun administrasi aku wis nglumpukake akeh configs lan cithakan. Aku ngalem nginx akeh lan piye wae ternyata aku malah miwiti hub nginx ing hub, uga, nuduhake mati m /
Kanca-kanca njaluk aku nyiyapake peternakan pangembangan kanggo dheweke, lan tinimbang nyeret template khususku, aku kelingan proyek sing menarik. nginxconfig.io, kang buyar configs ing rak-rak lan nyiapake kabeh kanggo ngijini encrypt, etc. Aku mikir, kenapa ora? Nanging, aku nesu amarga nginxconfig nawakake aku ndownload arsip zip menyang browser, tanpa ngidini aku ngunggah langsung menyang server nggunakake wget/fetch/curl. Apa omong kosong, kok aku kudu ing browser, Aku kudu ing server saka console. Nesu, aku lunga menyang github kanggo ndeleng guts proyek kasebut, sing nyebabake garpu lan, minangka asil, njaluk panjaluk. Sing aku ora bakal nulis yen ora menarik πŸ˜‰

Generasi configs kanggo nginx, sajarah siji panjalukan narik

Mesthi, sadurunge ngeduk sumber, aku ndeleng ing ngendi Chrome narik arsip zip sing digawe karo konfigurasi, lan ana alamat sing diwiwiti karo "blob:" nunggu aku, oops. Wis jelas yen layanan kasebut ora ngasilake apa-apa ing dalan, nyatane, kabeh ditindakake dening js. Pancen, arsip zip digawe dening klien, browser, lan javascript dhewe. Sing. kaendahan iku sing project nginxconfig.io bisa disimpen mung minangka kaca html, diunggah menyang sawetara narod.ru lan bakal bisa) Iki minangka solusi sing lucu lan menarik, nanging ora nyenengake kanggo nyetel server, nyatane, persis kanggo proyek iki digawe. Download arsip sing digawe nganggo browser, banjur transfer menyang server nggunakake nc... ing 2019? Aku nyetel dhewe tugas nemokake cara kanggo ngundhuh config asil langsung menyang server.
Sawise nggawe proyek kasebut, aku wiwit mikir babagan pilihanku. Tugas iki rumit amarga aku ora pengin nyimpang saka syarat proyek kasebut kudu tetep ngarep-mburi, tanpa mburi mburi. Mesthine, solusi sing paling gampang yaiku narik nodejs lan meksa nggawe arsip kanthi konfigurasi nggunakake tautan langsung.
Bener, ora ana akeh pilihan. Luwih tepate, mung siji sing kelingan. Kita kudu nyiyapake konfigurasi lan entuk link sing bisa disalin menyang konsol server kanggo entuk arsip zip.
Sawetara file teks ing arsip zip sing diasilake bobote rada sithik, kanthi harfiah sawetara kilobyte. Solusi sing jelas yaiku entuk string base64 saka arsip zip sing digawe lan uncalan menyang buffer, nalika ana ing server kanthi prentah ing konsol.

echo 'base64string' | base64 --decode > config.zip

kita bisa nggawe file zip sing padha.

nginxconfig.io ditulis ing AngularJS, aku ora bisa mbayangake apa kilometer kode sing dibutuhake yen penulis ora milih kerangka js reaktif. Nanging aku bisa mbayangno carane luwih prasaja lan luwih ayu kabeh iki bisa dileksanakake ing VueJS, sanajan iki topik temen beda.
Ing sumber daya proyek kita ndeleng cara kanggo ngasilake arsip zip:

$scope.downloadZip = function() {
	var zip = new JSZip();

	var sourceCodes = $window.document.querySelectorAll('main .file .code.source');

	for (var i = 0; i < sourceCodes.length; i++) {
		var sourceCode = sourceCodes[i];

		var name	= sourceCode.dataset.filename;
		var content	= sourceCode.children[0].children[0].innerText;

		if (!$scope.isSymlink() && name.match(/^sites-available//)) {
			name = name.replace(/^sites-available//, 'sites-enabled/');
		}

		zip.file(name, content);

		if (name.match(/^sites-available//)) {
			zip.file(name.replace(/^sites-available//, 'sites-enabled/'), '../' + name, {
				unixPermissions: parseInt('120755', 8),
			});
		}
	}

	zip.generateAsync({
		type: 'blob',
		platform: 'UNIX',
	}).then(function(content) {
		saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
	});

	gtag('event', $scope.getDomains().join(','), {
		event_category: 'download_zip',
	});
};

kabeh iku cukup prasaja, nggunakake perpustakaan jszip A zip digawe ing ngendi file konfigurasi diselehake. Sawise nggawe arsip zip, js feed menyang browser nggunakake perpustakaan FileSaver.js:

saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');

ing ngendi isi minangka obyek gumpalan asil saka arsip zip.

Ok, kabeh aku kudu nambah tombol liyane ing jejere lan nalika aku diklik ing, Aku ora bakal nyimpen arsip zip asil kanggo browser, nanging njaluk kode base64 saka iku. Sawise muter-muter, aku entuk 2 cara, tinimbang mung siji downloadZip:

$scope.downloadZip = function() {
	generateZip(function (content) {
		saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
	});

	gtag('event', $scope.getDomains().join(','), {
		event_category: 'download_zip',
	});
};
$scope.downloadBase64 = function() {
	generateZip(function (content) {
		var reader = new FileReader();
		reader.readAsDataURL(content);
		reader.onloadend = function() {
			var base64 = reader.result.replace(/^data:.+;base64,/, '');
			// Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ base64 ΠΊΠ°ΠΊ Ρ€Π°Π· Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΌΠ½Π΅ zip Π°Ρ€Ρ…ΠΈΠ² Π² Π²ΠΈΠ΄Π΅ base64 строки
		}
	});

	gtag('event', $scope.getDomains().join(','), {
		event_category: 'download_base64',
	});
};

Nalika sampeyan bisa uga wis ngeweruhi, Aku dipindhah generasi saka arsip zip dhewe kanggo cara generateZip pribadi, lan ing. Iki AngularJS, lan penulis dhewe tetep nelpon maneh lan ora ngetrapake kanthi janji. downloadZip isih nindakake saveAs minangka output, nalika downloadBase64 nindakake sing rada beda. Kita nggawe obyek FileReader sing teka ing html5 lan wis cukup bisa diakses kanggo nggunakake. Sing, ing siji wektu, bisa nggawe string base64 saka blob, utawa luwih, nggawe string DataURL, nanging iki ora penting banget kanggo kita, amarga DataURL ngemot persis apa sing kita butuhake. Bingo, snag sethitik nunggu kula nalika aku nyoba kanggo sijine kabeh iki ing buffer. Penulis nggunakake perpustakaan ing proyek kasebut clipboardjs, sing ngidini sampeyan nggarap clipboard tanpa obyek lampu kilat, adhedhasar teks sing dipilih. Kaping pisanan, aku mutusake kanggo nyelehake base64 ing unsur kanthi tampilan: ora ana;, nanging ing kasus iki aku ora bisa nyelehake ing clipboard amarga ora ana pisah. Mulane, tinimbang tampilan: ora ana; aku

position: absolute;
z-index: -1;
opacity: 0;

sing ngidini kula kanggo ndhelikake unsur saka tampilan lan bener ninggalake ing kaca. Voila, tugas wis rampung, nalika aku ngeklik tombol, baris kaya iki diselehake ing buffer:

echo 'base64string' | base64 --decode > config.zip

kang aku mung paste menyang console ing server lan langsung nampa arsip zip karo kabeh configs.
Lan, mesthi, aku ngirim panjaluk tarik menyang penulis, amarga ... proyek kasebut aktif lan aktif, aku pengin ndeleng nganyari saka penulis lan duwe tombol dhewe) Kanggo sing kasengsem, kene garpu kula proyek lan aku narik panyuwunan, ngendi sampeyan bisa ndeleng apa aku didandani / ditambahake.
Sugeng pembangunan everyone)

Generasi configs kanggo nginx, sajarah siji panjalukan narik

Source: www.habr.com

Add a comment