nginx සඳහා වින්‍යාස උත්පාදනය, එක් ඇදීමේ ඉල්ලීමක ඉතිහාසය

සුභ පැතුම්, සහෝදරවරුනි. මගේ සටන් සර්වර් වල ලස්සනයි nginx 2006 සිට ක්‍රියාත්මක වන අතර එහි පරිපාලනයේ වසර ගණනාවක් පුරා මම වින්‍යාස සහ සැකිලි රාශියක් රැස් කර ගෙන ඇත. මම nginx ට බොහෝ ප්‍රශංසා කළ අතර කෙසේ හෝ මම මධ්‍යස්ථානයේ nginx මධ්‍යස්ථානයක් පවා ආරම්භ කළ බව පෙනී ගියේය, m/ පෙන්වන්න
මිතුරන් ඔවුන් සඳහා සංවර්ධන ගොවිපලක් පිහිටුවන ලෙස මගෙන් ඉල්ලා සිටි අතර, මගේ නිශ්චිත සැකිලි ඔවුන් වෙත ඇදගෙන යාම වෙනුවට, මට සිත්ගන්නා ව්‍යාපෘතියක් සිහිපත් විය. nginxconfig.io, එය රාක්කවල වින්‍යාසය විසුරුවා හරින අතර සංකේතනය කිරීමට යනාදිය සඳහා සියල්ල සූදානම් කරයි. මම හිතුවා, ඇයි නැත්තේ? කෙසේ වෙතත්, wget/fetch/curl භාවිතයෙන් එය සෘජුවම සේවාදායකයට උඩුගත කිරීමට ඉඩ නොදී, zip සංරක්ෂිතය බ්‍රවුසරයට බාගත කිරීමට nginxconfig මට ඉදිරිපත් වීම නිසා මා කෝපයට පත් විය. මොන විකාරයක්ද, මට එය බ්‍රව්සරයේ අවශ්‍ය වන්නේ ඇයි, මට එය කොන්සෝලයෙන් සේවාදායකයේ අවශ්‍ය වේ. කෝපයෙන්, මම ව්‍යාපෘතියේ ධෛර්යය බැලීමට github වෙත ගියෙමි, එය එහි දෙබලකට තුඩු දුන් අතර, එහි ප්‍රතිඵලයක් ලෙස, ඇදීමේ ඉල්ලීමක් විය. එය රසවත් නොවේ නම් මම ඒ ගැන නොලියමි

nginx සඳහා වින්‍යාස උත්පාදනය, එක් ඇදීමේ ඉල්ලීමක ඉතිහාසය

