Cumraíochtaí a ghiniúint do nginx, stair iarratais tarraingthe amháin

Beannachtaí, a chomrádaithe. Go hálainn ar mo fhreastalaithe comhraic nginx ag rith ó 2006 agus thar na blianta ina riarachán tá go leor cumraíochtaí agus teimpléid bailithe agam. Mhol mé nginx go mór agus ar bhealach éigin d'éirigh sé amach gur thosaigh mé fiú mol nginx ar an mol, freisin, taispeáin m/
D'iarr Cairde orm feirm forbartha a chur ar bun dóibh, agus in ionad mo theimpléid shonracha a tharraingt orthu, chuimhnigh mé ar thionscadal suimiúil nginxconfig.io, a scaipeann configs ar na seilfeanna agus a ullmhaíonn gach rud le haghaidh ligeann criptithe, etc. Shíl mé, cén fáth nach bhfuil? Mar sin féin, chuir an bhfíric go dtugann nginxconfig dom an cartlann zip a íoslódáil isteach sa bhrabhsálaí, gan ligean dom é a uaslódáil go díreach chuig an bhfreastalaí ag baint úsáide as wget / fetch / curl. Cén nonsense, cén fáth a bhfuil sé de dhíth orm sa bhrabhsálaí, is gá dom é ar an bhfreastalaí as an consól. Feargach, chuaigh mé go dtí github a fheiceáil inní an tionscadail, a ba chúis leis a forc agus, mar thoradh air sin, iarratas tarraingt. Rud nach scríobhfainn faoi mura mbeadh sé suimiúil 😉

Cumraíochtaí a ghiniúint do nginx, stair iarratais tarraingthe amháin

Ar ndóigh, sula ndeachaigh mé isteach sna foinsí, d'fhéach mé ar an áit a dtarraingíonn Chrome an chartlann zip ginte le cumraíochtaí, agus bhí seoladh ag tosú le “blob:" ag fanacht liom, oops. Tá sé soiléir cheana féin nach gineann an tseirbhís rud ar bith ar an mbealach, i ndáiríre, déanann js é go léir. Go deimhin, gineann an cliant, an brabhsálaí agus an javascript féin an chartlann zip. Iad siúd. is é an áilleacht go bhfuil an tionscadal nginxconfig.io Is féidir iad a shábháil go simplí mar leathanach html, uaslódáil chuig roinnt narod.ru agus oibreoidh sé) Is réiteach an-ghreannmhar agus suimiúil é seo, áfach, tá sé thar a bheith deacair freastalaithe a bhunú, i ndáiríre, go díreach cad a cruthaíodh an tionscadal seo. Íoslódáil an chartlann ginte le brabhsálaí, agus ansin é a aistriú chuig an bhfreastalaí ag baint úsáide as nc... in 2019? Chuir mé an tasc orm féin bealach a aimsiú chun an cumraíocht a bhí mar thoradh air a íoslódáil go díreach chuig an bhfreastalaí.
Tar éis dom an tionscadal a fhorchur, thosaigh mé ag smaoineamh ar na roghanna a bhí agam. Ba chasta an tasc toisc nach raibh mé ag iarraidh imeacht ón gcoinníoll gur cheart go bhfanfadh an tionscadal ina cheann tosaigh glan, gan aon chúlchríoch. Ar ndóigh, is é an réiteach is simplí ná nodejs a tharraingt suas agus iallach a chur air cartlann a ghiniúint le cumraíochtaí ag baint úsáide as naisc dhíreacha.
I ndáiríre, ní raibh mórán roghanna ann. Níos cruinne, níor tháinig ach duine amháin chun cuimhne. Ní mór dúinn na cumraíochtaí a shocrú agus nasc a fháil ar féidir linn a chóipeáil chuig consól an fhreastalaí chun cartlann zip a fháil.
Meáigh roinnt comhad téacs sa chartlann zip a d'eascair as sin beagán, cúpla cilibheart go litriúil. Ba é an réiteach soiléir ná an teaghrán base64 a fháil ón gcartlann zip ginte agus é a chaitheamh isteach sa mhaolán, agus é ar an bhfreastalaí leis an ordú sa chonsól

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

d'fhéadfaimis an comhad zip céanna seo a chruthú.

nginxconfig.io scríofa in AngularJS, ní féidir liom a shamhlú fiú cé na ciliméadar de chód a bheadh ​​ag teastáil mura mbeadh creat js imoibríoch roghnaithe ag an údar. Ach is féidir liom a shamhlú go foirfe cé mhéad níos simplí agus níos áille a d'fhéadfaí é seo go léir a chur i bhfeidhm i VueJS, cé gur ábhar go hiomlán difriúil é seo.
In acmhainní an tionscadail feicimid modh chun zip-cartlann a ghiniúint:

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

tá gach rud simplí go leor, ag baint úsáide as an leabharlann jszip cruthaítear zip ina gcuirtear na comhaid cumraíochta. Tar éis don chartlann zip a chruthú, fothaíonn js chuig an mbrabhsálaí é ag baint úsáide as an leabharlann Comhad Sábhálaí.js:

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

áit arb é an t-ábhar an réad blob dá bharr sa chartlann zip.

Ceart go leor, ní raibh le déanamh agam ach cnaipe eile a chur in aice leis agus nuair a chliceáil mé air, ní shábhálfainn an chartlann zip a tháinig as don bhrabhsálaí, ach faighim an cód base64 uaidh. Tar éis fiddling timpeall beagán, fuair mé 2 mhodh, in ionad ach amháin 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',
	});
};

Mar a d’fhéadfadh a bheith tugtha faoi deara agat, bhog mé giniúint na cartlainne zip féin chuig an modh giniúna príobháideach Zip, agus mar sin de. Is é seo AngularJS, agus cloíonn an t-údar é féin le aisghlaonna agus níor chuir sé i bhfeidhm é trí ghealltanais. Rinne downloadZip shábháil Mar aschur fós, agus rinne downloadBase64 rud beagán difriúil. Cruthaímid réad FileReader a tháinig chugainn i html5 agus atá go leor cheana féin inrochtana le húsáid. Cé acu is féidir, ag aon am amháin, teaghrán base64 a dhéanamh as blob, nó in áit, déanann sé teaghrán DataURL, ach níl sé seo chomh tábhachtach dúinn, mar gheall ar Cuimsíonn DataURL a bhfuil de dhíth orainn go díreach. Bingo, bhí snag beag ag fanacht liom nuair a rinne mé iarracht é seo go léir a chur sa mhaolán. Bhain an t-údar úsáid as an leabharlann sa tionscadal gearrthaiscejs, a ligeann duit oibriú leis an gearrthaisce gan rudaí flash, bunaithe ar an téacs roghnaithe. Ar dtús, chinn mé mo base64 a chur in eilimint le taispeáint: none;, ach sa chás seo ní raibh mé in ann é a chur ar an gearrthaisce mar ní tharlaíonn aon scaradh. Dá bhrí sin, in ionad taispeáint: none; rinne mé

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

rud a thug deis dom an eilimint a cheilt ón radharc agus é a fhágáil ar an leathanach. Voila, críochnaíodh an tasc, nuair a chliceáil mé ar mo chnaipe, cuireadh líne mar seo sa mhaolán:

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

rud a ghreamaigh mé isteach sa chonsól ar an bhfreastalaí agus fuair mé cartlann zip láithreach leis na cumraíochtaí go léir.
Agus, ar ndóigh, chuir mé iarratas tarraingt chuig an údar, mar gheall ar ... tá an tionscadal gníomhach agus bríomhar, ba mhaith liom nuashonruithe a fheiceáil ón údar agus mo chnaipe féin a bheith agam) Dóibh siúd ar spéis leo, seo é mo fhorc tionscadal agus mé féin iarraidh tarraingthe, áit ar féidir leat a fheiceáil cad a cheartaigh mé / a chuir mé leis.
Forbairt sona daoibh go léir)

Cumraíochtaí a ghiniúint do nginx, stair iarratais tarraingthe amháin

Foinse: will.com

Add a comment