Isizukulwane se-configs ye-nginx, umlando wesicelo esisodwa sokudonsa

Sanibonani bakwethu. Kuhle kumaseva wami wokulwa nginx ibisebenza kusukela ngo-2006 futhi phakathi neminyaka yokuphatha kwayo ngiye ngaqongelela izilungiselelo nezifanekiso eziningi. Ngancoma kakhulu nginx ngavele ngaqhanyelwa ngaze ngaqala nginx hub nami ngibukisa m/
Abangane bangicele ukuba ngibabekele ipulazi lokuthuthukisa, futhi esikhundleni sokubahudulela izifanekiso zami ezithile, ngakhumbula iphrojekthi ethokozisayo. nginxconfig.io, esakaza ukulungiselelwa emashalofini futhi ilungise yonke into ukuze i-lets encrypt, njll. Ngacabanga, kungani kungenjalo? Nokho, ngicasulwe ukuthi i-nginxconfig inginikeza ukulanda ingobo yomlando ye-zip esipheqululini, ngaphandle kokungivumela ukuthi ngiyilayishe ngqo kuseva ngisebenzisa i-wget/fetch/curl. Yimiphi imibhedo, kungani ngiyidinga kusiphequluli, ngiyidinga kuseva kusuka ku-console. Ngithukuthele, ngaya ku-github ukuze ngibone i-guts yephrojekthi, eyaholela emfolokoni yayo futhi, ngenxa yalokho, isicelo sokudonsa. Engingeke ngibhale ngakho ukube bekungajabulisi πŸ˜‰

Isizukulwane se-configs ye-nginx, umlando wesicelo esisodwa sokudonsa

Impela, ngaphambi kokumba emithonjeni, ngibheke lapho i-Chrome idonsa khona ingobo yomlando ye-zip ekhiqiziwe ngezilungiselelo, futhi kukhona ikheli eliqala ngokuthi β€œblob:” belingilindile, eshu. Sekuvele kwacaca ukuthi isevisi ayikhiqizi lutho endleleni, empeleni, konke kwenziwa ngu-js. Ngempela, ingobo yomlando ye-zip yenziwa iklayenti, isiphequluli, kanye ne-javascript ngokwayo. Labo. ubuhle ukuthi iphrojekthi nginxconfig.io ingagcinwa kalula njengekhasi le-html, lilayishwe kwezinye narod.ru futhi izosebenza) Lesi yisixazululo esihlekisayo nesithakazelisa kakhulu, nokho, akulula kakhulu ukusetha amaseva, empeleni, lokho okwadalwa le phrojekthi. Landa ingobo yomlando ekhiqiziwe ngesiphequluli, bese uyidlulisela kuseva usebenzisa u-nc... ngo-2019? Ngizibekele umsebenzi wokuthola indlela yokulanda ukulungiselelwa okuwumphumela ngqo kuseva.
Ngemva kokuphothula iphrojekthi, ngaqala ukucabanga ngokuthi yiziphi izinketho zami. Umsebenzi waba nzima ngoba ngangingafuni ukuchezuka esimweni sokuthi iphrojekthi kufanele ihlale iyisiphetho esimsulwa, ngaphandle kokubuyela emuva. Kunjalo, isixazululo esilula kungaba ukudonsa ama-nodejs bese uyiphoqa ukuthi ikhiqize ingobo yomlando enezilungiselelo kusetshenziswa izixhumanisi eziqondile.
Empeleni, zazingekho izinketho eziningi. Ngokunembayo, munye kuphela owafika engqondweni. Sidinga ukusetha izilungiselelo futhi sithole isixhumanisi esingasikopisha kukhonsoli yeseva ukuze sithole ingobo yomlando ye-zip.
Amafayela ombhalo amaningana kungobo yomlando ye-zip abe nesisindo esincane, amakhilobhayithi ambalwa ngokwezwi nezwi. Isixazululo esisobala kwakuwukuthola iyunithi yezinhlamvu ye-base64 kusuka kungobo yomlando ye-zip ekhiqiziwe bese uyiphonsa ku-buffer, ngenkathi ikuseva enomyalo kukhonsoli.

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

