Moloko oa li-configs bakeng sa nginx, nalane ea kopo e le 'ngoe ea ho hula

Lumelang, baheso. E ntle ho li-server tsa ka tsa ntoa nginx esale e sebetsa ho tloha 2006 mme ho theosa le lilemo tsa tsamaiso ea eona ke bokelletse li-configs le li-template tse ngata. Ke ile ka rorisa nginx haholo mme ka tsela e itseng ho ile ha fumaneha hore ke bile ka qala setsi sa nginx ho hub, hape, ke bonts'a m/
Metsoalle e ile ea nkōpa hore ke ba etsetse polasi ea nts'etsopele, 'me ho e-na le ho ba hulela li-template tsa ka tse khethehileng, ke ile ka hopola morero o thahasellisang. nginxconfig.io, e hasanyang configs lishelefong 'me e lokisetsa ntho e' ngoe le e 'ngoe bakeng sa lets encrypt, joalo-joalo. Ka nahana, hobaneng? Leha ho le joalo, ke ile ka halefisoa ke taba ea hore nginxconfig e mpha ho khoasolla polokelo ea zip ho sebatli, ntle le ho ntumella ho e kenya ka kotloloho ho seva ke sebelisa wget/fetch/curl. Ke lintho life tse se nang thuso, ke hobane'ng ha ke li hloka ho sebatli, ke li hloka ho seva ho tloha ho console. Ke halefile, ke ile ka ea github ho bona boteng ba morero, e leng se ileng sa lebisa ferekong ea sona 'me, ka lebaka leo, kopo ea ho hula. Eo ke neng nke ke ka ngola ka eona haeba e ne e sa thahaselle 😉

Moloko oa li-configs bakeng sa nginx, nalane ea kopo e le 'ngoe ea ho hula

Ehlile, pele ke cheka mehloling, ke ile ka sheba moo Chrome e hulang polokelo ea zip e hlahisitsoeng ka li-configs, 'me ho na le aterese e qalang ka "blob:" e nkemetse, oops. Ho se ho hlakile hore tšebeletso ha e hlahise letho tseleng, ha e le hantle, tsohle li etsoa ke js. Ehlile, polokelo ea zip e hlahisoa ke moreki, sebatli le javascript ka boeona. Tseo. botle ke hore morero oo nginxconfig.io e ka bolokoa feela joalo ka leqephe la html, e kentsoeng ho tse ling narod.ru 'me e tla sebetsa) Ena ke tharollo e qabolang le e khahlisang haholo, leha ho le joalo, ha e bonolo haholo ho theha li-server, ha e le hantle, hantle bakeng sa seo projeke ena e se entseng. Khoasolla pokello ea nalane e hlahisitsoeng ka sebatli, ebe u e fetisetsa ho seva u sebelisa nc... ka 2019? Ke ipehetse mosebetsi oa ho fumana mokhoa oa ho khoasolla sephetho se hlahisoang ka kotloloho ho seva.
Ka mor'a ho qeta morero ona, ke ile ka qala ho nahana hore na likhetho tsa ka ke life. Mosebetsi ona o ne o thatafalitsoe ke taba ea hore ke ne ke sa batle ho kheloha boemo ba hore morero o lule e le oa pele o hloekileng, o se nang morao. Ha e le hantle, tharollo e bonolo ka ho fetisisa e ka ba ho hula li-nodejs le ho e qobella ho hlahisa li-archive tse nang le li-configs li sebelisa lihokelo tse tobileng.
Ha e le hantle, ho ne ho se na likhetho tse ngata. Hantle-ntle, ke e le 'ngoe feela e ileng ea tla kelellong. Re hloka ho theha li-configs le ho fumana sehokelo seo re ka se kopitsang ho khomphutha ea seva ho fumana polokelo ea zip.
Lifaele tse 'maloa tse ngotsoeng ka har'a polokelo ea zip tse hlahisitsoeng li ne li le boima bo itseng, li-kilobyte tse seng kae. Tharollo e totobetseng e ne e le ho fumana khoele ea base64 ho tloha polokelong ea zip e hlahisitsoeng ebe o e lahlela ka har'a buffer, athe ho seva e nang le taelo ho console.

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

