nginx కోసం కాన్ఫిగర్‌ల జనరేషన్, ఒక పుల్ అభ్యర్థన చరిత్ర

శుభాకాంక్షలు, సహచరులు. నా పోరాట సర్వర్‌లలో అందంగా ఉంది వికీపీడియా 2006 నుండి అమలు చేయబడుతోంది మరియు దాని పరిపాలన యొక్క సంవత్సరాలలో నేను చాలా కాన్ఫిగర్‌లు మరియు టెంప్లేట్‌లను సేకరించాను. నేను nginxని చాలా మెచ్చుకున్నాను మరియు ఏదో ఒకవిధంగా నేను హబ్‌లో nginx హబ్‌ని కూడా ప్రారంభించాను, m/ని చూపించాను.
స్నేహితులు వారి కోసం డెవలప్‌మెంట్ ఫారమ్‌ను ఏర్పాటు చేయమని నన్ను అడిగారు మరియు నా నిర్దిష్ట టెంప్లేట్‌లను వాటిని లాగడానికి బదులుగా, నేను ఆసక్తికరమైన ప్రాజెక్ట్‌ను గుర్తుంచుకున్నాను nginxconfig.io, ఇది అల్మారాల్లో కాన్ఫిగరేషన్‌లను చెల్లాచెదురు చేస్తుంది మరియు ఎన్‌క్రిప్ట్ చేయడానికి వీలుగా ప్రతిదీ సిద్ధం చేస్తుంది. నేను అనుకున్నాను, ఎందుకు కాదు? అయినప్పటికీ, wget/fetch/curlని ఉపయోగించి సర్వర్‌కి నేరుగా అప్‌లోడ్ చేయడానికి నన్ను అనుమతించకుండా, బ్రౌజర్‌లోకి జిప్ ఆర్కైవ్‌ను డౌన్‌లోడ్ చేయడానికి nginxconfig నాకు ఆఫర్ చేస్తున్నందున నేను ఆగ్రహానికి గురయ్యాను. ఏ అర్ధంలేనిది, నాకు బ్రౌజర్‌లో ఎందుకు అవసరం, కన్సోల్ నుండి సర్వర్‌లో నాకు ఇది అవసరం. కోపంతో, నేను ప్రాజెక్ట్ యొక్క ధైర్యాన్ని చూడటానికి గితుబ్‌కి వెళ్లాను, అది దాని చీలికకు దారితీసింది మరియు ఫలితంగా, ఒక పుల్ అభ్యర్థన వచ్చింది. ఇది ఆసక్తికరంగా లేకుంటే నేను దాని గురించి వ్రాయను 😉

nginx కోసం కాన్ఫిగర్‌ల జనరేషన్, ఒక పుల్ అభ్యర్థన చరిత్ర

