গিট ব্যবহার করে উবুন্টু সার্ভারে ফাইল আপলোড
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
site_folder_path
হলো আমাদের সাইট ফোল্ডার। আমার ক্ষেত্রে/var/www/html/task
.repo_folder_path
হলো আমাদের গিট রিপোর লিংক। আমার ক্ষেত্রে/var/repo/app.git
এবার হুকটি এক্জিকিউটেবল করতে হবে। সেজন্য নিচের কমান্ড রান করি।
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
। ধরা যাক আমি সার্ভারে থাকা রিমোট রিপোর নাম দিলাম server
। username
এ ইউজার নেম আর 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
হলো সেই ব্রাঞ্চ যেটি আমি পুশ করতে চাই।
পুশ শেষে সাইট লিংক ব্রাউজ করে দেখতে পারেন, ফাইল সার্ভারে পৌঁছুলো কিনা।