singadala leli fayela le-zip elifanayo.

nginxconfig.io yabhalwa nge-AngularJS, angikwazi nokucabanga ukuthi yimaphi amakhilomitha ekhodi ebingadingeka ukube umbhali ubengakhethanga uhlaka lwe-js olusebenzayo. Kodwa ngingacabanga kahle ukuthi kulula kangakanani futhi kuhle kangakanani konke lokhu okungase kusetshenziswe ku-VueJS, nakuba lesi kuyisihloko esihluke ngokuphelele.
Kuzinsiza zephrojekthi sibona indlela yokukhiqiza ingobo yomlando ye-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',
	});
};

yonke into ilula, usebenzisa umtapo wolwazi jszip I-zip yenziwa lapho amafayela okucupha abekwe khona. Ngemva kokudala ingobo yomlando ye-zip, i-js iyiphakela isiphequluli isebenzisa ilabhulali I-FileSaver.js:

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

lapho okuqukethwe kuwumphumela we-blob yengobo yomlando ye-zip.

Kulungile, obekufanele ngikwenze nje ukungeza enye inkinobho eduze kwayo futhi lapho ngichofoza kuyo, bengingeke ngilondoloze ingobo yomlando ye-zip ewumphumela esipheqululini, kodwa ngithole ikhodi ye-base64 kuyo. Ngemuva kokuzulazula kancane, ngathola izindlela ezi-2, esikhundleni se-downloadZip eyodwa kuphela:

$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',
	});
};

Njengoba kungenzeka ukuthi ubonile, ngihambise ukwakhiwa kwengobo yomlando ye-zip ngokwayo endleleni eyimfihlo ye-genericZip, njalonjalo. Lena yi-AngularJS, futhi umbhali ngokwakhe unamathela kuma-callbacks futhi akazange ayisebenzise ngezithembiso. i-downloadZip isalondolozaAs njengokuphumayo, kuyilapho i-downloadBase64 yenza okuthile okuhluke kancane. Sakha into yeFayileReader eze kithi ku-html5 futhi isivele ilungile kufinyeleleka ukusetshenziswa. Okuthi, ngesikhathi esisodwa, kungenza uchungechunge lwe-base64 kusuka ku-blob, noma kunalokho, kwenza i-DataURL, kodwa lokhu akubalulekile kangako kithi, ngoba IdathaURL iqukethe ngqo esikudingayo. Ibhingo, i-snag encane yayingilindile lapho ngizama ukufaka konke lokhu ku-buffer. Umbhali usebenzise umtapo wolwazi kuphrojekthi amabhodi wokunamathiselaj, okuvumela ukuthi usebenze ngebhodi lokunamathisela ngaphandle kwezinto ezikhanyayo, ngokusekelwe kumbhalo okhethiwe. Ekuqaleni, nginqume ukubeka i-base64 yami entweni ene-display: none;, kodwa kulokhu angikwazanga ukuyibeka ebhodini lokunamathisela ngoba akukho ukwehlukana okwenzekayo. Ngakho-ke, esikhundleni sokubonisa:akukho; ngenzile

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

okungivumele ukuthi ngifihle i-elementi ukuze ngingayiboni futhi ngiyishiye ekhasini. Voila, umsebenzi uqediwe, lapho ngichofoza inkinobho yami, umugqa ofana nalona wafakwa kubhafa:

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

engivele ngayinamathisela kukhonsoli kuseva futhi ngathola ngokushesha ingobo yomlando ye-zip enakho konke ukulungiselelwa.
Futhi, kunjalo, ngithumele isicelo sokudonsa kumbhali, ngoba... iphrojekthi iyasebenza futhi iyaphila, ngingathanda ukubona izibuyekezo ezivela kumbhali futhi ngibe nenkinobho yami) Kulabo abanentshisekelo, nansi imfologo yami iphrojekthi kanye naye ukudonsa isicelo, lapho ungabona khona engikulungisile/ngengezile.
Intuthuko ejabulisayo nonke)

Isizukulwane se-configs ye-nginx, umlando wesicelo esisodwa sokudonsa

Source: www.habr.com

Engeza amazwana