ඇත්ත වශයෙන්ම, මූලාශ්‍ර හාරා බැලීමට පෙර, මම වින්‍යාසය සමඟ ජනනය කරන ලද zip සංරක්ෂිතය ක්‍රෝම් අදින්නේ කොතැනදැයි බැලුවෙමි, එහි “බ්ලොබ්:” වලින් ආරම්භ වන ලිපිනයක් මා එනතුරු බලා සිටියේය, අපොයි. සේවාව මඟ දිගේ කිසිවක් ජනනය නොකරන බව දැනටමත් පැහැදිලි වී ඇත, ඇත්ත වශයෙන්ම, ඒ සියල්ල js විසින් සිදු කරනු ලැබේ. ඇත්ත වශයෙන්ම, zip සංරක්ෂිතය සේවාදායකයා, බ්‍රවුසරය සහ ජාවාස්ක්‍රිප්ට් විසින්ම ජනනය කර ඇත. එම. අලංකාරය නම් ව්‍යාපෘතියයි nginxconfig.io හුදෙක් html පිටුවක් ලෙස සුරැකිය හැක, සමහරක් වෙත උඩුගත කළ හැක narod.ru සහ එය ක්‍රියාත්මක වනු ඇත) මෙය ඉතා විහිලු සහ සිත්ගන්නා විසඳුමකි, කෙසේ වෙතත්, සේවාදායකයන් සැකසීම සඳහා එය ඉතා අපහසු වේ, ඇත්ත වශයෙන්ම, මෙම ව්‍යාපෘතිය නිර්මාණය කරන ලද දේ සඳහා. උත්පාදනය කරන ලද සංරක්ෂිතය බ්‍රවුසරයක් සමඟ බාගත කර, 2019 දී nc... භාවිතයෙන් එය සේවාදායකයට මාරු කරන්නද? ලැබෙන වින්‍යාසය කෙලින්ම සේවාදායකයට බාගත කිරීමේ ක්‍රමයක් සෙවීමේ කාර්යය මා විසින්ම සකසා ගත්තා.
ව්‍යාපෘතිය ක්‍රියාත්මක කිරීමෙන් පසු, මගේ විකල්ප මොනවාදැයි මම සිතන්නට පටන් ගතිමි. ව්‍යාපෘතිය කිසිදු පසු අන්තයකින් තොරව පිරිසිදු ඉදිරි අන්තයක් ලෙස පැවතිය යුතුය යන කොන්දේසියෙන් බැහැර වීමට මට අවශ්‍ය නොවීම නිසා කාර්යය සංකීර්ණ විය. ඇත්ත වශයෙන්ම, සරලම විසඳුම වනුයේ nodejs ඉහළට ගෙන එය සෘජු සබැඳි භාවිතයෙන් වින්‍යාසය සහිත ලේඛනාගාරයක් උත්පාදනය කිරීමට බල කිරීමයි.
ඇත්ත වශයෙන්ම, බොහෝ විකල්ප තිබුණේ නැත. වඩාත් නිවැරදිව, මතකයට ආවේ එකක් පමණි. Zip සංරක්ෂිතයක් ලබා ගැනීම සඳහා අපි configs සකස් කර සේවාදායක කොන්සෝලයට පිටපත් කළ හැකි සබැඳියක් ලබා ගත යුතුය.
ප්‍රතිඵලයක් ලෙස ලැබෙන zip සංරක්ෂිතයේ ඇති පෙළ ගොනු කිහිපයක් තරමක් බරින් යුක්ත විය, වචනාර්ථයෙන් කිලෝබයිට් කිහිපයක්. පැහැදිලි විසඳුම වූයේ කොන්සෝලයේ විධානය සමඟ සේවාදායකයේ සිටියදී, ජනනය කරන ලද zip සංරක්ෂිතයෙන් base64 තන්තුව ලබාගෙන එය බෆරයට විසි කිරීමයි.

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

අපට මෙම zip ගොනුව සෑදිය හැක.

nginxconfig.io AngularJS වලින් ලියා ඇත, කතුවරයා ප්‍රතික්‍රියාශීලී js රාමුවක් තෝරා නොගත්තේ නම් කුමන කිලෝමීටර් කේත අවශ්‍ය වේද යන්න මට සිතාගත නොහැක. නමුත් මෙය සම්පූර්ණයෙන්ම වෙනස් මාතෘකාවක් වුවද, VueJS හි මේ සියල්ල කෙතරම් සරල හා ලස්සනට ක්‍රියාත්මක කළ හැකිද යන්න මට හොඳින් සිතාගත හැකිය.
ව්‍යාපෘති සම්පත් වල අපි zip සංරක්ෂිතයක් ජනනය කිරීමේ ක්‍රමයක් දකිමු:

$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 වින්‍යාස ගොනු තබා ඇති තැන zip එකක් සාදනු ලැබේ. zip සංරක්ෂිතය නිර්මාණය කිරීමෙන් පසුව, js එය පුස්තකාලය භාවිතයෙන් බ්‍රවුසරයට පෝෂණය කරයි FileSaver.js:

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

මෙහි අන්තර්ගතය යනු zip සංරක්ෂිතයේ ප්‍රතිඵලයක් වන බ්ලොබ් වස්තුවයි.

හරි, මට කරන්න තිබුනේ ඒ අසලින් තවත් බොත්තමක් එක් කර එය මත ක්ලික් කළ විට, ලැබෙන zip සංරක්ෂිතය බ්‍රවුසරයට සුරැකීම නොව, එයින් base64 කේතය ලබා ගැනීමයි. ටිකක් එහා මෙහා ගිය පසු, මට එක් බාගත සිප් එකක් වෙනුවට ක්‍රම 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',
	});
};

ඔබ දැක ඇති පරිදි, මම zip සංරක්ෂිතයේ උත්පාදනය පුද්ගලික ජනන Zip ක්‍රමයට ගෙන ගියෙමි, යනාදිය. මෙය AngularJS වන අතර, කතුවරයා විසින්ම ආපසු කැඳවීම් වලට ඇලී සිටින අතර පොරොන්දු හරහා එය ක්‍රියාත්මක නොකළේය. downloadZip තවමත් ප්‍රතිදානයක් ලෙස saveAs කර ඇති අතර downloadBase64 තරමක් වෙනස් දෙයක් කළේය. අපි html5 හි අප වෙත පැමිණි FileReader වස්තුවක් නිර්මාණය කරමු සහ දැනටමත් තරමක් ලබා ගත හැකි භාවිතය සඳහා. එක් අවස්ථාවකදී, බ්ලොබ් එකකින් Base64 තන්තුවක් සෑදිය හැකිය, නැතහොත් එය DataURL තන්තුවක් සෑදිය හැකිය, නමුත් මෙය අපට එතරම් වැදගත් නොවේ, මන්ද DataURL හි අපට අවශ්‍ය දේ හරියටම අඩංගු වේ. බිංගෝ, මම මේ සියල්ල බෆරයට දැමීමට උත්සාහ කරන විට මා එනතුරු බලා සිටියේය. කතුවරයා ව්‍යාපෘතියේ පුස්තකාලය භාවිතා කළේය clipboardjs, තෝරාගත් පෙළ මත පදනම්ව, ෆ්ලෑෂ් වස්තූන් නොමැතිව ක්ලිප්බෝඩ් සමඟ වැඩ කිරීමට ඔබට ඉඩ සලසයි. මුලදී, මම මගේ base64 display සහිත මූලද්‍රව්‍යයක තැබීමට තීරණය කළෙමි: නැත;, නමුත් මෙම අවස්ථාවේදී මට එය ක්ලිප්බෝඩ් එක මත තැබීමට නොහැකි වූ නිසා වෙන්වීමක් සිදු නොවේ. එබැවින්, display වෙනුවට:none; මම කලා

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

එමඟින් මූලද්‍රව්‍යය දර්ශනයෙන් සැඟවීමට සහ ඇත්ත වශයෙන්ම එය පිටුවේ තැබීමට මට ඉඩ සලසයි. Voila, කාර්යය සම්පූර්ණ විය, මම මගේ බොත්තම මත ක්ලික් කළ විට, බෆරයේ මෙවැනි රේඛාවක් තබා ඇත:

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

මම සේවාදායකයේ කොන්සෝලයට සරලව ඇලවූ අතර වහාම සියලුම වින්‍යාසයන් සහිත zip සංරක්ෂිතයක් ලැබුණි.
ඇත්ත වශයෙන්ම, මම කතුවරයාට ඇදීමේ ඉල්ලීමක් යැව්වෙමි, මන්ද ... ව්‍යාපෘතිය සක්‍රීය සහ සජීවී ය, මම කතුවරයාගෙන් යාවත්කාලීන දැකීමට කැමති අතර මගේම බොත්තමක් ඇත) උනන්දුවක් දක්වන අය සඳහා, මෙන්න එය මගේ දෙබලක ව්යාපෘතිය සහ මම අදින්න ඉල්ලීම, මා නිවැරදි කළ/එකතු කළ දේ ඔබට දැක ගත හැකි තැන.
සැමටම සුභ සංවර්ධනයක්)

nginx සඳහා වින්‍යාස උත්පාදනය, එක් ඇදීමේ ඉල්ලීමක ඉතිහාසය

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න