Iran ti awọn atunto fun nginx, itan-akọọlẹ ti ibeere fa ọkan

Ẹ ki, awọn ẹlẹgbẹ. Lẹwa lori awọn olupin ija mi nginx ti nṣiṣẹ lati ọdun 2006 ati ni awọn ọdun ti iṣakoso rẹ Mo ti ṣajọpọ ọpọlọpọ awọn atunto ati awọn awoṣe. Mo yìn nginx pupọ ati bakan o wa jade pe Mo paapaa bẹrẹ ibudo nginx kan lori ibudo, paapaa, ṣafihan m/
Awọn ọrẹ beere lọwọ mi lati ṣeto oko idagbasoke fun wọn, ati dipo fifa wọn awọn awoṣe pato mi, Mo ranti iṣẹ akanṣe kan ti o nifẹ si. nginxconfig.io, eyi ti o tuka awọn atunto lori awọn selifu ati mura ohun gbogbo fun jẹ ki encrypt, ati be be lo. Mo ro, kilode ti kii ṣe? Sibẹsibẹ, inu mi binu nipasẹ otitọ pe nginxconfig nfun mi lati ṣe igbasilẹ faili zip sinu ẹrọ aṣawakiri, laisi gbigba mi laaye lati gbejade taara si olupin ni lilo wget/fetch/curl. Kini isọkusọ, kilode ti MO nilo rẹ ni ẹrọ aṣawakiri, Mo nilo rẹ lori olupin lati console. Binu, Mo lọ si github lati wo awọn ikun ti ise agbese na, eyiti o yorisi orita rẹ ati, bi abajade, ibeere fifa. Eyi ti Emi kii yoo kọ nipa ti ko ba dun 😉

Iran ti awọn atunto fun nginx, itan-akọọlẹ ti ibeere fa ọkan

Nitoribẹẹ, ṣaaju ki o to walẹ sinu awọn orisun, Mo wo ibiti Chrome yoo fa ibi ipamọ zip ti ipilẹṣẹ pẹlu awọn atunto, ati pe adirẹsi kan wa ti o bẹrẹ pẹlu “blob:” n duro de mi, oops. O ti han tẹlẹ pe iṣẹ naa ko ṣe ipilẹṣẹ ohunkohun ni ọna, ni otitọ, gbogbo rẹ jẹ nipasẹ js. Lootọ, ibi ipamọ zip jẹ ipilẹṣẹ nipasẹ alabara, ẹrọ aṣawakiri, ati JavaScript funrararẹ. Awon. awọn ẹwa ni wipe ise agbese nginxconfig.io le rọrun ni fipamọ bi oju-iwe html, ti a gbe si diẹ ninu narod.ru ati pe yoo ṣiṣẹ) Eyi jẹ ẹrinrin pupọ ati ojutu ti o nifẹ, sibẹsibẹ, o jẹ airọrun pupọ fun eto awọn olupin, ni otitọ, gangan fun kini iṣẹ akanṣe yii ṣẹda. Ṣe igbasilẹ igbasilẹ ti ipilẹṣẹ pẹlu ẹrọ aṣawakiri kan, lẹhinna gbe lọ si olupin ni lilo nc… ni ọdun 2019? Mo ṣeto ara mi ni iṣẹ-ṣiṣe ti wiwa ọna lati ṣe igbasilẹ atunto abajade taara si olupin naa.
Lẹhin ti forking ise agbese, Mo bẹrẹ lati ro nipa ohun ti awọn aṣayan mi. Iṣẹ naa jẹ idiju nipasẹ otitọ pe Emi ko fẹ lati yapa kuro ninu ipo pe iṣẹ akanṣe yẹ ki o wa ni iwaju-ipari mimọ, laisi eyikeyi ẹhin-ipari. Nitoribẹẹ, ojutu ti o rọrun julọ yoo jẹ lati fa awọn nodejs soke ki o fi ipa mu u lati ṣe agbekalẹ iwe-ipamọ pẹlu awọn atunto nipa lilo awọn ọna asopọ taara.
Ni otitọ, ko si ọpọlọpọ awọn aṣayan. Ni deede diẹ sii, ọkan nikan wa si ọkan. A nilo lati ṣeto awọn atunto ati gba ọna asopọ kan ti a le daakọ si console olupin lati gba ibi ipamọ zip kan.
Awọn faili ọrọ pupọ ninu ibi ipamọ zip ti o yọrisi jẹ iwuwo diẹ, ni itumọ ọrọ gangan kilobytes diẹ. Ojutu ti o han gbangba ni lati gba okun base64 lati ibi ipamọ zip ti ipilẹṣẹ ati jabọ sinu ifipamọ, lakoko ti o wa lori olupin pẹlu aṣẹ ninu console.

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

a le ṣẹda faili zip kanna.

nginxconfig.io Ti kọ ni AngularJS, Emi ko le ronu kini awọn kilomita ti koodu yoo ti nilo ti onkọwe ko ba yan ilana js ifaseyin kan. Ṣugbọn Mo le fojuinu ni pipe bi o ṣe rọrun ati lẹwa diẹ sii gbogbo eyi le ṣe imuse ni VueJS, botilẹjẹpe eyi jẹ akọle ti o yatọ patapata.
Ninu awọn orisun iṣẹ akanṣe a rii ọna kan fun ṣiṣẹda ibi ipamọ zip kan:

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

ohun gbogbo jẹ ohun rọrun, lilo awọn ìkàwé jszip A ṣẹda zip kan nibiti awọn faili iṣeto ti wa ni gbe. Lẹhin ṣiṣẹda ibi ipamọ zip, js jẹ ifunni rẹ si ẹrọ aṣawakiri ni lilo ile-ikawe naa Oluṣakoso faili.js:

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

nibiti akoonu jẹ abajade blob ohun ti ibi ipamọ zip.

O dara, gbogbo ohun ti Mo ni lati ṣe ni ṣafikun bọtini miiran lẹgbẹẹ rẹ ati nigbati Mo tẹ lori rẹ, Emi kii yoo ṣafipamọ faili zip ti o yọrisi si ẹrọ aṣawakiri, ṣugbọn gba koodu base64 lati ọdọ rẹ. Lẹhin ti fidding ni ayika diẹ, Mo ni awọn ọna meji, dipo igbasilẹZip kan:

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

Bii o ti ṣe akiyesi, Mo gbe iran ti ibi ipamọ zip funrararẹ si ọna ipilẹṣẹ ipilẹṣẹ ikọkọ, ati bẹbẹ lọ. Eyi jẹ AngularJS, ati pe onkọwe funrararẹ duro si awọn ipe pada ati pe ko ṣe nipasẹ awọn ileri. downloadZip tun ṣe fipamọBi bi abajade, lakoko ti downloadBase64 ṣe nkan ti o yatọ diẹ. A ṣẹda ohun kan FileReader ti o wa si wa ni html5 ati pe o ti jẹ ohun ti tẹlẹ wiwọle fun lilo. Ewo, ni akoko kan, o le ṣe okun base64 lati blob, tabi dipo, o ṣe okun DataURL, ṣugbọn eyi kii ṣe pataki fun wa, nitori DataURL ni pato ohun ti a nilo. Bingo, snag kekere kan n duro de mi nigbati Mo gbiyanju lati fi gbogbo eyi sinu ifipamọ. Onkọwe lo ile-ikawe ninu iṣẹ akanṣe naa clipboardjs, eyiti o fun ọ laaye lati ṣiṣẹ pẹlu agekuru agekuru laisi awọn ohun filasi, da lori ọrọ ti o yan. Ni ibẹrẹ, Mo pinnu lati fi base64 mi sinu eroja pẹlu ifihan: ko si;, ṣugbọn ninu ọran yii Emi ko le fi sii lori agekuru nitori ko si iyapa waye. Nitorina, dipo ifihan: ko si; mo ṣe

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

eyiti o fun mi laaye lati tọju nkan naa lati wiwo ati fi silẹ ni oju-iwe naa. Voila, iṣẹ-ṣiṣe naa ti pari, nigbati mo tẹ bọtini mi, laini bii eyi ni a gbe sinu ifipamọ:

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

eyiti Mo rọrun lẹẹmọ sinu console lori olupin ati lẹsẹkẹsẹ gba ibi ipamọ zip pẹlu gbogbo awọn atunto.
Ati pe, nitorinaa, Mo fi ibeere fifa kan ranṣẹ si onkọwe, nitori… Ise agbese na n ṣiṣẹ ati iwunlere, Emi yoo fẹ lati rii awọn imudojuiwọn lati ọdọ onkọwe ati ni bọtini ti ara mi) Fun awọn ti o nifẹ, eyi ni orita mi ise agbese ati awọn ara mi fa ìbéèrè, nibi ti o ti le ri ohun ti mo ti atunse / fi kun.
Idunnu idagbasoke gbogbo eniyan)

Iran ti awọn atunto fun nginx, itan-akọọlẹ ti ibeere fa ọkan

orisun: www.habr.com

Fi ọrọìwòye kun