Gineadh configs airson nginx, eachdraidh aon iarrtas tarraing

Beannachdan, a chompanaich. Bòidheach air na frithealaichean sabaid agam nginx air a bhith a’ ruith bho 2006 agus thar nam bliadhnaichean de a rianachd tha mi air tòrr configs agus teamplaidean a chruinneachadh. Mhol mi nginx gu mòr agus dòigh air choireigin thionndaidh e a-mach gun do thòisich mi eadhon air mòr-ionad nginx air a’ mheadhan, cuideachd, seall m /
Dh'iarr caraidean orm tuathanas leasachaidh a stèidheachadh dhaibh, agus an àite a bhith gan slaodadh na teamplaidean sònraichte agam, chuimhnich mi air pròiseact inntinneach nginxconfig.io, a bhios a’ sgapadh configs air na sgeilpichean agus ag ullachadh a h-uile càil airson leigeil le crioptachadh, msaa. Bha mi a 'smaoineachadh, carson nach eil? Ach, bha mi air mo shàrachadh leis gu bheil nginxconfig a’ tabhann dhomh an tasglann zip a luchdachadh sìos a-steach don bhrobhsair, gun a bhith a ’leigeil leam a luchdachadh suas gu dìreach chun t-seirbheisiche a’ cleachdadh wget / fetch / curl. Dè an neòinean, carson a tha feum agam air sa bhrobhsair, tha feum agam air air an fhrithealaiche bhon chonsail. Angry, chaidh mi gu github a dh'fhaicinn guthan a 'phròiseict, a lean gu forc agus, mar thoradh air sin, iarrtas tarraing. Rud air nach sgrìobhadh mi mu dheidhinn mura robh e inntinneach 😉

Gineadh configs airson nginx, eachdraidh aon iarrtas tarraing

Gu dearbh, mus deach mi a-steach do na stòran, choimhead mi air far a bheil Chrome a’ tarraing an tasglann zip a chaidh a chruthachadh le configs, agus bha seòladh a’ tòiseachadh le “blob:" a’ feitheamh rium, oops. Tha e air fàs soilleir mar-thà nach eil an t-seirbheis a’ gineadh dad air an t-slighe, gu dearbh, tha e uile air a dhèanamh le js. Gu dearbh, tha an tasglann zip air a chruthachadh leis an neach-dèiligidh, brabhsair, agus javascript fhèin. An fheadhainn sin. is e am bòidhchead gu bheil am pròiseact nginxconfig.io faodar a shàbhaladh gu sìmplidh mar dhuilleag html, air a luchdachadh suas gu cuid narod.ru agus obraichidh e) Is e fuasgladh fìor èibhinn agus inntinneach a tha seo, ge-tà, tha e uamhasach mì-ghoireasach airson frithealaichean a stèidheachadh, gu dearbh, dìreach airson na chaidh am pròiseact seo a chruthachadh. Luchdaich sìos an tasglann gineadh le brobhsair, agus an uairsin gluais e chun t-seirbheisiche a ’cleachdadh nc ... ann an 2019? Chuir mi romham dòigh a lorg gus an config a thàinig às a luchdachadh sìos gu dìreach chun t-seirbheisiche.
Às deidh dhomh am pròiseact a chuir air dòigh, thòisich mi a’ smaoineachadh air na roghainnean a bh’ agam. Bha an obair iom-fhillte leis nach robh mi airson gluasad bhon chumha gum bu chòir don phròiseact fuireach mar fhìor cheann-aghaidh, gun deireadh-cùil sam bith. Gu dearbh, is e am fuasgladh as sìmplidh nodejs a tharraing suas agus toirt air tasglann a ghineadh le configs a ’cleachdadh ceanglaichean dìreach.
Gu fìrinneach, cha robh mòran roghainnean ann. Nas mionaidiche, cha tàinig ach aon gu inntinn. Feumaidh sinn na configs a chuir air dòigh agus ceangal fhaighinn as urrainn dhuinn a chopaigeadh gu consol an fhrithealaiche gus tasglann zip fhaighinn.
Bha grunn fhaidhlichean teacsa anns an tasglann zip a thàinig às a sin beagan cuideam, gu litearra beagan kilobytes. B ’e am fuasgladh follaiseach an sreang base64 fhaighinn bhon tasglann zip a chaidh a chruthachadh agus a thilgeil a-steach don bhufair, fhad‘ s a bha e air an fhrithealaiche leis an àithne sa chonsail

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

b’ urrainn dhuinn an aon fhaidhle zip seo a chruthachadh.

nginxconfig.io a sgrìobhadh ann an AngularJS, chan urrainn dhomh eadhon smaoineachadh dè na cilemeatairean de chòd a bhiodh a dhìth mura robh an t-ùghdar air frèam js reactive a thaghadh. Ach is urrainn dhomh smaoineachadh gu foirfe dè cho sìmplidh ‘s a dh’ fhaodadh seo a chuir an gnìomh ann an VueJS, ged a tha seo na chuspair gu tur eadar-dhealaichte.
Ann an goireasan a’ phròiseict chì sinn dòigh air tasglann zip a chruthachadh:

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

tha a h-uile dad gu math sìmplidh, a’ cleachdadh an leabharlann jszip Tha zip air a chruthachadh far a bheil na faidhlichean rèiteachaidh air an cur. Às deidh dhut an tasglann zip a chruthachadh, bidh js ga bhiadhadh chun bhrobhsair a’ cleachdadh an leabharlainn FileSaver.js:

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

far a bheil susbaint mar thoradh blob mar thoradh air an tasglann zip.

Ceart gu leòr, cha robh agam ach putan eile a chuir ri thaobh agus nuair a phutas mi air, cha bhithinn a’ sàbhaladh an tasglann zip a thàinig às dhan bhrobhsair, ach a’ faighinn an còd base64 bhuaithe. Às deidh dhomh fìdhlearachd timcheall beagan, fhuair mi dòighean 2, an àite dìreach aon luchdachadh sìos Zip:

$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 is dòcha gu bheil thu air mothachadh, ghluais mi ginealach an tasglann zip fhèin chun mhodh prìobhaideach GenerationZip, agus mar sin air adhart. Is e seo AngularJS, agus tha an t-ùghdar fhèin a’ cumail ri fios air ais agus cha do chuir e an gnìomh e tro gheallaidhean. downloadZip fhathast a’ sàbhaladhAs mar thoradh, agus rinn downloadBase64 rudeigin beagan eadar-dhealaichte. Bidh sinn a’ cruthachadh rud FileReader a thàinig thugainn ann an html5 agus a tha gu math mar-thà ruigsinneach airson a chleachdadh. A dh’ fhaodas, aig aon àm, sreang base64 a dhèanamh à blob, no an àite sin, bidh e a’ dèanamh sreang DataURL, ach chan eil seo cho cudromach dhuinne, oir Tha DataURL a’ toirt a-steach na tha a dhìth oirnn. Bingo, bha beagan snag a’ feitheamh rium nuair a dh’ fheuch mi ri seo uile a chuir anns a’ bhufair. Chleachd an t-ùghdar an leabharlann sa phròiseact clàr-bhùird, a leigeas leat obrachadh leis a’ bhòrd bhidio às aonais stuthan flash, stèidhichte air an teacsa taghte. An toiseach, chuir mi romhpa mo bhunait64 a chuir ann an eileamaid le taisbeanadh: gin;, ach anns a ’chùis seo cha b’ urrainn dhomh a chuir air a ’bhòrd bhidio oir chan eil sgaradh a’ tachairt. Mar sin, an àite taisbeanadh: gin; Rinn mi

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

a leig leam an dà chuid an eileamaid fhalach bhon t-sealladh agus dha-rìribh fhàgail air an duilleag. Voila, chaidh an obair a chrìochnachadh, nuair a phutas mi air a’ phutan agam, chaidh loidhne mar seo a chuir anns a’ bhufair:

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

a chuir mi dìreach a-steach don consol air an fhrithealaiche agus fhuair mi tasglann zip sa bhad leis a h-uile rèiteachadh.
Agus, gu dearbh, chuir mi iarrtas tarraing chun an ùghdair, oir... tha am pròiseact gnìomhach agus beòthail, bu mhath leam ùrachaidhean bhon ùghdar fhaicinn agus am putan agam fhèin a bhith agam) Dhaibhsan aig a bheil ùidh, seo e mo phòc pròiseact agus e fhèin iarr iarrtas, far am faic thu na tha mi air a cheartachadh / a chuir ris.
Leasachadh sona a h-uile duine)

Gineadh configs airson nginx, eachdraidh aon iarrtas tarraing

Source: www.habr.com

Cuir beachd ann