nginx க்கான கட்டமைப்புகளின் உருவாக்கம், ஒரு இழுப்பு கோரிக்கையின் வரலாறு

வாழ்த்துக்கள், தோழர்களே. எனது போர் சேவையகங்களில் அழகாக இருக்கிறது Nginx 2006 முதல் இயங்குகிறது மற்றும் அதன் நிர்வாகத்தின் ஆண்டுகளில் நான் நிறைய கட்டமைப்புகள் மற்றும் டெம்ப்ளேட்களை குவித்துள்ளேன். நான் nginx ஐ மிகவும் புகழ்ந்தேன், எப்படியோ நான் ஹப்பில் ஒரு nginx மையத்தைத் தொடங்கினேன், கூட, m/
நண்பர்கள் அவர்களுக்காக ஒரு மேம்பாட்டுப் பண்ணையை அமைக்கச் சொன்னார்கள், மேலும் எனது குறிப்பிட்ட டெம்ப்ளேட்களை இழுப்பதற்குப் பதிலாக, ஒரு சுவாரஸ்யமான திட்டத்தை நான் நினைவில் வைத்தேன். nginxconfig.io, இது அலமாரிகளில் உள்ள அமைப்புகளை சிதறடித்து, குறியாக்கம் செய்ய எல்லாவற்றையும் தயார் செய்கிறது. நான் நினைத்தேன், ஏன் இல்லை? இருப்பினும், wget/fetch/curl ஐப் பயன்படுத்தி நேரடியாக சர்வரில் பதிவேற்ற அனுமதிக்காமல், ஜிப் காப்பகத்தை உலாவியில் பதிவிறக்கம் செய்ய nginxconfig எனக்கு வாய்ப்பளிப்பதால் நான் கோபமடைந்தேன். என்ன முட்டாள்தனம், உலாவியில் எனக்கு ஏன் இது தேவை, கன்சோலில் இருந்து சர்வரில் எனக்கு இது தேவை. கோபமாக, திட்டத்தின் தைரியத்தைப் பார்க்க கிதுப்பிற்குச் சென்றேன், இது அதன் முட்கரண்டிக்கு இட்டுச் சென்றது, அதன் விளைவாக, ஒரு இழுக்க கோரிக்கை. சுவாரஸ்யமாக இல்லாவிட்டால் நான் எழுதமாட்டேன் 😉

nginx க்கான கட்டமைப்புகளின் உருவாக்கம், ஒரு இழுப்பு கோரிக்கையின் வரலாறு

நிச்சயமாக, ஆதாரங்களைத் தோண்டுவதற்கு முன், உருவாக்கப்படும் ஜிப் காப்பகத்தை உள்ளமைவுகளுடன் குரோம் எங்கு இழுக்கிறது என்று பார்த்தேன், அங்கே "ப்ளாப்:" என்று தொடங்கும் முகவரி எனக்காகக் காத்திருக்கிறது, அச்சச்சோ. சேவையானது வழியில் எதையும் உருவாக்கவில்லை என்பது ஏற்கனவே தெளிவாகிவிட்டது, உண்மையில், இது அனைத்தும் js ஆல் செய்யப்படுகிறது. உண்மையில், ஜிப் காப்பகம் கிளையன்ட், உலாவி மற்றும் ஜாவாஸ்கிரிப்ட் மூலம் உருவாக்கப்படுகிறது. அந்த. அழகு என்பது திட்டம் nginxconfig.io ஒரு html பக்கமாகச் சேமித்து, சிலவற்றில் பதிவேற்றலாம் narod.ru மற்றும் அது வேலை செய்யும்) இது மிகவும் வேடிக்கையான மற்றும் சுவாரஸ்யமான தீர்வாகும், இருப்பினும், சேவையகங்களை அமைப்பதற்கு இது மிகவும் சிரமமாக உள்ளது, உண்மையில், இந்த திட்டம் உருவாக்கப்பட்டது. உருவாக்கப்பட்ட காப்பகத்தை உலாவி மூலம் பதிவிறக்கம் செய்து, 2019 இல் nc ஐப் பயன்படுத்தி சேவையகத்திற்கு மாற்றவா? இதன் விளைவாக வரும் கட்டமைப்பை நேரடியாக சேவையகத்திற்கு பதிவிறக்குவதற்கான வழியைக் கண்டறியும் பணியை நானே அமைத்துக் கொண்டேன்.
திட்டத்தைப் பிரித்த பிறகு, எனது விருப்பங்கள் என்ன என்பதைப் பற்றி சிந்திக்க ஆரம்பித்தேன். திட்டமானது எந்த பின் முனையும் இல்லாமல், தூய்மையான முன்-முனையாக இருக்க வேண்டும் என்ற நிபந்தனையிலிருந்து நான் விலக விரும்பவில்லை என்ற உண்மையால் பணி சிக்கலானது. நிச்சயமாக, எளிமையான தீர்வு nodejs ஐ இழுத்து, நேரடி இணைப்புகளைப் பயன்படுத்தி கட்டமைப்புகளுடன் ஒரு காப்பகத்தை உருவாக்க கட்டாயப்படுத்துவதாகும்.
உண்மையில், பல விருப்பங்கள் இல்லை. இன்னும் துல்லியமாக, ஒன்று மட்டுமே நினைவுக்கு வந்தது. ஜிப் காப்பகத்தைப் பெற, நாம் கட்டமைப்புகளை அமைத்து, சர்வர் கன்சோலுக்கு நகலெடுக்கக்கூடிய இணைப்பைப் பெற வேண்டும்.
இதன் விளைவாக வரும் ஜிப் காப்பகத்தில் உள்ள பல உரைக் கோப்புகள் சிறிது எடையைக் கொண்டிருந்தன, அதாவது சில கிலோபைட்டுகள். கன்சோலில் கட்டளையுடன் சர்வரில் இருக்கும் போது, ​​உருவாக்கப்பட்ட ஜிப் காப்பகத்திலிருந்து பேஸ்64 சரத்தைப் பெற்று அதை இடையகத்திற்குள் வீசுவதே தெளிவான தீர்வாகும்.

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