వాస్తవానికి, మూలాధారాలను త్రవ్వడానికి ముందు, కాన్ఫిగరేషన్‌లతో రూపొందించబడిన జిప్ ఆర్కైవ్‌ను Chrome ఎక్కడికి లాగుతుందో నేను చూశాను మరియు అక్కడ “బొట్టు:”తో ప్రారంభమయ్యే చిరునామా నా కోసం వేచి ఉంది, అయ్యో. సేవ మార్గంలో దేనినీ ఉత్పత్తి చేయదని ఇప్పటికే స్పష్టమైంది, వాస్తవానికి, ఇదంతా js చేత చేయబడుతుంది. నిజానికి, జిప్ ఆర్కైవ్ క్లయింట్, బ్రౌజర్ మరియు జావాస్క్రిప్ట్ ద్వారానే రూపొందించబడింది. ఆ. అందం ఏమిటంటే ఆ ప్రాజెక్ట్ nginxconfig.io కేవలం html పేజీగా సేవ్ చేయవచ్చు, కొన్నింటికి అప్‌లోడ్ చేయబడుతుంది narod.ru మరియు ఇది పని చేస్తుంది) ఇది చాలా ఫన్నీ మరియు ఆసక్తికరమైన పరిష్కారం, అయినప్పటికీ, సర్వర్‌లను సెటప్ చేయడానికి ఇది చాలా అసౌకర్యంగా ఉంటుంది, వాస్తవానికి, ఈ ప్రాజెక్ట్ సృష్టించబడిన దాని కోసం. రూపొందించబడిన ఆర్కైవ్‌ను బ్రౌజర్‌తో డౌన్‌లోడ్ చేసి, ఆపై 2019లో nc...ని ఉపయోగించి సర్వర్‌కి బదిలీ చేయాలా? ఫలిత కాన్ఫిగరేషన్‌ను నేరుగా సర్వర్‌కి డౌన్‌లోడ్ చేయడానికి మార్గాన్ని కనుగొనే పనిని నేను సెట్ చేసుకున్నాను.
ప్రాజెక్ట్‌ను విడిచిపెట్టిన తర్వాత, నా ఎంపికలు ఏమిటో ఆలోచించడం ప్రారంభించాను. ప్రాజెక్ట్ ఎటువంటి బ్యాక్ ఎండ్ లేకుండా స్వచ్ఛమైన ఫ్రంట్ ఎండ్‌గా ఉండాలనే షరతు నుండి నేను వైదొలగకూడదనుకోవడం వల్ల పని సంక్లిష్టమైంది. వాస్తవానికి, నోడెజ్‌లను పైకి లాగడం మరియు డైరెక్ట్ లింక్‌లను ఉపయోగించి కాన్ఫిగర్‌లతో ఆర్కైవ్‌ను రూపొందించడానికి బలవంతం చేయడం సరళమైన పరిష్కారం.
నిజానికి, చాలా ఎంపికలు లేవు. మరింత ఖచ్చితంగా, ఒకటి మాత్రమే గుర్తుకు వచ్చింది. మేము కాన్ఫిగర్‌లను సెటప్ చేయాలి మరియు జిప్ ఆర్కైవ్‌ను పొందడానికి సర్వర్ కన్సోల్‌కి కాపీ చేయగల లింక్‌ని పొందాలి.
ఫలితంగా వచ్చిన జిప్ ఆర్కైవ్‌లోని అనేక టెక్స్ట్ ఫైల్‌లు కొంచెం బరువు, అక్షరాలా కొన్ని కిలోబైట్‌లు. కన్సోల్‌లో కమాండ్‌తో సర్వర్‌లో ఉన్నప్పుడు, ఉత్పత్తి చేయబడిన జిప్ ఆర్కైవ్ నుండి బేస్64 స్ట్రింగ్‌ను పొందడం మరియు బఫర్‌లోకి విసిరేయడం స్పష్టమైన పరిష్కారం.

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

మేము ఇదే జిప్ ఫైల్‌ని సృష్టించవచ్చు.

nginxconfig.io AngularJSలో వ్రాయబడింది, రచయిత రియాక్టివ్ js ఫ్రేమ్‌వర్క్‌ని ఎంచుకోకపోతే ఏ కిలోమీటర్ల కోడ్ అవసరమో నేను ఊహించలేను. ఇది పూర్తిగా భిన్నమైన అంశం అయినప్పటికీ, VueJSలో ఇవన్నీ ఎంత సరళంగా మరియు మరింత అందంగా అమలు చేయబడతాయో నేను ఖచ్చితంగా ఊహించగలను.
ప్రాజెక్ట్ వనరులలో మేము జిప్ ఆర్కైవ్‌ను రూపొందించడానికి ఒక పద్ధతిని చూస్తాము:

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

లైబ్రరీని ఉపయోగించి ప్రతిదీ చాలా సులభం jszip కాన్ఫిగరేషన్ ఫైల్‌లు ఉంచబడిన చోట జిప్ సృష్టించబడుతుంది. జిప్ ఆర్కైవ్‌ను సృష్టించిన తర్వాత, js దానిని లైబ్రరీని ఉపయోగించి బ్రౌజర్‌కు ఫీడ్ చేస్తుంది FileSaver.js:

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

ఇక్కడ కంటెంట్ అనేది జిప్ ఆర్కైవ్ యొక్క బొట్టు వస్తువు.

సరే, నేను చేయాల్సిందల్లా దాని ప్రక్కన మరొక బటన్‌ను జోడించడం మరియు నేను దానిపై క్లిక్ చేసినప్పుడు, ఫలితంగా వచ్చిన జిప్ ఆర్కైవ్‌ను నేను బ్రౌజర్‌లో సేవ్ చేయను, కానీ దాని నుండి బేస్64 కోడ్‌ను పొందుతాను. కొంచెం ఫిడ్లింగ్ చేసిన తర్వాత, నాకు కేవలం ఒక డౌన్‌లోడ్‌జిప్‌కు బదులుగా 2 పద్ధతులు వచ్చాయి:

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

