Jenerasyon konfigirasyon pou nginx, istwa yon sèl demann rale

Bonjou, kanmarad. Bèl sou sèvè konba mwen yo nginx li te kouri depi 2006 ak sou ane yo nan administrasyon li yo mwen te akimile yon anpil nan konfigirasyon ak modèl. Mwen fè lwanj nginx anpil ak yon jan kanmenm li te tounen soti ke mwen menm te kòmanse yon mwaye nginx sou mwaye a, tou, montre m /
Zanmi yo te mande m pou m tabli yon fèm devlopman pou yo, epi olye m te trennen yo modèl espesifik mwen yo, mwen te sonje yon pwojè enteresan. nginxconfig.io, ki gaye konfigirasyon sou etajè yo epi prepare tout bagay pou lets ancrypt, elatriye. Mwen te panse, poukisa pa? Sepandan, mwen te fache pa lefèt ke nginxconfig ofri m 'telechaje achiv postal la nan navigatè a, san yo pa pèmèt mwen telechaje li dirèkteman sou sèvè a lè l sèvi avèk wget/fetch/curl. Ki istwa san sans, poukisa mwen bezwen li nan navigatè a, mwen bezwen li sou sèvè a soti nan konsole a. Fache, mwen te ale nan github yo wè kouraj yo nan pwojè a, ki te mennen nan fouchèt li yo ak, kòm yon rezilta, yon demann rale. Ki mwen pa ta ekri si li pa enteresan 😉

Jenerasyon konfigirasyon pou nginx, istwa yon sèl demann rale

Natirèlman, anvan yo fouye sous yo, mwen gade kote Chrome rale achiv postal ki te pwodwi a ak konfigirasyon, epi gen yon adrès ki kòmanse ak "blob:" t ap tann pou mwen, oops. Li te deja vin klè ke sèvis la pa jenere anyen sou wout la, an reyalite, li nan tout fè pa js. Vreman vre, achiv postal la pwodwi pa kliyan an, navigatè a, ak javascript tèt li. Moun sa yo. bote a se ke pwojè a nginxconfig.io ka tou senpleman sove kòm yon paj html, Uploaded nan kèk narod.ru epi li pral travay) Sa a se yon solisyon trè komik ak enteresan, sepandan, li se fò anpil enkonvenyan pou mete kanpe serveurs, an reyalite, egzakteman pou sa pwojè sa a te kreye. Telechaje achiv pwodwi a ak yon navigatè, epi transfere li sou sèvè a lè l sèvi avèk nc... nan 2019? Mwen mete tèt mwen travay pou jwenn yon fason pou telechaje konfigirasyon ki kapab lakòz la dirèkteman sou sèvè a.
Apre forking pwojè a, mwen te kòmanse reflechi sou ki opsyon mwen te ye. Travay la te konplike pa lefèt ke mwen pa t 'vle devye nan kondisyon an ke pwojè a ta dwe rete yon pi bon kalite front-end, san okenn back-end. Natirèlman, solisyon ki pi senp la ta dwe rale moute nodejs ak fòse li jenere yon achiv ak konfigirasyon lè l sèvi avèk lyen dirèk.
Aktyèlman, pa te gen anpil opsyon. Plis jisteman, yon sèl te vin nan tèt ou. Nou bezwen mete konfigirasyon yo epi jwenn yon lyen ke nou ka kopye nan konsole sèvè a pou jwenn yon achiv postal.
Plizyè dosye tèks nan achiv postal ki te lakòz yo te peze yon ti jan, literalman kèk kilobyte. Solisyon evidan an se te jwenn fisèl la base64 soti nan achiv postal ki te pwodwi a epi jete li nan tanpon an, pandan y ap sou sèvè a ak lòd la nan konsole a.

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

nou te kapab kreye menm dosye zip sa a.

nginxconfig.io te ekri nan AngularJS, mwen pa menm ka imajine ki kilomèt kòd yo ta nesesè si otè a pa te chwazi yon fondasyon js reyaktif. Men, mwen ka parfe imajine ki jan pi senp ak pi bèl tout bagay sa a ta ka aplike nan VueJS, byenke sa a se yon sijè konplètman diferan.
Nan resous pwojè yo nou wè yon metòd pou jenere yon achiv postal:

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

tout bagay se byen senp, lè l sèvi avèk bibliyotèk la jszip Yo kreye yon zip kote fichye konfigirasyon yo mete. Apre kreye achiv postal la, js bay li nan navigatè a lè l sèvi avèk bibliyotèk la FileSaver.js:

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

kote kontni se objè blob ki kapab lakòz nan achiv postal la.

Oke, tout sa mwen te dwe fè se te ajoute yon lòt bouton bò kote li epi lè mwen klike sou li, mwen pa ta sove achiv postal ki kapab lakòz nan navigatè a, men jwenn kòd la base64 soti nan li. Apre mwen fin jwe yon ti jan, mwen te resevwa 2 metòd, olye pou yo yon sèl 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',
	});
};

Kòm ou ka remake, mwen te deplase jenerasyon an nan achiv postal tèt li nan metòd la prive generateZip, ak sou sa. Sa a se AngularJS, ak otè a li menm kole ak callbacks epi li pa t aplike li atravè pwomès yo. downloadZip toujou fè saveAs kòm yon pwodiksyon, pandan y ap downloadBase64 te fè yon bagay yon ti kras diferan. Nou kreye yon objè FileReader ki te vin jwenn nou nan html5 e li deja byen aksesib pou itilize. Ki, nan yon sèl fwa, ka fè yon fisèl base64 soti nan yon blob, oswa pito, li fè yon fisèl DataURL, men sa a pa tèlman enpòtan pou nou, paske DataURL gen egzakteman sa nou bezwen. Bingo, yon ti dechire t ap tann mwen lè mwen te eseye mete tout bagay sa yo nan tanpon an. Otè a te itilize bibliyotèk la nan pwojè a clipboardjs, ki pèmèt ou travay ak clipboard la san objè flash, ki baze sou tèks la chwazi. Okòmansman, mwen te deside mete baz64 mwen an nan yon eleman ki gen display:none;, men nan ka sa a mwen pa t 'kapab mete l' sou clipboard la paske pa gen okenn separasyon rive. Se poutèt sa, olye pou yo montre: okenn; Mwen te fè

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

ki te pèmèt mwen tou de kache eleman nan gade ak aktyèlman kite li sou paj la. Voila, travay la te fini, lè mwen klike sou bouton mwen an, yo te mete yon liy tankou sa a nan tanpon an:

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

ki mwen tou senpleman kole nan konsole a sou sèvè a epi imedyatman te resevwa yon achiv postal ak tout konfigirasyon yo.
Epi, nan kou, mwen te voye yon demann rale bay otè a, paske... pwojè a se aktif ak vivan, mwen ta renmen wè mizajou soti nan otè a epi gen bouton pwòp mwen) Pou moun ki enterese, isit la li se fouchèt mwen an pwojè ak tèt li rale demann, kote ou ka wè sa mwen korije / ajoute.
Bon devlopman tout moun)

Jenerasyon konfigirasyon pou nginx, istwa yon sèl demann rale

Sous: www.habr.com

Add nouvo kòmantè