நாம் இதே 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 உள்ளமைவு கோப்புகள் வைக்கப்படும் இடத்தில் ஒரு zip உருவாக்கப்பட்டது. ஜிப் காப்பகத்தை உருவாக்கிய பிறகு, 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, மற்றும் ஆசிரியர் தானே அழைப்புகளுக்கு ஒட்டிக்கொள்கிறார் மற்றும் வாக்குறுதிகள் மூலம் அதை செயல்படுத்தவில்லை. டவுன்லோட்ஜிப் இன்னும் சேவ்ஆஸ் ஒரு வெளியீடாக இருந்தது, டவுன்லோட் பேஸ்64 சற்று வித்தியாசமான ஒன்றைச் செய்தது. HTML5 இல் எங்களிடம் வந்த FileReader பொருளை நாங்கள் உருவாக்குகிறோம் மற்றும் ஏற்கனவே உள்ளது அணுகக்கூடியது உபயோகத்திற்காக. இது, ஒரு நேரத்தில், ஒரு ப்ளாப்பில் இருந்து பேஸ்64 சரத்தை உருவாக்கலாம், அல்லது அது ஒரு DataURL சரத்தை உருவாக்குகிறது, ஆனால் இது எங்களுக்கு அவ்வளவு முக்கியமல்ல, ஏனென்றால் DataURL நமக்குத் தேவையானதைக் கொண்டுள்ளது. பிங்கோ, நான் இதையெல்லாம் தாங்கலில் வைக்க முயற்சித்தபோது எனக்கு ஒரு சிறிய சறுக்கல் காத்திருந்தது. ஆசிரியர் திட்டத்தில் நூலகத்தைப் பயன்படுத்தினார் கிளிப்போர்டுஜஸ், தேர்ந்தெடுக்கப்பட்ட உரையின் அடிப்படையில் ஃபிளாஷ் பொருள்கள் இல்லாமல் கிளிப்போர்டுடன் வேலை செய்ய உங்களை அனுமதிக்கிறது. ஆரம்பத்தில், எனது பேஸ்64 ஐ டிஸ்ப்ளே கொண்ட ஒரு உறுப்பில் வைக்க முடிவு செய்தேன்: எதுவுமில்லை;, ஆனால் இந்த விஷயத்தில் என்னால் அதை கிளிப்போர்டில் வைக்க முடியவில்லை, ஏனெனில் எந்த பிரிவினையும் ஏற்படாது. எனவே, காட்சிக்கு பதிலாக: எதுவுமில்லை; நான் செய்தேன்

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

உறுப்பை பார்வையில் இருந்து மறைக்கவும், உண்மையில் அதை பக்கத்தில் விடவும் இது என்னை அனுமதித்தது. Voila, பணி முடிந்தது, நான் எனது பொத்தானைக் கிளிக் செய்தபோது, ​​​​இது போன்ற ஒரு வரி இடையகத்தில் வைக்கப்பட்டது:

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

நான் சர்வரில் உள்ள கன்சோலில் ஒட்டினேன், உடனடியாக அனைத்து கட்டமைப்புகளுடன் ஜிப் காப்பகத்தைப் பெற்றேன்.
மற்றும், நிச்சயமாக, நான் ஆசிரியருக்கு ஒரு இழுக்க கோரிக்கையை அனுப்பினேன், ஏனென்றால்... திட்டம் சுறுசுறுப்பாகவும் சுறுசுறுப்பாகவும் உள்ளது, நான் ஆசிரியரிடமிருந்து புதுப்பிப்புகளைப் பார்க்க விரும்புகிறேன் மற்றும் எனது சொந்த பொத்தானை வைத்திருக்க விரும்புகிறேன்) ஆர்வமுள்ளவர்களுக்கு, இது இங்கே உள்ளது என் முட்கரண்டி திட்டம் மற்றும் தன்னை கோரிக்கையை இழுக்கவும், நான் திருத்தியதை/சேர்த்ததை நீங்கள் எங்கே பார்க்கலாம்.
அனைவருக்கும் மகிழ்ச்சியான வளர்ச்சி)

nginx க்கான கட்டமைப்புகளின் உருவாக்கம், ஒரு இழுப்பு கோரிக்கையின் வரலாறு

ஆதாரம்: www.habr.com

கருத்தைச் சேர்