৪.২ সার্ভারে গিট – সার্ভারে গিট কনফিগার করা

সার্ভারে গিট কনফিগার করা

এখন আমরা আলোচনা করবো কিভাবে আপনার নিজের সার্ভারে এই প্রোটোকলগুলি চালানোর জন্য একটি গিট সার্ভিস সেট আপ করবেন।
নোট
এখানে আমরা একটি লিনাক্স-ভিত্তিক সার্ভারে প্রাথমিক এবং সহজ ইনস্টলেশনের জন্য প্রয়োজনীয় কমান্ড এবং পদক্ষেপগুলি দেখাবো। যদিও ম্যাকওএস (macOS) বা উইন্ডোজ (Windows) সার্ভারগুলিতেও এই সার্ভিসগুলি চালানো সম্ভব। প্রকৃতপক্ষে আপনার ইনফ্রাস্ট্রাকচারের মধ্যে একটি প্রোডাকশন সার্ভার সেট আপ করলে অবশ্যই নিরাপত্তা ব্যবস্থা বা অপারেটিং সিস্টেম টুলগুলির মধ্যে পার্থক্য থাকবে, তবে আশা করি এটি আপনাকে কী কী ব্যপারগুলো গুলো জড়িত (বা কী জিনিসগুলো দরকার) সে সম্পর্কে সাধারণ ধারণা দেবে।
প্রাথমিকভাবে যেকোন গিট সার্ভার সেট আপ করার জন্য, আপনাকে বর্তমান একটি রিপোজিটরি কে একটি নতুন খালি রিপোজিটরিতে এক্সপোর্ট করতে হবে  — একটি রিপোজিটরি যেখানে কোন কার্যকরী ডিরেক্টরি নেই। এটি সাধারণত সহজেই করা যায়। একটি নতুন খালি রিপোজিটরি তৈরি করতে আপনার রিপোজিটরি ক্লোন করার জন্য, আপনি ক্লোন কমান্ডটির সাথে –bare অপশনটি যোগ করে চালান। নিয়ম অনুসারে, খালি রিপোজিটরির ডিরেক্টরির নাম .git এক্সটেনশন (সাফিক্স) দিয়ে শেষ হয়, যেমন:
				
					$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.

				
			
এখন আপনার my_project.git ডিরেক্টরিতে গিট ডিরেক্টরি ডেটার একটি অনুলিপি (কপি) থাকা উচিত। এটি এরকম কিছুর সাথে মোটামুটি মিলবে:
				
					$ cp -Rf my_project/.git my_project.git
				
			
কনফিগারেশন ফাইলে কয়েকটি ছোটখাটো পার্থক্য রয়েছে, কিন্তু আপনার কাজের (উদ্দেশ্য বাস্তবায়নের) জন্য প্রায় একই জিনিসই দরকার। এই কমান্ডটি ওয়ার্কিং ডিরেক্টরি নেই এমন একটি গিট রিপোজিটরি নেয় এবং এটির জন্য একটি নির্দিষ্ট ডিরেক্টরি তৈরি করে।

একটি সার্ভারে খালি রিপোজিটরি রাখা

এখন আপনার কাছে আপনার রিপোজিটরির একটি খালি কপি রয়েছে, পরবর্তীতে আপনাকে যা করতে হবে তা হল এটিকে একটি সার্ভারে রাখা এবং আপনার প্রোটোকল সেট আপ করা। ধরা যাক আপনি git.example.com নামে একটি সার্ভার সেট আপ করেছেন যেখানে আপনার SSH অ্যাক্সেস আছে, এবং আপনি আপনার সব গিট রিপোজিটরিগুলো /srv/git ডিরেক্টরির অধীনে সংরক্ষণ করতে চান। ধরা যাক সেই সার্ভারে /srv/git আছে, এখন আপনি আপনার খালি রিপোজিটরিটি কপি করে আপনার নতুন রিপোজিটরি সেট আপ করতে পারবেন:
				
					$ scp -r my_project.git user@git.example.com:/srv/git
				
			
এই মুহুর্তে, সেই সার্ভারের SSH-ভিত্তিক /srv/git ডিরেক্টরিতে রিড অ্যাক্সেস থাকা অন্যান্য ব্যবহারকারীরাও চাইলে আপনার রিপোজিটরিটি নিচের কমান্ডটি চালানোর মাধ্যমে ক্লোন করতে পারবেন:
				
					$ git clone user@git.example.com:/srv/git/my_project.git
				
			
যদি একজন ব্যবহারকারী SSH এর মাধ্যমে সার্ভারের সাথে সংযুক্ত হয় এবং ডিরেক্টরিতে write অ্যাক্সেস থাকে, তাহলে তারা স্বয়ংক্রিয়ভাবে পুশ (push) করার অ্যাক্সেসও পাবে।

আপনি যদি git init কমান্ডের সাথে –shared অপশনটি যোগ করে চালান তাহলে গিট স্বয়ংক্রিয়ভাবে একটি রিপোজিটরিতে সঠিকভাবে গ্রুপ রাইট (write) পারমিশন যোগ করে দেয়। উল্লেখ্য, এই কমান্ডটি চালানোর মাধ্যমে, আপনি কোনো কমিট, রেফ, ইত্যাদি নষ্ট করছেন না।
				
					$ ssh user@git.example.com
$ cd /srv/git/my_project.git
$ git init --bare --shared
				
			
আপনি দেখতে পাচ্ছেন কত সহজেই একটি গিট রিপোজিটরি নিয়ে, একটি খালি সংস্করণ (ভার্সন) তৈরি করে, এটি এমন একটি সার্ভারে রাখা যায় যেখানে আপনি এবং আপনার সহযোগীদের SSH অ্যাক্সেস রয়েছে৷ এখন আপনি একই প্রজেক্টে সহযোগিতা করতে প্রস্তুত।

এটি লক্ষ্য করা গুরুত্বপূর্ণ যে, অনেক লোকের অ্যাক্সেস রয়েছে এমন একটি দরকারী গিট সার্ভার চালানোর জন্য, আক্ষরিক অর্থে আপনাকে কেবল এই কাজগুলিই করা লাগবে। শুধুমাত্র একটি সার্ভারে SSH অ্যাক্সেস সহ অ্যাকাউন্ট যোগ করুন এবং কোথাও একটি খালি রিপোজিটরি আপলোড করুন যেখানে ঐ সমস্ত ব্যবহারকারীর রিড এবং রাইট অ্যাক্সেস রয়েছে। তাহলেই আপনি কাজ করতে প্রস্তুত, আর কিছুর প্রয়োজন নেই।

পরবর্তী কয়েকটি অধ্যায়ে, আপনি আরও বাস্তবধর্মী সেটআপগুলিতে কীভাবে এক্সপান্ড করবেন তা দেখতে পাবেন। এই আলোচনায় থাকবে, প্রতিটি ব্যবহারকারীর জন্য অ্যাকাউন্ট তৈরি না করা, রিপোজিটরিগুলিতে পাবলিক রিড অ্যাক্সেস যোগ করা, ওয়েব ইউজার ইন্টারফেস (UI) সেট আপ করা এবং আরও অনেক কিছু। যাইহোক, মনে রাখবেন যে একটি প্রাইভেট প্রজেক্টে কয়েকজন এক সাথে কাজ করার জন্য আপনার যা দরকার তা হল একটি SSH সার্ভার এবং একটি খালি রিপোজিটরি।

ছোট সেটআপ

আপনার যদি একটি ছোট টিম থাকে বা আপনার প্রতিষ্ঠানে সবেমাত্র গিট নিয়ে কাজ শুরু করেছেন এবং শুধুমাত্র কয়েকজন ডেভেলপার থাকে, তাহলে জিনিসগুলি আপনার জন্য সহজ হতে পারে। একটি গিট সার্ভার সেট আপ করার সবচেয়ে জটিল দিকগুলির মধ্যে একটি হল ব্যবহারকারী ব্যবস্থাপনা। আপনি যদি কিছু রিপোজিটরি নির্দিষ্ট ব্যবহারকারীদের জন্য শুধুমাত্র read-only করতে চান এবং অন্যদের জন্য read/write চান, অ্যাক্সেস এবং অনুমতিগুলি ব্যবস্থা করা একটু বেশি কঠিন হতে পারে।

SSH অ্যাক্সেস

আপনার যদি এমন একটি সার্ভার থাকে যেখানে আপনার সমস্ত ডেভেলপারদের ইতিমধ্যেই SSH অ্যাক্সেস রয়েছে, তবে সেখানে আপনার প্রথম রিপোজিটরি সেট আপ করা সাধারণত সহজ, কারণ আপনাকে প্রায় কোনও কাজই করতে হবে না (যেমনটা আমরা আগের অধ্যায়ে আলোচনা করেছি)। আপনি যদি আপনার রিপোজিটরিগুলিতে আরও জটিল অ্যাক্সেস কন্ট্রোল টাইপ পারমিশন চান তবে আপনি আপনার সার্ভারের অপারেটিং সিস্টেমের সাধারণ ফাইল সিস্টেম পারমিশনগুলির সাথে সেগুলি পরিচালনা করতে পারেন।

আপনি যদি এমন একটি সার্ভারে আপনার রিপোজিটরি রাখতে চান যেখানে আপনার টিমের প্রত্যেকের জন্য অ্যাকাউন্ট নেই যাদের জন্য আপনি write অ্যাক্সেস দিতে চান, তাহলে আপনাকে অবশ্যই তাদের জন্য SSH অ্যাক্সেস সেট আপ করতে হবে। ধরে নিচ্ছি যে, এটি করার জন্য আপনার কাছে একটি সার্ভার রয়েছে, এটিতে ইতিমধ্যে একটি SSH সার্ভার ইনস্টল করা আছে এবং এইভাবেই আপনি সার্ভারটি অ্যাক্সেস করছেন।

আপনি আপনার পুরো টিমকে অ্যাক্সেস দিতে পারেন এমন কয়েকটি উপায় রয়েছে। প্রথমটি হল প্রত্যেকের জন্য অ্যাকাউন্ট তৈরি করা, যা সহজ, কিন্তু কষ্টকর ও হতে পারে। হতে পারে আপনি প্রতিটি নতুন ব্যবহারকারীর জন্য adduser (বা সম্ভাব্য বিকল্প useradd) চালাতে চান না এবং প্রত্যেকের জন্য অস্থায়ী পাসওয়ার্ড সেট করতে চান না।

দ্বিতীয় একটি পদ্ধতি হল, মেশিনে একটি একক ‘গিট’ ব্যবহারকারীর অ্যাকাউন্ট তৈরি করা। যেসব ব্যবহারকারীর write অ্যাক্সেস থাকতে হবে তাদের প্রত্যেককে আপনাকে একটি SSH পাবলিক কী (key) পাঠাতে বলুন, আপনার নতুন গিট অ্যাকাউন্টের ~/.ssh/authorized_keys ফাইলে সেই কী (key) যোগ করুন। এই মুহূর্তে, প্রত্যেকে ওই ‘গিট’ অ্যাকাউন্টের মাধ্যমে সেই মেশিনটি অ্যাক্সেস করতে সক্ষম হবে। এটি কোনোভাবেই কমিট ডেটাকে প্রভাবিত করে না — আপনি কোন SSH ব্যবহারকারী হিসেবে সংযুক্ত হয়েছেন সেটি আপনার রেকর্ড করা কমিটগুলিকে প্রভাবিত করে না।

আরেকটি উপায় হল আপনার SSH সার্ভারকে একটি LDAP সার্ভার বা অন্য কোনো কেন্দ্রীভূত অথেন্টিকেশিন সোর্স থেকে অথেন্টিকেট করা যা আপনি ইতিমধ্যেই সেটআপ করেছেন। যতক্ষণ পর্যন্ত প্রতিটি ব্যবহারকারী মেশিনে শেল অ্যাক্সেস করতে সক্ষম হয়, ততক্ষণ আপনি যে কোনও SSH অথেন্টিকেশিন পদ্ধতির কথাই ভাবেন সেটি কাজ করা উচিত।