Ka hana ʻana o nā configs no ka nginx, ka mōʻaukala o kahi noi huki

Aloha mai e nā hoa. Nani ma kaʻu mau kikowaena kaua nginx ke holo nei mai ka makahiki 2006 a i loko o nā makahiki o kona hoʻokele ʻana ua hōʻiliʻili au i ka nui o nā configs a me nā templates. Ua hoʻomaikaʻi nui au i ka nginx a ua ʻike ʻia ua hoʻomaka wau i kahi hub nginx ma ka hub, pū kekahi, hōʻike m/
Ua noi mai nā hoaaloha iaʻu e hoʻonohonoho i kahi mahiʻai hoʻomohala no lākou, a ma kahi o ka huki ʻana iā lākou i kaʻu mau template kikoʻī, hoʻomanaʻo wau i kahi papahana hoihoi. nginxconfig.io, ka mea e hoʻopuehu i nā configs ma nā papa a hoʻomākaukau i nā mea āpau no ka lets encrypt, etc. Noʻonoʻo wau, no ke aha ʻaʻole? Eia naʻe, ua huhū au i ka hāʻawi ʻana o nginxconfig iaʻu e hoʻoiho i ka waihona zip i loko o ka polokalamu kele pūnaewele, me ka ʻole o ka ʻae ʻana iaʻu e hoʻouka pololei i ke kikowaena me ka hoʻohana ʻana iā wget/fetch/curl. He aha ka mea lapuwale, no ke aha e pono ai iaʻu i ka polokalamu kele pūnaewele, pono wau ma ka kikowaena mai ka console. Huhu, ua hele au i github e ʻike i ka ʻōpū o ka papahana, i alakaʻi ʻia i kāna ʻōpala a, ʻo ka hopena, kahi noi huki. ʻAʻole wau e kākau e pili ana inā ʻaʻole hoihoi 😉

Ka hana ʻana o nā configs no ka nginx, ka mōʻaukala o kahi noi huki

ʻOiaʻiʻo, ma mua o ka ʻeli ʻana i nā kumu, nānā au i kahi e huki ai ʻo Chrome i ka waihona zip i hana ʻia me nā configs, a aia kahi helu e hoʻomaka ana me ka "blob:" e kali ana iaʻu, oops. Ua ʻike ʻia ʻaʻole hana ka lawelawe i kekahi mea ma ke ala, ʻoiaʻiʻo, ua hana ʻia e js. ʻOiaʻiʻo, hoʻokumu ʻia ka waihona zip e ka mea kūʻai aku, ka polokalamu kele pūnaewele, a me ka javascript ponoʻī. ʻO kēlā mau. ʻo ka nani ka papahana nginxconfig.io hiki ke mālama ʻia ma ke ʻano he ʻaoʻao html, hoʻoili ʻia i kekahi narod.ru a e hana ia) He hopena ʻakaʻaka a hoihoi kēia, akā naʻe, he mea paʻakikī loa ia no ka hoʻonohonoho ʻana i nā kikowaena, ʻoiaʻiʻo, no ka mea i hana ʻia ai kēia papahana. Hoʻoiho i ka waihona i hana ʻia me kahi polokalamu kele, a laila e hoʻololi iā ia i ke kikowaena me ka hoʻohana ʻana i nc... i 2019? Hoʻonoho wau iaʻu iho i ka hana o ka ʻimi ʻana i kahi ala e hoʻoiho pololei ai i ka config hopena i ke kikowaena.
Ma hope o ka hana ʻana i ka papahana, hoʻomaka wau e noʻonoʻo i kaʻu mau koho. Ua paʻakikī ka hana ma ka ʻoiaʻiʻo ʻaʻole wau makemake e haʻalele i ke ʻano o ka papahana e noho maʻemaʻe i mua, me ka ʻole o ka hope. ʻOiaʻiʻo, ʻo ka hopena maʻalahi loa ka huki ʻana i nā nodejs a hoʻoikaika iā ia e hana i kahi waihona me nā configs me ka hoʻohana ʻana i nā loulou pololei.
ʻOiaʻiʻo, ʻaʻole nui nā koho. ʻOi aku ka pololei, hoʻokahi wale nō i komo i ka manaʻo. Pono mākou e hoʻonohonoho i nā configs a loaʻa kahi loulou i hiki iā mākou ke kope i ka console server e kiʻi i kahi waihona zip.
ʻO kekahi mau faila kikokikona i loko o ka waihona zip i loaʻa mai ua kaumaha iki, he mau kilobytes maoli. ʻO ka hopena ʻike ʻia ʻo ka loaʻa ʻana o ke kaula base64 mai ka waihona zip i hana ʻia a hoʻolei i loko o ka buffer, ʻoiai ma ka server me ke kauoha i ka console.

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

hiki iā mākou ke hana i kēia faila zip like.

nginxconfig.io ua kākau ʻia ma AngularJS, ʻaʻole hiki iaʻu ke noʻonoʻo i nā kilomita o ke code e koi ʻia inā ʻaʻole i koho ka mea kākau i kahi hoʻolālā js reactive. Akā hiki iaʻu ke noʻonoʻo pono i ka maʻalahi a me ka nani o kēia mau mea āpau i hiki ke hoʻokō ʻia ma VueJS, ʻoiai he kumuhana ʻokoʻa loa kēia.
Ma nā kumuwaiwai papahana ʻike mākou i kahi ala no ka hana ʻana i kahi waihona 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',
	});
};

maʻalahi nā mea a pau, me ka hoʻohana ʻana i ka waihona jszip Hana ʻia kahi zip kahi i waiho ʻia ai nā faila hoʻonohonoho. Ma hope o ka hana ʻana i ka waihona zip, hānai ʻo js iā ia i ka polokalamu kele me ka hoʻohana ʻana i ka waihona FileSaver.js:

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

kahi maʻiʻo ka hopena blob object o ka waihona zip.

ʻAe, ʻo kaʻu mea e hana ai ʻo ka hoʻohui ʻana i kahi pihi ʻē aʻe ma hope o ia a i ka wā i kaomi ai au iā ia, ʻaʻole wau e mālama i ka waihona zip i ka polokalamu kele pūnaewele, akā e kiʻi i ka code base64 mai ia mea. Ma hope o ka huli ʻana i kahi liʻiliʻi, loaʻa iaʻu nā ala ʻelua, ma kahi o hoʻokahi 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',
	});
};

E like me kāu i ʻike ai, ua hoʻoneʻe au i ka hanauna o ka waihona zip iā ia iho i ke ʻano hana generateZip pilikino, a pēlā aku. ʻO AngularJS kēia, a ʻo ka mea kākau ponoʻī e pili ana i nā callbacks a ʻaʻole i hoʻokō ma o nā ʻōlelo hoʻohiki. Ua mālama ʻo downloadZip ma ke ʻano he huahana, ʻoiai ʻo downloadBase64 i hana i kahi mea ʻokoʻa. Hana mākou i kahi mea FileReader i hiki mai iā mākou ma html5 a ua paʻa hiki ke loaʻa no ka hoohana ana. ʻO ia, i ka manawa hoʻokahi, hiki ke hana i kahi string base64 mai kahi blob, a i ʻole, hana ia i kahi string DataURL, akā ʻaʻole koʻikoʻi kēia no mākou, no ka mea Loaʻa i ka DataURL ka mea a mākou e pono ai. ʻO Bingo, ua kali mai kahi ʻūhā liʻiliʻi iaʻu i koʻu hoʻāʻo ʻana e hoʻokomo i kēia mau mea a pau i ka buffer. Ua hoʻohana ka mea kākau i ka waihona ma ka papahana clipboardjs, hiki iā ʻoe ke hana me ka clipboard me ka ʻole o nā mea uila, e pili ana i ka kikokikona i koho ʻia. I ka hoʻomaka ʻana, ua hoʻoholo wau e kau i kaʻu base64 i kahi mea me ka hōʻike: ʻaʻohe;, akā i kēia hihia ʻaʻole hiki iaʻu ke kau i ka clipboard no ka mea. ʻaʻohe kaʻawale. No laila, ma kahi o ka hōʻike:ʻaʻohe; Ua hana ʻē wau

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

i ʻae iaʻu e hūnā i ka mea mai ka ʻike a waiho maoli ma ka ʻaoʻao. Voila, ua pau ka hana, i koʻu kaomi ʻana i kaʻu pihi, ua kau ʻia kahi laina e like me kēia i loko o ka buffer:

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

kahi aʻu i hoʻopili wale ai i ka console ma ka kikowaena a loaʻa koke i kahi waihona zip me nā configs āpau.
A, ʻoiaʻiʻo, ua hoʻouna wau i kahi noi huki i ka mea kākau, no ka mea... ʻeleu a ola ka papahana, makemake au e ʻike i nā mea hou mai ka mea kākau a loaʻa kaʻu pihi ponoʻī) No ka poʻe hoihoi, eia koʻu ʻōpuʻu papahana a iaʻu iho noi noi, kahi āu e ʻike ai i kaʻu mea i hoʻoponopono/i hoʻohui ai.
Hauʻoli hoʻomohala a pau)

Ka hana ʻana o nā configs no ka nginx, ka mōʻaukala o kahi noi huki

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka