গিট ব্যবহার করে উবুন্টু সার্ভারে ফাইল আপলোড


FTP ক্লায়েন্ট ব্যবহার করে রিমোট সার্ভারে ফাইল আপলোড করা বেশ সময় সাপেক্ষ আর কষ্টকরও। কেমন হয় যদি git ব্যাবহার করে একটি মাত্র কমান্ড দিয়ে সার্ভারে ফাইল আপলোড করা যায়? এই লেখাটিতে সেই উপায়টিই বাতলে দেওয়ার চেষ্টা করছি।

কিভাবে করব?

আচ্ছা আমরা তো github বা এমন কিছু ব্যবহার করি গিটের রিমোট রিপজিটরি হিসেবে। যেহেতু git একাধিক রিমোট রিপজিটরি ব্যবহারের সুযোগ দেয় তাই আমরা সেই সুযোগটাই কাজে লাগাবো। আমাদের সার্ভারে প্রথমে একটা গিট রিপজিটরি তৈরি করে সেটি রিমোট রিপজিটরি হিসেবে ব্যবহার করব। আর সেই রিপজিটরি থেকে ফাইল কপি করে সাইট ফোল্ডারে পাঠানোর জন্য ব্যাবহার করব গিটের Hooks নামের একটা ফিচার।
কাজটা করব দুটো ধাপে। প্রথম ধাপে সার্ভারে রিমোট রিপো তৈরি করব আর Hooks সেটআপ করব। দ্বিতীয় ধাপে লোকাল গিট রিপোতে লিঙ্ক রিমোট রিপো হিসেবে এড করব। তো শুরু করা যাক।

সার্ভারে কাজ

প্রথমেই সার্ভারে লগইন করতে হবে।

ssh username@server_ip

এখানে username হলো আপনার ইউজারনেম আর server_ip হলো সার্ভার আইপি।

সার্ভারে যদি গিট ইনস্টল করা না থাকে তবে নিচের কমান্ড দিযে গিট ইনস্টল করে নিন।

sudo apt-get install git

এবার গিট রিপো তৈরির পালা। ধরা যাক আমাদের সাইট ফোল্ডার হলো /var/www/html/task। এখন আমি /var ফোল্ডারে repo নামে একটা ফোল্ডার তৈরি করবো। যেখানে আমাদের গিট রিপোটি থাকবে। নিচের কমান্ড রান করি।

mkdir /var/repo

এবার repo ফোল্ডারে প্রবেশ করি।

cd /var/repo/

এখানে একটি রিপোজিটরি ফোল্ডার তৈরি করি। ধরা যাক সেটির নাম app.git। যেহেতু ফোল্ডারটি গিট রিপো হিসেবে ব্যবহার হবে তাই এটির নামে .git থাকা ভাল।
নিচের কমান্ড রান করি।

mkdir app.git

এবার app.git এ প্রবেশ করতে হবে।

cd app.git/

এবার গিট রিপো তৈরির জন্য নিচের কমান্ড রান করি।

git init --bare

এখানে --bare ফ্লাগ ব্যবহার বাধ্যতামূলক।

এখন app.git ফোল্ডারে কিছু ফোল্ডার তৈরি হয়ে গেছে। যেখানে hooks নামে একটা ফোল্ডারও আছে। hooks ফোল্ডারে আগে থেকেই কিছু hook তৈরি করা থাকতে পারে। তবে আমরা post-receive নামে hook ব্যবহার করবো।

একই সাথে সেটি তৈরি এবং এডিটের জন্য নিচের কমান্ড রান করি।

nano /var/repo/app.git/hooks/post-receive

ন্যানো এডিটর অপেন হবে। এবার নিচের মত কোড লিখি। Ctrl+O দিয়ে এন্টার করি। তারপর Ctrl+X দিয়ে বেরিয়ে আসি।

#!/bin/sh
git --work-tree=site_folder_path --git-dir=repo_folder_path checkout -f

এবার হুকটি এক্জিকিউটেবল করতে হবে। সেজন্য নিচের কমান্ড রান করি।

chmod +x /var/repo/app.git/hooks/post-receive

ব্যাস! রিমোট গিট রিপো তৈরি। চাইলে সার্ভার থেকে লগআউট করতে পারি।

লোকাল পিসিতে কাজ

ধরে নিচ্ছি আমাদের একটি গিট রিপো আছে যেটি সার্ভারে পুশ করতে চাই। তো এবার রিপোজিটরিতে আমাদের রিমোট রিপোর লিংক অ্যাড করতে হবে। সেজন্য নিচের মত কমান্ড রান করি।

git remote add give_a_name ssh://username@server_ip/repo_link

এখানে give_a_name এ পছন্দমত নাম দেওয়া যেতে পারে। যেমন গিটহাবের ক্ষেত্রে দেওয়া হয় origin। ধরা যাক আমি সার্ভারে থাকা রিমোট রিপোর নাম দিলাম serverusername এ ইউজার নেম আর server_ip এর জায়গায় সার্ভার আইপি বসাতে হবে। repo_link হিসেবে দিতে হবে রিমোট রিপোটির লিংক। আমার ক্ষেত্রে কমান্ডটি হবে -

git remote add server ssh://root@111.11.111.11/var/repo/app.git

ব্যাস কাজ শেষ। এবার থেকে লোকাল কম্পিউটারে কোড ইডিট করুন, কমিট করুন আর পুশ করুন।

একটি কথা না বললেই নয়, পুশ করার জন্য অবশ্যই পিসিটির ssh public কী সার্ভারে এড করতে হবে। পুশ করার জন্য আমার কমান্ডটি হবে -

git push server master

server হলো রিমোট রিপোর নাম যেটি আমি সেট করেছিলাম আর master হলো সেই ব্রাঞ্চ যেটি আমি পুশ করতে চাই।

পুশ শেষে সাইট লিংক ব্রাউজ করে দেখতে পারেন, ফাইল সার্ভারে পৌঁছুলো কিনা।

Comments