re ka etsa faele ena ea zip.

nginxconfig.io e ngotsoe ka AngularJS, ha ke khone le ho nahana hore na ho ka be ho hlokahala lik'hilomithara life tsa khoutu haeba mongoli a ne a sa khetha moralo o sebetsang oa js. Empa ke khona ho nahana ka mokhoa o phethahetseng hore na sena sohle se ka kengoa ts'ebetsong joang ho VueJS, leha sena e le sehlooho se fapaneng ka ho felletseng.
Mehloling ea morero re bona mokhoa oa ho hlahisa polokelo ea 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',
	});
};

ntho e 'ngoe le e' ngoe e bonolo, u sebelisa laebrari jszip Zip e etsoa moo lifaele tsa tlhophiso li behiloeng teng. Kamora ho theha polokelo ea zip, js e e fepa ho sebatli o sebelisa laeborari FileSaver.js:

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

moo litaba li hlahisoang ke blob ea polokelo ea zip.

Ho lokile, sohle seo ke neng ke tlameha ho se etsa ke ho kenya konopo e 'ngoe haufi le eona mme ha ke tobetsa ho eona, nke ke ka boloka polokelo ea zip e hlahisitsoeng ho sebatli, empa fumana khoutu ea base64 ho eona. Kamora ho ts'oara hanyane, ke ile ka fumana mekhoa e 2, ho fapana le downloadZip e le 'ngoe feela:

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

Joalokaha e ka 'na eaba u hlokometse, ke tsamaisitse moloko oa polokelo ea zip ka boeona ho mokhoa oa poraefete oa generateZip, joalo-joalo. Ena ke AngularJS, 'me mongoli ka boeena o khomarela li-callbacks' me ha aa ka a phethahatsa ka litšepiso. downloadZip e ntse e bolokile joalo ka tlhahiso, ha downloadBase64 e entse ho hong ho fapaneng hanyane. Re theha ntho ea FileReader e tlileng ho rona ka html5 mme e se e ntse e le teng ho fihlella bakeng sa tshebediso. Eo, ka nako e 'ngoe, e ka etsang khoele ea base64 ho tloha blob, kapa ho e-na le hoo, e etsa khoele ea DataURL, empa sena ha se bohlokoa haholo ho rona, hobane DataURL e na le seo re se hlokang hantle. Bingo, ke ne ke emetsoe ke lets'oao le lenyenyane ha ke leka ho kenya tsena tsohle ka har'a buffer. Mongoli o sebelisitse laebrari morerong li-clipboardjs, e u lumellang hore u sebetse le clipboard ntle le lintho tse phatsimang, ho latela mongolo o khethiloeng. Qalong, ke ile ka etsa qeto ea ho beha base64 ea ka nthong e nang le pontšo: ha ho letho;, empa tabeng ena ha ke khone ho e beha lebokoseng la lipapali hobane ha ho karohano e etsahalang. Ka hona, sebakeng sa pontšo: ha ho letho; Ke ile ka etsa joalo

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

e ileng ea ntumella hore ke pate ntho hore e se ke ea bonoa ebe ke e tlohela leqepheng. Voila, mosebetsi o phethiloe, ha ke tobetsa konopo ea ka, mola o kang ona o behiloe ka har'a buffer:

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

eo ke e kentseng ka har'a khomphutha ho seva mme hang-hang ka fumana polokelo ea zip e nang le litlhophiso tsohle.
Mme, ehlile, ke rometse kopo ya ho hula ho mongodi, hobane... projeke e sebetsa ebile e monate, ke kopa ho bona lintlafatso ho tsoa ho sengoli le ho ba le konopo ea ka) Bakeng sa ba nang le thahasello, ke ena fereko yaka morero le eena hula kopo, moo o ka bonang seo ke se lokisitseng/ke kentse.
Tsoelopele e monate bohle)

Moloko oa li-configs bakeng sa nginx, nalane ea kopo e le 'ngoe ea ho hula

Source: www.habr.com

Eketsa ka tlhaloso