మీరు గమనించినట్లుగా, నేను జిప్ ఆర్కైవ్ యొక్క జనరేషన్‌ను ప్రైవేట్ జెనరేట్‌జిప్ పద్ధతికి తరలించాను మరియు మొదలైనవి. ఇది AngularJS, మరియు రచయిత స్వయంగా కాల్‌బ్యాక్‌లకు కట్టుబడి ఉంటాడు మరియు వాగ్దానాల ద్వారా దానిని అమలు చేయలేదు. downloadZip ఇప్పటికీ saveAsని అవుట్‌పుట్‌గా చేసింది, అయితే downloadBase64 కొద్దిగా భిన్నంగా చేసింది. మేము html5లో మాకు వచ్చిన ఫైల్‌రీడర్ ఆబ్జెక్ట్‌ను సృష్టిస్తాము మరియు ఇది ఇప్పటికే చాలా ఉంది అందుబాటులో వాడేందుకు. ఇది ఒక సమయంలో, ఒక బొట్టు నుండి బేస్64 స్ట్రింగ్‌ను తయారు చేయగలదు లేదా బదులుగా, ఇది డేటాURL స్ట్రింగ్‌ను చేస్తుంది, అయితే ఇది మనకు అంత ముఖ్యమైనది కాదు, ఎందుకంటే DataURL మనకు అవసరమైన వాటిని ఖచ్చితంగా కలిగి ఉంటుంది. బింగో, నేను ఇవన్నీ బఫర్‌లో ఉంచడానికి ప్రయత్నించినప్పుడు ఒక చిన్న స్నాగ్ నాకు ఎదురుచూసింది. రచయిత ప్రాజెక్ట్‌లో లైబ్రరీని ఉపయోగించారు క్లిప్బోర్డ్js, ఇది ఎంచుకున్న టెక్స్ట్ ఆధారంగా ఫ్లాష్ ఆబ్జెక్ట్‌లు లేకుండా క్లిప్‌బోర్డ్‌తో పని చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. ప్రారంభంలో, నేను నా బేస్64ని డిస్‌ప్లే: ఏదీ లేని మూలకంలో ఉంచాలని నిర్ణయించుకున్నాను, కానీ ఈ సందర్భంలో నేను దానిని క్లిప్‌బోర్డ్‌లో ఉంచలేకపోయాను ఎందుకంటే విభజన జరగదు. అందువల్ల, ప్రదర్శనకు బదులుగా: ఏదీ లేదు; నేను చేశాను

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

ఇది ఎలిమెంట్‌ను వీక్షణ నుండి దాచడానికి మరియు వాస్తవానికి దాన్ని పేజీలో ఉంచడానికి నన్ను అనుమతించింది. Voila, పని పూర్తయింది, నేను నా బటన్‌పై క్లిక్ చేసినప్పుడు, బఫర్‌లో ఇలాంటి లైన్ ఉంచబడింది:

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

నేను సర్వర్‌లోని కన్సోల్‌లో అతికించాను మరియు వెంటనే అన్ని కాన్ఫిగర్‌లతో కూడిన జిప్ ఆర్కైవ్‌ను అందుకున్నాను.
మరియు, వాస్తవానికి, నేను రచయితకు పుల్ అభ్యర్థనను పంపాను, ఎందుకంటే... ప్రాజెక్ట్ సక్రియంగా మరియు ఉత్సాహంగా ఉంది, నేను రచయిత నుండి నవీకరణలను చూడాలనుకుంటున్నాను మరియు నా స్వంత బటన్‌ను కలిగి ఉండాలనుకుంటున్నాను) ఆసక్తి ఉన్నవారి కోసం, ఇది ఇక్కడ ఉంది నా ఫోర్క్ ప్రాజెక్ట్ మరియు స్వయంగా పుల్ అభ్యర్థన, నేను సరిదిద్దిన/జోడించిన వాటిని మీరు ఎక్కడ చూడవచ్చు.
అందరికీ అభివృద్ధి శుభాకాంక్షలు)

nginx కోసం కాన్ఫిగర్‌ల జనరేషన్, ఒక పుల్ అభ్యర్థన చరిత్ర

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి