Kubadwa kwa ma configs a nginx, mbiri ya pempho limodzi kukoka

Moni, anzanga. Zokongola pa maseva anga omenyera nkhondo nginx yakhala ikugwira ntchito kuyambira 2006 ndipo pazaka za utsogoleri wake ndapeza ma configs ndi ma templates ambiri. Ndinayamika nginx kwambiri ndipo mwanjira ina zidapezeka kuti ndidayambitsanso kanyumba ka nginx pa hub, nanenso, ndikuwonetsa m/
Anzanga anandipempha kuti ndiwakhazikitse famu yachitukuko, ndipo mmalo mowakokera ma tempulo anga enieni, ndinakumbukira ntchito yosangalatsa. nginxconfig.io, yomwe imamwaza ma configs pamashelefu ndikukonzekera chilichonse kuti tilembetse, ndi zina. Ndinaganiza, bwanji? Komabe, ndidakwiyitsidwa ndi mfundo yoti nginxconfig imandipatsa kuti nditsitse zip archive mu msakatuli, osandilola kuyiyika mwachindunji ku seva pogwiritsa ntchito wget/fetch/curl. Ndi zamkhutu ziti, chifukwa chiyani ndikuzifuna mu msakatuli, ndikuzifuna pa seva kuchokera ku console. Mokwiya, ndinapita ku github kuti ndikaone matumbo a polojekitiyi, yomwe inatsogolera ku foloko yake ndipo, chifukwa chake, pempho lachikoka. Zomwe sindikanalemba zikadakhala zosasangalatsa πŸ˜‰

Kubadwa kwa ma configs a nginx, mbiri ya pempho limodzi kukoka

Zachidziwikire, ndisanakumba magwero, ndidayang'ana komwe Chrome imakoka zipi zosungidwa ndi ma configs, ndipo pamenepo adilesi yoyambira ndi "blob:" ikundidikirira, oops. Zakhala zikuwonekeratu kuti ntchitoyo sipanga chilichonse panjira, kwenikweni, zonse zimachitidwa ndi js. Zowonadi, zip archive imapangidwa ndi kasitomala, msakatuli, ndi javascript palokha. Iwo. kukongola ndi kuti polojekiti nginxconfig.io ikhoza kusungidwa ngati tsamba la html, lokwezedwa kwa ena narod.ru ndipo idzagwira ntchito) Ili ndi yankho loseketsa komanso losangalatsa, komabe, ndilovuta kwambiri kukhazikitsa ma seva, kwenikweni, ndendende zomwe polojekitiyi idapangidwira. Tsitsani zosungidwa zomwe zapangidwa ndi msakatuli, ndikuzitumiza ku seva pogwiritsa ntchito nc... mu 2019? Ndinadziika ndekha ntchito yopeza njira yotsitsa zosinthazo mwachindunji ku seva.
Nditasiya pulojekitiyi, ndinayamba kuganizira zomwe ndingasankhe. Ntchitoyi inali yovuta chifukwa sindinkafuna kuti ndisiye kuti polojekitiyi ikhalebe yoyera, yopanda mapeto. Zachidziwikire, yankho losavuta lingakhale kukokera ma nodejs ndikuukakamiza kuti lipange zolemba zakale ndi ma configs pogwiritsa ntchito maulalo achindunji.
Kwenikweni, panalibe zosankha zambiri. Kunena zowona, imodzi yokha idabwera m'maganizo. Tiyenera kukhazikitsa ma configs ndikupeza ulalo womwe titha kukopera ku seva ya seva kuti tipeze zip archive.
Mafayilo angapo omwe adasungidwa munkhokwe ya zip adalemera pang'ono, kwenikweni ma kilobytes ochepa. Yankho lodziwikiratu linali kutenga chingwe cha base64 kuchokera pazosungidwa zakale za zip ndikuchiponya mu buffer, pomwe pa seva ndi lamulo mu console.

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

tikhoza kupanga fayilo ya zip yomweyi.

nginxconfig.io inalembedwa mu AngularJS, sindingathe kulingalira kuti ndi ma kilomita anji akadafunikira ngati wolembayo sanasankhe js chimango. Koma nditha kuganiza mozama momwe izi zingakhalire zosavuta komanso zokongola kwambiri mu VueJS, ngakhale uwu ndi mutu wosiyana kwambiri.
Muzothandizira polojekiti tikuwona njira yopangira zip archive:

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

zonse ndi zophweka, ntchito laibulale jszip pa Zip imapangidwa pomwe mafayilo amasinthidwe amayikidwa. Pambuyo popanga zip archive, js amazidyetsa kwa osatsegula pogwiritsa ntchito laibulale FileSaver.js:

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

pomwe zomwe zili ndizomwe zimatuluka pankhokwe ya zip.

Chabwino, zomwe ndimayenera kuchita ndikuwonjezera batani lina pafupi ndi izo ndipo nditadina, sindikanasunga zolemba zakale za zip ku msakatuli, koma pezani code64 kuchokera pamenepo. Nditasewera pang'ono, ndili ndi njira ziwiri, m'malo mwa downloadZip imodzi yokha:

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

Monga momwe mwawonera, ndasuntha m'badwo wa zip archive wokha ku njira yachinsinsi ya generateZip, ndi zina zotero. Iyi ndi AngularJS, ndipo wolemba mwiniyo amangokhalira kuyimba foni ndipo sanagwiritse ntchito malonjezo. downloadZip idasungabeAs monga zotuluka, pomwe downloadBase64 idachita zosiyana pang'ono. Timapanga chinthu cha FileReader chomwe chinabwera kwa ife mu html5 ndipo chiri kale kupezeka za ntchito. Zomwe, nthawi imodzi, zimatha kupanga chingwe cha base64 kuchokera ku blob, kapena m'malo mwake, zimapanga chingwe cha DataURL, koma izi sizofunika kwambiri kwa ife, chifukwa DataURL ili ndi zomwe tikufuna. Bingo, kansalu kakang'ono kamandiyembekezera pamene ndikuyesera kuyika zonsezi mu buffer. Wolembayo adagwiritsa ntchito laibulale mu polojekitiyi clipboardjs, zomwe zimakulolani kuti mugwire ntchito ndi bolodi lojambula popanda zinthu zowunikira, pogwiritsa ntchito malemba osankhidwa. Poyambirira, ndidaganiza zoyika base64 yanga pachinthu chokhala ndi chiwonetsero: palibe;, koma pakadali pano sindinathe kuyiyika pa bolodi chifukwa. palibe kulekana kumachitika. Chifukwa chake, m'malo mowonetsa: palibe; Ndinatero

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

zomwe zidandipangitsa kuti ndibise chilichonse kuti chisawoneke ndikuchisiya patsamba. Voila, ntchitoyi idamalizidwa, nditadina batani langa, mzere ngati uwu udayikidwa mu buffer:

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

zomwe ndidaziyika mu kontrakitala pa seva ndipo nthawi yomweyo ndidalandira zip archive ndi ma configs onse.
Ndipo, ndithudi, ndinatumiza pempho kwa wolemba, chifukwa... pulojekitiyi ikugwira ntchito komanso yosangalatsa, ndikufuna kuwona zosintha kuchokera kwa wolemba ndikukhala ndi batani langa) Kwa omwe ali ndi chidwi, nazi mphanda wanga polojekiti ndi iye mwini kukoka pempho, komwe mungathe kuwona zomwe ndakonza / kuwonjezera.
Chitukuko chabwino nonse)

Kubadwa kwa ma configs a nginx, mbiri ya pempho limodzi kukoka

Source: www.habr.com

Kuwonjezera ndemanga