GitHub Setup
এই page-এ server-কে GitHub-এর সাথে connect করবেন যাতে আপনার code সহজে server-এ নিয়ে আসা যায়। দুটো পদ্ধতি দেখাবো — solo developer-দের জন্য সহজ উপায় এবং production-এর জন্য প্রফেশনাল উপায়।
Why This Matters
অনেকে মনে করেন server-এ code নেওয়ার জন্য সরাসরি file copy করলেই হয়। কিন্তু এটি কখনো করবেন না। সঠিক workflow হলো:
আপনার Computer → push → GitHub → pull → Serverএই workflow-এর সুবিধা:
- প্রতিটি code change-এর history থাকে — কে কখন কী পরিবর্তন করেছে
- কোনো সমস্যা হলে যেকোনো পুরোনো version-এ ফিরে যাওয়া যায়
- Team-এ কাজ করলে সবাই একই codebase share করতে পারে
- পরবর্তীতে CI/CD pipeline যোগ করা সহজ হয়
সুতরাং server-এর GitHub-এর সাথে connection থাকা একটি বাধ্যতামূলক production practice।
Two Methods
Public repository হলে কোনো authentication লাগে না — সরাসরি git clone URL এবং git pull কাজ করবে। এই page শুধু private repository-র জন্য প্রযোজ্য।
SSH Deploy Key (প্রফেশনাল)
SSH Deploy Key
এটি production-এর জন্য সবচেয়ে নিরাপদ পদ্ধতি। Server-এ একটি নতুন SSH key তৈরি করা হয় এবং সেটি শুধুমাত্র ওই নির্দিষ্ট GitHub repository-র read access পায়।
Generate Key on Server
Server-এ একটি নতুন SSH key তৈরি করুন। এটি আপনার personal key থেকে আলাদা — শুধু এই server-এর জন্য:
ssh-keygen -t ed25519 -C "server-deploy-key" -f ~/.ssh/github_deployএটি দুটি ফাইল তৈরি করবে:
~/.ssh/github_deploy— Private Key (server-এ থাকবে, কাউকে দেবেন না)~/.ssh/github_deploy.pub— Public Key (GitHub-এ যোগ করবেন)
Add to GitHub
Public key-এর content দেখুন:
cat ~/.ssh/github_deploy.pubOutput copy করুন। এখন GitHub-এ যান:
- আপনার repository → Settings → Deploy Keys → Add deploy key
- Title:
Production Server - Key: paste করুন
- Allow write access: টিক দেবেন না (শুধু read access দিন)
- Add key click করুন
Deploy Key কেন read-only? Server-এর কাজ শুধু code নিয়ে আসা (pull), কোনো code পাঠানো (push) নয়। Write access না দেওয়া মানে server compromise হলেও attacker আপনার GitHub-এ কোনো malicious code push করতে পারবে না।
Configure SSH
Server-এ SSH config file তৈরি করুন যাতে GitHub connection-এ এই key ব্যবহার হয়:
nano ~/.ssh/configনিচের content যোগ করুন:
Host github.com
IdentityFile ~/.ssh/github_deploy
IdentitiesOnly yesTest Connection
ssh -T git@github.comHi username! You've successfully authenticated দেখলে সফল।
Clone Repository
SSH URL ব্যবহার করে clone করুন (HTTPS নয়):
git clone git@github.com:YOUR_USERNAME/YOUR_REPO.gitDaily Update Workflow
Code update করতে হলে server-এ গিয়ে:
# project folder-এ যান
cd ~/YOUR_REPO
# নতুন code নিন (GitHub থেকে)
git pull
# production build তৈরি করুন
npm run build
# app restart করুন (PM2 setup হলে)
pm2 restart myappপ্রতিটি command কী করে:
git pull— GitHub থেকে নতুন সব commit নামিয়ে আনে। এটি শুধু code download করে, app restart করে না।npm run build— আপনার Next.js code-কে optimized production bundle-এ রূপান্তরিত করে। এই ফাইলগুলো.next/folder-এ থাকে।pm2 restart myapp— চলমান app-টি বন্ধ করে নতুন build দিয়ে আবার চালু করে।
git pull-এর পরে npm run build না করলে পুরোনো build দিয়েই app চলতে থাকবে — নতুন code কাজ করবে না।
Server-এ কখনো npm run dev চালাবেন না।
npm run dev শুধু আপনার নিজের computer-এ development-এর জন্য। Server-এ সবসময় npm run build করে npm run start চালাতে হয় (PM2-এর মাধ্যমে)।
| Command | কোথায় চালাবেন | কেন |
|---|---|---|
npm run dev | শুধু Local | Development, hot reload, error details দেখায় |
npm run build | Server | Optimized bundle তৈরি করে |
npm run start | Server (PM2 দিয়ে) | Production server চালু করে |
CyberSec Note
Least Privilege Principle: Deploy Key-কে read-only রাখা এবং PAT-এ minimum scope দেওয়া — এই ধারণাটি সিকিউরিটির একটি মৌলিক নীতি।
SSH Deploy Key কেন personal key-এর চেয়ে নিরাপদ:
- Personal key compromise হলে attacker আপনার সব GitHub repo-তে access পাবে
- Deploy Key compromise হলে শুধু ওই একটি repo-র read access পাবে
PAT-এর জন্য মনে রাখবেন:
- Expiration date সেট করুন — token পুরনো হলে rotate করুন
.envফাইলে token রাখবেন না — এটিgit pull-এর credential, deploy করার পরে.git/config-এ থাকে- Token কখনো GitHub-এ push করবেন না — GitHub নিজেই secret scanning করে এবং exposed token revoke করে দেয়
Quick Check
-
ssh -T git@github.comসফল হচ্ছে? (SSH Deploy Key পদ্ধতিতে) - Deploy Key-এ write access দেওয়া হয়নি?
-
git cloneসফলভাবে সম্পন্ন হয়েছে? -
git pullদিলে latest code আসছে?
পরবর্তী → Environment Variables