সফটওয়্যার ডেপ্লয়মেন্ট: লোকাল মেশিন থেকে লাইভ সার্ভার পর্যন্ত
একটি সম্পূর্ণ বাংলা গাইড
এই গাইডটি পড়লে আপনি শিখবেন: কীভাবে আপনার নিজের কম্পিউটারে লেখা কোড, গিটহাবের মাধ্যমে, একটি ক্লাউড সার্ভারে স্বয়ংক্রিয়ভাবে ডেপ্লয় হয় — যাতে লক্ষো ব্যবহারকারী একসাথে সেটি ব্যবহার করতে পারে।
এই গাইডটি "সফটওয়্যার ডেভেলপমেন্ট সেশন টু" লাইভ ক্লাসের বিষয়বস্তু অবলম্বনে রচিত।
সূচিপত্র
১. ভূমিকা: আমরা কী শিখব এবং কেন?
২. ডেপ্লয়মেন্ট কী? — মূল ধারণা
৩. তিনটি মেশিনের পরিবেশ — The Three-Machine Model
৪. পোর্ট: দুই কম্পিউটারের কথোপকথনের দরজা
৫. গিট ও গিটহাব — কোডের গুগল ড্রাইভ
৬. ক্লাউড সার্ভার — আপনার অনলাইন কম্পিউটার
৭. SSH Key — ডিজিটাল চাবির সিস্টেম
৮. ডিজিটাল ওশান থেকে সার্ভার কেনা (ধাপে ধাপে)
৯. লোকাল মেশিন থেকে সার্ভারে SSH সংযোগ
১০. গিট ইনস্টল ও সার্ভারে গিটহাব সেটআপ
১১. GitHub Actions — স্বয়ংক্রিয় ডেপ্লয়মেন্ট পাইপলাইন
১২. YAML ওয়ার্কফ্লো ফাইল — পাইপলাইনের হৃদয়
১৩. Secrets ও Environment Variables — গোপন তথ্য সুরক্ষা
১৪. PM2 — Node.js সার্ভার ব্যাকগ্রাউন্ডে চালানো
১৫. সম্পূর্ণ ওয়ার্কফ্লো: শুরু থেকে শেষ পর্যন্ত
১৬. বাস্তব দলে ডেপ্লয়মেন্ট কীভাবে হয়?
১৭. AI/NLP কোডিং — ভবিষ্যতের কোডিং পদ্ধতি
১৮. পরবর্তী পদক্ষেপ ও রিসোর্স
অধ্যায় ১: ভূমিকা — আমরা কী শিখব এবং কেন?
আপনি হয়তো অনেক কোড লিখেছেন। একটি পোর্টফোলিও ওয়েবসাইট, একটি ই-কমার্স সাইট, অথবা একটি ছোট ওয়েব অ্যাপ। কোডটি আপনার নিজের কম্পিউটারে দিব্যি চলছে। কিন্তু প্রশ্ন হলো — এই কোড হাজার হাজার মানুষ কীভাবে ব্যবহার করবে?
এই প্রশ্নের উত্তরই হলো সফটওয়্যার ডেপ্লয়মেন্ট।
এই গাইডে আমরা শিখব:
- লোকাল মেশিন থেকে গিটহাবে কোড কীভাবে পুশ করতে হয়
- একটি ক্লাউড সার্ভার কীভাবে কিনতে ও সেটআপ করতে হয়
- SSH Key দিয়ে সার্ভারে নিরাপদ সংযোগ কীভাবে করতে হয়
- GitHub Actions দিয়ে স্বয়ংক্রিয় CI/CD পাইপলাইন কীভাবে তৈরি করতে হয়
- PM2 দিয়ে সার্ভারে Node.js অ্যাপ কীভাবে চালু রাখতে হয়
এই বিষয়গুলো কেন জরুরি?
আপনি যে প্ল্যাটফর্মেই কাজ করুন না কেন — AWS, DigitalOcean, Azure, GCP — মূল নীতিগুলো সবজায়গায় একই। একবার এই ফান্ডামেন্টাল বুঝলে যেকোনো সার্ভারে কাজ করতে পারবেন।
অধ্যায় ২: ডেপ্লয়মেন্ট কী? — মূল ধারণা
ডেপ্লয়মেন্ট মানে হলো — আপনার লেখা সফটওয়্যার এমনভাবে একটি সার্ভারে স্থাপন করা, যাতে ইন্টারনেটের যেকোনো জায়গা থেকে যেকোনো মানুষ সেটি ব্যবহার করতে পারে।
চিন্তা করুন আপনি facebook.com ভিজিট করছেন। এই facebook.com আসলে কী? এটি ফেসবুকের একটি কম্পিউটারে (সার্ভারে) রাখা একটি সফটওয়্যার। আপনার ব্রাউজার সেই সার্ভারে একটি অনুরোধ পাঠায়, সার্ভার উত্তর দেয়, আর আপনার স্ক্রিনে ওয়েবসাইট দেখা যায়।
ডেভেলপার হিসেবে আপনার কাজ তিনটি স্তরে হয়:
[আপনার ল্যাপটপ] → [গিটহাব] → [ক্লাউড সার্ভার] → [কোটি ইউজার]
এই পুরো প্রক্রিয়াটিকেই বলা হয় Software Development Lifecycle (SDLC)। এর সবচেয়ে শেষ ধাপ হলো ডেপ্লয়মেন্ট — যখন আপনার কোড ইন্টারনেটে "লাইভ" হয়।
ডেপ্লয়মেন্টে কী কী শেখা যায়?
এই একটি বিষয় শিখতে গেলে আপনি পাশাপাশি শিখে ফেলবেন:
- CI/CD (Continuous Integration / Continuous Deployment) — কোড পরিবর্তনের সাথে সাথে স্বয়ংক্রিয়ভাবে ডেপ্লয় হওয়া
- DevOps মানসিকতা — ডেভেলপমেন্ট এবং অপারেশন একসাথে
- Cloud Computing — ডিজিটাল ওশান, AWS, Azure ইত্যাদি
- Linux / Ubuntu — সার্ভার অপারেটিং সিস্টেম
- Bash Scripting — কমান্ড লাইনে স্বয়ংক্রিয় কাজ
অধ্যায় ৩: তিনটি মেশিনের পরিবেশ
একজন ডেভেলপার হিসেবে আপনাকে কমপক্ষে তিনটি আলাদা মেশিনের (পরিবেশের) কথা মাথায় রাখতে হবে:
┌─────────────────────────────────────────────────────────┐
│ মেশিন ১ মেশিন ২ মেশিন ৩ │
│ ────────── ────────── ────────── │
│ আপনার গিটহাব ক্লাউড │
│ ল্যাপটপ সার্ভার সার্ভার │
│ (Dev Machine) (Code Repo) (Deploy Machine) │
│ │
│ কোড লেখা ──→ কোড সংরক্ষণ ──→ কোড চালানো │
└─────────────────────────────────────────────────────────┘
মেশিন ১: আপনার লোকাল মেশিন (Development Environment)
এটি হলো আপনার নিজের ল্যাপটপ বা ডেস্কটপ। এখানে আপনি:
- কোড এডিটর (VS Code, IntelliJ, ইত্যাদি) দিয়ে কোড লেখেন
-
localhostএ সফটওয়্যার টেস্ট করেন - গিট দিয়ে কোড ট্র্যাক করেন
এই মেশিনে একটি মনিটর আছে, কীবোর্ড আছে — পুরো ডেস্কটপ পরিবেশ আছে।
মেশিন ২: গিটহাব সার্ভার (Code Repository)
এটি হলো Microsoft-এর পরিচালিত একটি সার্ভার, যেখানে github.com এর মাধ্যমে আপনি কোড সংরক্ষণ করেন।
গিটহাবকে আপনি কোডের গুগল ড্রাইভ হিসেবে ভাবতে পারেন। গুগল ড্রাইভে যেমন আপনার ফাইল অনলাইনে সংরক্ষিত থাকে, গিটহাবে তেমনি আপনার কোড সংরক্ষিত থাকে।
পার্থক্য হলো: গিটহাব শুধু স্টোরেজ না — এটি কোডের ইতিহাস রাখে, টিম কোলাবোরেশন সাপোর্ট করে, এবং GitHub Actions দিয়ে স্বয়ংক্রিয় কাজও করতে পারে।
মেশিন ৩: ক্লাউড ডেপ্লয়মেন্ট সার্ভার (Production Server)
এটি হলো DigitalOcean, AWS, Azure বা GCP-এর মতো কোম্পানির সার্ভার, যেটি আপনি মাসিক ভাড়া দিয়ে ব্যবহার করেন।
এই মেশিনে কোনো মনিটর নেই, কীবোর্ড নেই। এটি শুধু ইন্টারনেটের সাথে সংযুক্ত একটি কম্পিউটার। এই মেশিনটিকে আপনি টার্মিনাল/কনসোল দিয়ে দূর থেকে নিয়ন্ত্রণ করেন।
এই মেশিনে আপনার সফটওয়্যার চলে, এবং ইন্টারনেটের যেকোনো মানুষ সেটি ব্যবহার করতে পারে।
কেন আলাদা মেশিন দরকার?
এই তিনটি মেশিন তিনটি আলাদা হার্ডওয়্যার এবং আলাদা নেটওয়ার্কে থাকে। এরা এমনিতে একে অপরের সাথে কথা বলতে পারে না — ইন্টারনেট সংযোগ থাকলেই কেবল পারে।
একজন ডেভেলপার হিসেবে আপনার কাজ হলো: কোড মেশিন-১ থেকে মেশিন-২ হয়ে মেশিন-৩ পর্যন্ত নিয়ে যাওয়ার প্রক্রিয়াটি সহজ ও স্বয়ংক্রিয় করা।
অধ্যায় ৪: পোর্ট — দুই কম্পিউটারের কথোপকথনের দরজা
দুটি কম্পিউটার একে অপরের সাথে কথা বলার জন্য পোর্ট ব্যবহার করে।
পোর্ট কী? পোর্ট হলো কম্পিউটারের মধ্যে চলমান একটি প্রোগ্রাম, যেটি বাইরে থেকে আসা যোগাযোগের অনুরোধ গ্রহণ করতে পারে। সহজ ভাষায়: পোর্ট হলো একটি দরজা, যেটি খোলা থাকলে বাইরে থেকে ঢোকা যায়।
গুরুত্বপূর্ণ পোর্ট নম্বরগুলো:
| পোর্ট নম্বর | প্রোটোকল | ব্যবহার |
|---|---|---|
| 80 | HTTP | সাধারণ ওয়েবসাইট দেখা (যেমন http://example.com) |
| 443 | HTTPS | নিরাপদ ওয়েবসাইট দেখা (যেমন https://example.com) |
| 22 | SSH | এক সার্ভার থেকে আরেক সার্ভারে টার্মিনাল সংযোগ |
| 3000 | Custom | Node.js অ্যাপ সাধারণত এই পোর্টে চলে |
পোর্ট 80 এবং 443 কীভাবে কাজ করে?
যখন আপনি ব্রাউজারে http://facebook.com লেখেন, তখন আপনার কম্পিউটার ফেসবুকের সার্ভারের পোর্ট 80-তে একটি অনুরোধ পাঠায়। সার্ভার সেটি গ্রহণ করে উত্তর দেয়।
যদি https:// হয়, তাহলে পোর্ট 443 ব্যবহার হয়। HTTPS মানে যোগাযোগটি এনক্রিপ্টেড — মাঝপথে কেউ দেখতে পাবে না।
পোর্ট 22 কেন বিশেষ?
পোর্ট 22 হলো SSH (Secure Shell) প্রোটোকলের জন্য। এই পোর্ট দিয়ে আপনি একটি কম্পিউটার থেকে আরেকটি কম্পিউটারের টার্মিনালে সরাসরি ঢুকতে পারেন — যেন আপনি সেই কম্পিউটারের সামনে বসে কাজ করছেন।
উদাহরণ: আপনি ঢাকায় বসে DigitalOcean-এর সিঙ্গাপুরের সার্ভারে কমান্ড দিচ্ছেন — এটি পোর্ট 22 এর মাধ্যমে হয়।
গুরুত্বপূর্ণ: আপনার সার্ভারে পোর্ট 22 বন্ধ থাকলে কেউ SSH করে ঢুকতে পারবে না। ফায়ারওয়াল দিয়ে এই পোর্ট নিয়ন্ত্রণ করা হয়।
অধ্যায় ৫: গিট ও গিটহাব — কোডের গুগল ড্রাইভ
ডেপ্লয়মেন্ট বুঝতে হলে আগে গিট ও গিটহাব বুঝতে হবে।
গিট (Git) কী?
গিট হলো আপনার লোকাল কম্পিউটারে ইনস্টল করা একটি সফটওয়্যার, যেটি আপনার কোডের পরিবর্তনগুলো ট্র্যাক করে। এটি যেকোনো অপারেটিং সিস্টেমে ইনস্টল করা যায়।
টার্মিনালে git লিখলে যদি গিটের সাহায্য দেখা যায়, তার মানে গিট ইনস্টল আছে।
গিটহাব (GitHub) কী?
গিটহাব হলো Microsoft-এর একটি ক্লাউড সার্ভিস, যেখানে আপনি আপনার গিট রিপোজিটরি অনলাইনে সংরক্ষণ করতে পারেন।
সম্পর্কটা এরকম:
- গিট = আপনার লোকাল মেশিনে চলা সফটওয়্যার
- গিটহাব = অনলাইনে কোড রাখার জায়গা
মূল গিট কমান্ডগুলো:
# নতুন গিট রিপো শুরু করা
git init
# কোন কোন ফাইল পরিবর্তন হয়েছে দেখা
git status
# সব পরিবর্তন "স্টেজ" করা (আপলোডের জন্য প্রস্তুত করা)
git add .
# পরিবর্তনগুলো একটি "কমিট" হিসেবে সংরক্ষণ করা
git commit -m "আমার পরিবর্তনের বিবরণ"
# গিটহাবে কোড পাঠানো
git push origin main
# গিটহাব থেকে সর্বশেষ কোড আনা
git pull origin main
গিটহাবে রিপোজিটরি তৈরি করা:
১. github.com এ লগইন করুন
২. "New Repository" বাটনে ক্লিক করুন
৩. রিপোজিটরির নাম দিন (যেমন: session-two)
৪. Public বা Private বেছে নিন
৫. "Create Repository" ক্লিক করুন
গিটহাব তখন কিছু কমান্ড দেখাবে। এই কমান্ডগুলো আপনার লোকাল প্রজেক্টকে গিটহাবের সাথে যুক্ত করে।
লোকাল প্রজেক্টকে গিটহাবে লিংক করা:
# গিটহাব কোন রিপোতে কোড পাঠাব সেটা বলা
git remote add origin https://github.com/আপনার-নাম/session-two.git
# প্রথমবার পুশ করা
git push -u origin main
এরপর থেকে git push করলেই কোড গিটহাবে চলে যাবে।
অধ্যায় ৬: ক্লাউড সার্ভার — আপনার অনলাইন কম্পিউটার
ক্লাউড সার্ভার হলো ইন্টারনেটে থাকা একটি কম্পিউটার, যেটি আপনি মাসিক ভাড়া দিয়ে ব্যবহার করতে পারেন।
ক্লাউড সার্ভার এবং সাধারণ ল্যাপটপের পার্থক্য:
| বিষয় | আপনার ল্যাপটপ | ক্লাউড সার্ভার |
|---|---|---|
| মনিটর | আছে | নেই |
| কীবোর্ড | আছে | নেই |
| এক্সেস পদ্ধতি | সরাসরি ব্যবহার | SSH টার্মিনাল দিয়ে |
| চলার সময় | আপনি চালু রাখলে | ২৪/৭ চালু থাকে |
| ইন্টারনেট IP | পরিবর্তনশীল | স্থায়ী (Fixed IP) |
| মূল্য | একবার কিনতে হয় | মাসিক ভাড়া |
জনপ্রিয় ক্লাউড সার্ভার প্রোভাইডার:
- DigitalOcean: সহজ ইন্টারফেস, ছোট প্রজেক্টের জন্য ভালো, মাসে মাত্র $4 থেকে শুরু
- AWS (Amazon Web Services): সবচেয়ে বেশি ব্যবহৃত, অনেক সার্ভিস আছে
- Azure (Microsoft): বড় কোম্পানিতে জনপ্রিয়
- GCP (Google Cloud Platform): AI/ML কাজের জন্য ভালো
সবার মূল কাজের পদ্ধতি একই। একটিতে শিখলে অন্যগুলোতেও সহজে করতে পারবেন।
ক্লাউড সার্ভারের অপারেটিং সিস্টেম:
সার্ভার কেনার সময় আপনাকে অপারেটিং সিস্টেম বেছে নিতে হয়। Ubuntu (Linux-ভিত্তিক) সবচেয়ে বেশি ব্যবহৃত:
- Ubuntu 20.04 LTS: স্থিতিশীল, বেশি সাপোর্টেড — সাধারণ কাজের জন্য প্রস্তাবিত
- Ubuntu 22.04 LTS: সর্বশেষ স্থিতিশীল সংস্করণ
- LTS মানে "Long Term Support" — দীর্ঘদিন আপডেট পাবেন
অধ্যায় ৭: SSH Key — ডিজিটাল চাবির সিস্টেম
এটি সবচেয়ে গুরুত্বপূর্ণ অধ্যায়। SSH Key না বুঝলে সার্ভারে সংযোগ করা কঠিন হবে।
SSH Key কী?
SSH Key হলো একজোড়া ডিজিটাল চাবি। একটি তালা (Public Key) এবং একটি চাবি (Private Key)।
┌─────────────────────────────────────────────────┐
│ কি-পেয়ার (Key Pair) │
│ ───────────────── │
│ Private Key (id_rsa) → আপনার কাছে থাকে │
│ Public Key (id_rsa.pub) → সার্ভারে রাখা হয় │
└─────────────────────────────────────────────────┘
নিয়মটা মনে রাখুন:
- যে মেশিন থেকে এক্সেস করবেন → সেখানে Private Key রাখুন
- যে মেশিনকে এক্সেস করতে চান → সেখানে Public Key রাখুন
কেন পাসওয়ার্ডের বদলে SSH Key?
পাসওয়ার্ড দিয়েও সার্ভারে ঢোকা যায়, কিন্তু:
- পাসওয়ার্ড চুরি হওয়ার ঝুঁকি বেশি
- SSH Key গণিতগতভাবে অনেক বেশি সুরক্ষিত
- একবার সেটআপ করলে বারবার পাসওয়ার্ড দিতে হয় না
- প্রফেশনাল পরিবেশে এটিই স্ট্যান্ডার্ড
SSH Key কীভাবে তৈরি করবেন?
যেকোনো কম্পিউটারের টার্মিনালে এই কমান্ড দিন:
ssh-keygen -t rsa -b 4096 -C "আপনার-ইমেইল@example.com"
কমান্ড দেওয়ার পর:
-
ফাইলের নাম জিজ্ঞেস করবে: Enter দিলে ডিফল্ট নাম (
id_rsa) নেবে। আলাদা নাম দিতে চাইলে টাইপ করুন। - Passphrase জিজ্ঞেস করবে: Enter দিয়ে ফাঁকা রেখে দিন (এখন সহজের জন্য)।
⚠️ গুরুত্বপূর্ণ: GitHub Actions-এর সাথে SSH ব্যবহারের সময় Passphrase ফাঁকা রাখুন, নইলে অটোমেশনে সমস্যা হবে।
তৈরি হওয়া Key ফাইলগুলো কোথায় থাকে?
Mac/Linux এ:
~/.ssh/id_rsa ← Private Key (কখনো কাউকে দেবেন না!)
~/.ssh/id_rsa.pub ← Public Key (সার্ভারে দেওয়া যায়)
এই ফাইলগুলো দেখতে:
# .ssh ফোল্ডারে যাওয়া
cd ~/.ssh
# সব ফাইল দেখা (hidden ফাইলসহ)
ls -lah
# Public Key এর ভেতরে কী আছে দেখা
cat id_rsa.pub
# Private Key এর ভেতরে কী আছে দেখা (এটি কখনো শেয়ার করবেন না)
cat id_rsa
Public Key কেমন দেখায়?
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDKGr9n...দীর্ঘ স্ট্রিং... আপনার-ইমেইল@example.com
এই পুরো লাইনটি আপনার Public Key।
একাধিক Key তৈরি করা কি যায়?
হ্যাঁ! আপনি চাইলে ভিন্ন ভিন্ন উদ্দেশ্যে ভিন্ন ভিন্ন Key তৈরি করতে পারেন:
# GitHub-এর জন্য আলাদা key
ssh-keygen -t rsa -b 4096 -C "github-actions-key" -f ~/.ssh/github_actions_key
# নিজের সার্ভার এক্সেসের জন্য আলাদা key
ssh-keygen -t rsa -b 4096 -C "my-server-key" -f ~/.ssh/my_server_key
এটি best practice — কারণ একটি key কম্প্রোমাইজ হলে অন্যগুলো নিরাপদ থাকে।
অধ্যায় ৮: DigitalOcean থেকে সার্ভার কেনা (ধাপে ধাপে)
DigitalOcean-এ একটি সার্ভার (তারা বলে "Droplet") তৈরি করার ধাপগুলো:
ধাপ ১: একাউন্ট তৈরি ও লগইন
digitalocean.com এ গিয়ে একাউন্ট খুলুন। ক্রেডিট কার্ড দিয়ে ভেরিফাই করতে হবে।
বিকল্প: বাংলাদেশের লোকাল সার্ভার প্রোভাইডার থেকেও Linux সার্ভার কিনতে পারেন। প্রক্রিয়া একই।
ধাপ ২: Droplets মেনু খুলুন
বাম পাশের মেনুতে "Droplets" ক্লিক করুন। Droplets মানে ছোট ছোট ক্লাউড কম্পিউটার।
ধাপ ৩: "Create Droplet" বাটনে ক্লিক করুন
ধাপ ৪: Region (অবস্থান) বেছে নিন
বাংলাদেশ থেকে সবচেয়ে কাছের সার্ভার:
- Singapore — সবচেয়ে ভালো (কম latency)
- Bangalore — দ্বিতীয় বিকল্প
ধাপ ৫: Operating System বেছে নিন
Ubuntu → 20.04 LTS বা 22.04 LTS বেছে নিন।
ধাপ ৬: Plan (দাম) বেছে নিন
শেখার জন্য সবচেয়ে সস্তা প্ল্যান নিন:
- $4/মাস — 1 GB RAM, 1 CPU, 25 GB SSD — শুরুর জন্য যথেষ্ট
ধাপ ৭: Authentication Method বেছে নিন
এখানে দুটি অপশন আছে:
- SSH Keys ← এটি বেছে নিন (বেশি নিরাপদ)
- Password ← শেখার জন্য ব্যবহার করা যায়
SSH Key অপশনে ক্লিক করুন এবং আপনার Public Key পেস্ট করুন:
# আপনার Public Key কপি করুন:
cat ~/.ssh/id_rsa.pub
# উপরের আউটপুট কপি করে DigitalOcean-এর বক্সে পেস্ট করুন
ধাপ ৮: সার্ভারের নাম দিন
যেমন: my-deployment-server
ধাপ ৯: "Create Droplet" ক্লিক করুন
কিছুক্ষণের মধ্যে আপনার সার্ভার তৈরি হয়ে যাবে। সার্ভারটি একটি IP Address পাবে — যেমন 209.71.xx.xx।
এই IP Address মনে রাখুন বা কপি করে রাখুন।
অধ্যায় ৯: লোকাল মেশিন থেকে সার্ভারে SSH সংযোগ
এখন আমরা আমাদের ল্যাপটপ থেকে সার্ভারে সংযোগ করব।
SSH কানেক্ট করার কমান্ড:
ssh root@209.71.xx.xx
এখানে:
-
root= সার্ভারের অ্যাডমিন ইউজার নাম -
209.71.xx.xx= আপনার সার্ভারের IP Address
প্রথমবার সংযোগে কী হবে?
The authenticity of host '209.71.xx.xx' can't be established.
RSA key fingerprint is SHA256:...
Are you sure you want to continue connecting (yes/no)?
yes টাইপ করুন। এরপর সার্ভারে ঢুকে যাবেন।
সফল সংযোগের চিহ্ন:
root@my-deployment-server:~#
এই প্রম্পট দেখলে বুঝবেন আপনি এখন সার্ভারের ভেতরে। আপনার টার্মিনাল এখন সেই দূরের সার্ভারে কমান্ড পাঠাচ্ছে।
এটা একটি অদ্ভুত মুহূর্ত: আপনি ঢাকায় বসে সিঙ্গাপুরের সার্ভারে কমান্ড দিচ্ছেন!
সার্ভার থেকে বেরিয়ে আসা:
exit
অথবা Ctrl+D।
অধ্যায় ১০: গিট ইনস্টল ও সার্ভারে গিটহাব সেটআপ
এখন সার্ভারে গিট ইনস্টল করব, যাতে সার্ভার গিটহাব থেকে কোড নামাতে পারে।
সার্ভারে গিট ইনস্টল করা:
SSH দিয়ে সার্ভারে ঢুকুন, তারপর:
# প্যাকেজ লিস্ট আপডেট করা
apt update
# গিট ইনস্টল করা
apt install git -y
# গিট ঠিকমতো ইনস্টল হয়েছে কিনা চেক করা
git --version
সার্ভারে গিটহাব কনফিগার করা:
git config --global user.name "আপনার নাম"
git config --global user.email "আপনার-ইমেইল@example.com"
গিটহাব রিপো ক্লোন করা:
# গিটহাব থেকে প্রজেক্ট কপি করা
git clone https://github.com/আপনার-নাম/session-two.git
# প্রজেক্ট ফোল্ডারে যাওয়া
cd session-two
# ফোল্ডারের ভেতরে কী আছে দেখা
ls -lah
এরপর থেকে নতুন কোড পেতে:
git pull origin main
অধ্যায় ১১: GitHub Actions — স্বয়ংক্রিয় ডেপ্লয়মেন্ট পাইপলাইন
এতক্ষণ আমরা দেখলাম সব কাজ ম্যানুয়ালি। কিন্তু প্রতিবার কোড পরিবর্তন করলে কি সার্ভারে ঢুকে git pull করতে হবে?
না! এখানেই আসে GitHub Actions।
GitHub Actions কী?
GitHub Actions হলো GitHub-এর একটি ফিচার, যেটি দিয়ে আপনি নির্দিষ্ট ঘটনায় (Event) স্বয়ংক্রিয় কাজ চালাতে পারেন।
উদাহরণ:
- "যখনই main branch-এ কোড push হবে" → "সার্ভারে স্বয়ংক্রিয়ভাবে git pull করো"
এটাই CI/CD পাইপলাইনের মূল ধারণা।
GitHub Actions-এর মূল উপাদান:
┌─────────────────────────────────────────────────────────┐
│ GitHub Actions আর্কিটেকচার │
│ ───────────────────────── │
│ │
│ Event (ঘটনা) → কোড push হলো │
│ ↓ │
│ Workflow (ওয়ার্কফ্লো) → .yml ফাইলে লেখা নির্দেশ │
│ ↓ │
│ Runner (রানার) → ছোট্ট শর্ট-লাইভিং সার্ভার │
│ ↓ │
│ Jobs (কাজ) → একটি বা একাধিক কাজ │
│ ↓ │
│ Steps (ধাপ) → প্রতিটি কাজের ভেতরের ধাপগুলো │
└─────────────────────────────────────────────────────────┘
GitHub Runner কী?
Runner হলো GitHub-এর দেওয়া একটি ছোট, সাময়িক কম্পিউটার। যখন আপনি কোড push করেন, GitHub একটি Runner চালু করে, সেটি আপনার .yml ফাইলের নির্দেশ মেনে কাজ করে, তারপর বন্ধ হয়ে যায়।
মূল পয়েন্টগুলো:
- এটি সাময়িক (Ephemeral) — কাজ শেষ হলে বন্ধ
- এটি GitHub-এর মধ্যে চলে — আপনার DigitalOcean সার্ভার নয়
- এটি একটি ছোট Ubuntu মেশিন
- এই Runner থেকেই আপনার DigitalOcean সার্ভারে SSH করা হয়
Events (ঘটনা) কী কী হতে পারে?
on:
push: # কোড push হলে
branches: [main]
pull_request: # PR তৈরি হলে
branches: [main]
workflow_dispatch: # ম্যানুয়ালি চালানো
schedule: # নির্দিষ্ট সময়ে
- cron: '0 0 * * *' # প্রতিদিন রাত ১২টায়
অধ্যায় ১২: YAML ওয়ার্কফ্লো ফাইল — পাইপলাইনের হৃদয়
GitHub Actions-এর সব নির্দেশ একটি YAML ফাইলে লেখা হয়।
YAML ফাইল কোথায় রাখতে হয়?
আপনার প্রজেক্টে এই ফোল্ডার স্ট্রাকচার তৈরি করুন:
আপনার-প্রজেক্ট/
├── .github/
│ └── workflows/
│ └── deploy.yml ← এখানে রাখুন
├── index.html
├── server.js
└── package.json
সহজ পরীক্ষামূলক Workflow:
শুরুতে এই সহজ .yml ফাইল দিয়ে দেখুন GitHub Actions কাজ করছে কিনা:
# .github/workflows/deploy.yml
name: Deploy to DigitalOcean
# কখন এই Workflow চলবে?
on:
push:
branches: [main] # main branch-এ push হলে
# কী কাজ হবে?
jobs:
echo-message:
runs-on: ubuntu-latest # Runner কোন OS ব্যবহার করবে
steps:
# ধাপ ১: রিপোজিটরি চেক করা
- name: Checkout Repository
uses: actions/checkout@v3
# ধাপ ২: একটি বার্তা প্রিন্ট করা
- name: Echo Push Event
run: echo "A push has happened on the main branch!"
এই ফাইলটি আপনার প্রজেক্টে যোগ করুন এবং push করুন।
Workflow চলছে কিনা দেখবেন কীভাবে?
১. GitHub-এ আপনার রিপোতে যান
২. "Actions" ট্যাবে ক্লিক করুন
৩. নতুন একটি Workflow Run দেখা যাবে
৪. সবুজ হলে সফল, লাল হলে ব্যর্থ
সার্ভারে ডেপ্লয় করার Workflow:
এখন আসল কাজ — সার্ভারে স্বয়ংক্রিয় ডেপ্লয়:
name: Deploy to DigitalOcean
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
# ধাপ ১: কোড চেক করা
- name: Checkout Repository
uses: actions/checkout@v3
# ধাপ ২: SSH সেটআপ এবং সার্ভারে কানেক্ট
- name: Deploy to Server
run: |
# SSH ফোল্ডার তৈরি করা
mkdir -p ~/.ssh
# Private Key সেভ করা (GitHub Secret থেকে আসবে)
echo "${{ secrets.DO_SSH_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
# সার্ভার IP known hosts-এ যোগ করা
ssh-keyscan -H ${{ secrets.DO_HOST }} >> ~/.ssh/known_hosts
# সার্ভারে ঢুকে git pull করা
ssh root@${{ secrets.DO_HOST }} "
cd /root/session-two &&
git pull origin main &&
pm2 restart server
"
অধ্যায় ১৩: Secrets ও Environment Variables — গোপন তথ্য সুরক্ষা
লক্ষ্য করুন, Workflow ফাইলে সার্ভারের IP সরাসরি লেখা নেই। বরং লেখা আছে ${{ secrets.DO_HOST }}।
এর কারণ: আপনার সার্ভারের IP বা SSH Key সরাসরি কোডে রাখা নিরাপদ নয় — যে কেউ গিটহাবে দেখে ফেলতে পারবে।
GitHub Secrets কীভাবে সেট করবেন?
১. আপনার রিপোতে যান
২. Settings ট্যাবে ক্লিক করুন
৩. বাম পাশে "Secrets and variables" → "Actions" ক্লিক করুন
৪. "New repository secret" বাটনে ক্লিক করুন
যে Secrets যোগ করতে হবে:
| Secret নাম | মান কী হবে |
|---|---|
DO_HOST |
আপনার DigitalOcean সার্ভারের IP (যেমন: 209.71.xx.xx) |
DO_SSH_KEY |
আপনার Private Key-এর পুরো কন্টেন্ট |
Private Key কপি করবেন কীভাবে?
# Private Key দেখুন:
cat ~/.ssh/id_rsa
# এই পুরো আউটপুট কপি করুন (-----BEGIN RSA PRIVATE KEY----- থেকে -----END RSA PRIVATE KEY----- পর্যন্ত)
এই পুরো কন্টেন্ট GitHub Secret DO_SSH_KEY-তে পেস্ট করুন।
কোন Key সার্ভারে রাখা থাকবে?
আপনি যে Key pair (id_rsa এবং id_rsa.pub) তৈরি করেছেন, সেই Public Key (id_rsa.pub) আপনার সার্ভারে থাকা দরকার।
DigitalOcean-এ Droplet তৈরির সময় যদি SSH Key দিয়ে থাকেন, তাহলে ওই Public Key সার্ভারে /root/.ssh/authorized_keys ফাইলে সংরক্ষিত আছে।
যদি পরে নতুন Key যোগ করতে চান:
# সার্ভারে ঢুকুন
ssh root@সার্ভার-আইপি
# authorized_keys ফাইলে নতুন Public Key যোগ করুন
echo "এখানে-public-key-পেস্ট-করুন" >> ~/.ssh/authorized_keys
# ফাইলের পারমিশন ঠিক করুন
chmod 600 ~/.ssh/authorized_keys
Secrets কেন আলাদা Key ব্যবহার করা উচিত?
Best Practice হলো: আপনার নিজের সার্ভার এক্সেসের Key এবং GitHub Actions-এর জন্য আলাদা Key তৈরি করুন।
কারণ:
- GitHub Actions-এর Key হারিয়ে গেলে শুধু সেই Key বাতিল করলেই হবে
- আপনার মূল Key নিরাপদ থাকবে
- নিরাপত্তার স্তর বাড়ে
# GitHub Actions-এর জন্য আলাদা Key তৈরি:
ssh-keygen -t rsa -b 4096 -C "github-actions" -f ~/.ssh/github_actions_key
# এই নতুন Public Key সার্ভারে যোগ করুন:
# (সার্ভারে ঢুকে)
echo "$(cat ~/.ssh/github_actions_key.pub)" >> ~/.ssh/authorized_keys
# নতুন Private Key GitHub Secret-এ দিন:
cat ~/.ssh/github_actions_key
# এই আউটপুট DO_SSH_KEY secret-এ পেস্ট করুন
অধ্যায় ১৪: PM2 — Node.js সার্ভার ব্যাকগ্রাউন্ডে চালানো
সমস্যাটা কী?
সার্ভারে Node.js অ্যাপ চালাতে সাধারণত:
node server.js
কিন্তু এই কমান্ড দিলে:
- SSH session বন্ধ করলে অ্যাপও বন্ধ হয়ে যায়
- সার্ভার রিস্টার্ট হলে অ্যাপ বন্ধ হয়ে যায়
- ক্র্যাশ হলে নিজে থেকে পুনরায় চালু হয় না
সমাধান: PM2
PM2 (Process Manager 2) হলো Node.js-এর জন্য একটি Process Manager। এটি আপনার অ্যাপকে ব্যাকগ্রাউন্ডে চালু রাখে।
PM2 ইনস্টল করা:
npm install -g pm2
PM2 দিয়ে অ্যাপ চালু করা:
# অ্যাপ শুরু করা
pm2 start server.js --name my-app
# চলমান প্রসেসের তালিকা দেখা
pm2 list
# লগ দেখা
pm2 logs my-app
# অ্যাপ থামানো
pm2 stop my-app
# অ্যাপ রিস্টার্ট করা
pm2 restart my-app
# অ্যাপ ডিলিট করা
pm2 delete my-app
সার্ভার রিবুটের পরেও PM2 চালু রাখা:
# PM2 কে startup script তৈরি করতে বলুন
pm2 startup
# বর্তমান প্রসেস সেভ করুন
pm2 save
এরপর সার্ভার রিবুট হলেও PM2 স্বয়ংক্রিয়ভাবে আপনার অ্যাপ চালু করবে।
PM2 vs নিজে চালানো:
| বিষয় | node server.js |
PM2 |
|---|---|---|
| SSH বন্ধ হলে | অ্যাপ বন্ধ | চলতে থাকে |
| সার্ভার রিবুট হলে | বন্ধ | স্বয়ংক্রিয় চালু |
| ক্র্যাশ হলে | বন্ধ | স্বয়ংক্রিয় রিস্টার্ট |
| লগ ম্যানেজমেন্ট | নেই | আছে |
অধ্যায় ১৫: সম্পূর্ণ ওয়ার্কফ্লো — শুরু থেকে শেষ পর্যন্ত
এতক্ষণ আমরা আলাদা আলাদা টুকরো দেখলাম। এবার পুরো ছবিটি একসাথে:
একবার সেটআপের কাজ (শুধু প্রথমবার):
১. DigitalOcean-এ সার্ভার কেনা + Ubuntu ইনস্টল
↓
২. SSH Key তৈরি (লোকাল মেশিনে)
↓
৩. Public Key সার্ভারে যোগ করা
↓
৪. সার্ভারে SSH করে ঢোকা
↓
৫. সার্ভারে গিট, Node.js, PM2 ইনস্টল
↓
৬. সার্ভারে প্রজেক্ট ক্লোন করা (git clone)
↓
৭. PM2 দিয়ে অ্যাপ চালু করা
↓
৮. GitHub Secrets সেট করা (DO_HOST, DO_SSH_KEY)
↓
৯. .github/workflows/deploy.yml তৈরি করা
↓
১০. Workflow ফাইল push করা → প্রথম পাইপলাইন টেস্ট
প্রতিদিনের কাজের ওয়ার্কফ্লো (সেটআপের পরে):
আপনি কোড পরিবর্তন করলেন
↓
git add .
git commit -m "নতুন ফিচার যোগ"
git push origin main
↓
GitHub main branch-এ push দেখে Workflow ট্রিগার হলো
↓
GitHub একটি Runner (Ubuntu মেশিন) চালু করল
↓
Runner আপনার .yml ফাইলের নির্দেশ মেনে কাজ শুরু করল
↓
Runner আপনার DigitalOcean সার্ভারে SSH করল
(Secrets থেকে IP ও Private Key নিল)
↓
Runner সার্ভারে গিয়ে "git pull" চালাল
↓
সার্ভারে নতুন কোড চলে এলো
↓
PM2 restart করা হলো
↓
ইউজাররা নতুন ভার্সন দেখতে পেলেন!
সবুজ চেকমার্ক মানে কী?
GitHub Actions ট্যাবে যদি সবুজ চেকমার্ক দেখেন:
✓ Checkout Repository (সফল)
✓ Deploy to Server (সফল)
তার মানে সার্ভারে নতুন কোড পৌঁছে গেছে!
লাল ক্রস মানে কী?
✗ Deploy to Server (ব্যর্থ)
তার মানে কোথাও সমস্যা আছে। এরর মেসেজ পড়ুন, সমস্যা খুঁজুন, ঠিক করুন। এটি স্বাভাবিক — প্রথমবার পাইপলাইন সেটআপে অনেকবার ব্যর্থ হওয়া স্বাভাবিক।
অধ্যায় ১৬: বাস্তব দলে ডেপ্লয়মেন্ট কীভাবে হয়?
পাঠাও, বিকাশ বা বড় কোম্পানিতে কীভাবে কাজ হয় সেটা জানা দরকার।
Branch Strategy (শাখা কৌশল):
main (production) ← সরাসরি push নিষিদ্ধ
└── develop (staging)
└── feature/login-page (ডেভেলপারের কাজ)
└── feature/payment (আরেকজনের কাজ)
└── bugfix/checkout (বাগ ঠিক করা)
প্রতিটি Branch-এ আলাদা Workflow:
# ডেভেলপার branch-এ push করলে → শুধু test চলবে
on:
push:
branches: [feature/*, bugfix/*]
jobs:
test:
steps:
- run: npm test
# main-এ merge হলে → production deploy হবে
on:
push:
branches: [main]
jobs:
deploy-production:
steps:
- run: ssh ... "git pull && pm2 restart"
Pull Request (PR) Review Process:
১. ডেভেলপার নিজের branch-এ কাজ করে
২. PR তৈরি করে main-এ merge করার অনুরোধ দেয়
৩. CI চলে: টেস্ট পাস না হলে merge করা যাবে না
৪. টিম লিড/সিনিয়র দেখে Approve করেন
৫. Approve হলেই main-এ merge হয়
৬. Merge হওয়া মাত্র Production deploy শুরু হয়
এই প্রক্রিয়ায় ভুলভাল কোড production-এ যাওয়ার সুযোগ অনেক কম।
আরেকটু উন্নত পাইপলাইন (Docker সহ):
Docker ব্যবহার করলে প্রক্রিয়া একটু ভিন্ন:
কোড push হলো
↓
CI: Test চলল → Pass হলো
↓
Docker Image তৈরি হলো (পুরো অ্যাপ প্যাকেজ করা)
↓
Docker Hub/Registry-তে Image push হলো
↓
Production সার্ভার নতুন Image pull করল
↓
নতুন Container চালু হলো, পুরনো বন্ধ হলো
Docker ব্যবহারে সুবিধা: "আমার মেশিনে চলছে কিন্তু সার্ভারে চলছে না" এই সমস্যা থাকে না।
অধ্যায় ১৭: AI/NLP কোডিং — ভবিষ্যতের কোডিং পদ্ধতি
এই ধারণাটি বোঝা আধুনিক ডেভেলপারদের জন্য অত্যন্ত গুরুত্বপূর্ণ।
NLP Coding কী?
NLP Coding মানে হলো — প্রোগ্রামিং ভাষায় কোড না লিখে, স্বাভাবিক ভাষায় (ইংরেজি, বাংলা) বলে দিলে AI কোড লিখে দেয়।
আগের দুনিয়া:
ডেভেলপার → HTML/CSS/JS হাতে লেখেন → ওয়েবপেজ
এখনকার দুনিয়া:
ডেভেলপার → AI-কে বাংলা/ইংরেজিতে বলেন → AI কোড লেখে → ওয়েবপেজ
উদাহরণ:
AI-কে বলা হলো:
"Please make me a Contact Us form with TailwindCSS, mobile responsive and good looking. Use icons where necessary. Use consistent colors following color theory."
AI সম্পূর্ণ HTML ফর্ম তৈরি করে দিল।
এর মানে কি ডেভেলপারদের কাজ নেই?
না! বরং উল্টো। AI ভালো আউটপুট দেওয়ার জন্য আপনাকে জানতে হবে:
- Frontend Terminology: "color theory", "information hierarchy", "responsive design" — এই শব্দগুলো না জানলে AI-কে সঠিকভাবে বলতে পারবেন না
- কী লেখা আছে সেটা বোঝার ক্ষমতা: AI যা লিখে দেয় তা আপনি বুঝতে না পারলে বাগ ঠিক করতে পারবেন না
- সিদ্ধান্ত নেওয়ার ক্ষমতা: AI কি লিখল সেটা সঠিক কিনা বোঝার জন্য ফান্ডামেন্টাল জ্ঞান দরকার
AI-এর সীমাবদ্ধতা:
একটি বাস্তব অভিজ্ঞতার কথা মনে রাখুন: AI দিয়ে ক্লাস প্রিপেয়ার করতে ১০-১২ ঘণ্টা লেগেছিল। কারণ এক জায়গায় এরর হয়েছিল যেটা AI ঠিক করতে পারছিল না।
AI দিয়ে কাজ দ্রুত হয়, কিন্তু জটিল সমস্যায় এখনো মানুষের বিচারবুদ্ধি দরকার।
কীভাবে AI দিয়ে ভালো কাজ করবেন?
- স্পষ্টভাবে বলুন: যত বেশি বিস্তারিত, তত ভালো আউটপুট
- Technical term ব্যবহার করুন: "TailwindCSS", "responsive", "modal" — এই ধরনের শব্দ AI ভালো বোঝে
- Iteratively কাজ করুন: প্রথম আউটপুট মনমতো না হলে আরো বিস্তারিত বলুন
- ফলাফল যাচাই করুন: AI যা দেয় সেটা অন্ধভাবে ব্যবহার না করে বুঝে নিন
অধ্যায় ১৮: পরবর্তী পদক্ষেপ ও রিসোর্স
এখনই যা করুন:
১. একটি ছোট সার্ভার কিনুন
মাসে $4-5 দিয়ে DigitalOcean বা লোকাল প্রোভাইডার থেকে একটি Linux সার্ভার নিন। এটি আপনার শেখার হাতিয়ার।
২. একটি সরল প্রজেক্ট ডেপ্লয় করুন
একটি সাধারণ HTML/CSS/JS পেজ বা Node.js অ্যাপ ডেপ্লয় করুন। প্রথমবার ম্যানুয়ালি করুন, তারপর GitHub Actions দিয়ে।
৩. GitHub Actions ডকুমেন্টেশন পড়ুন
GitHub-এর অফিশিয়াল ডকুমেন্টেশন পড়ুন:
- Workflow syntax বুঝুন
- বিভিন্ন Action ব্যবহার করে দেখুন
৪. Bash Scripting শিখুন
৩-৪ দিন Bash Scripting দেখুন। এটি deployment পাইপলাইনের জন্য অপরিহার্য।
সিভিতে যা যোগ করতে পারবেন:
এই বিষয়গুলো শিখলে আপনার সিভিতে লিখতে পারবেন:
Technical Skills:
- CI/CD Pipeline Setup (GitHub Actions)
- Cloud Server Management (DigitalOcean/AWS)
- Linux Server Administration (Ubuntu)
- SSH Key Management
- PM2 Process Management
- Git/GitHub Workflow
এই দক্ষতাগুলো চাকরির বাজারে অত্যন্ত মূল্যবান।
গুরুত্বপূর্ণ বিষয়গুলো মনে রাখুন:
┌─────────────────────────────────────────────────────┐
│ মূল শিক্ষা │
│ ────────── │
│ ✓ তিনটি মেশিন: Local → GitHub → Server │
│ ✓ পোর্ট 22 = SSH টানেলিং │
│ ✓ পোর্ট 80/443 = HTTP/HTTPS │
│ ✓ SSH Key: Private আপনার কাছে, Public সার্ভারে │
│ ✓ GitHub Actions = কোড push হলে স্বয়ংক্রিয় কাজ │
│ ✓ Runner = GitHub-এর সাময়িক সার্ভার │
│ ✓ YAML ফাইল = পাইপলাইনের নির্দেশনা │
│ ✓ Secrets = গোপন তথ্য নিরাপদে সংরক্ষণ │
│ ✓ PM2 = Node.js অ্যাপ ব্যাকগ্রাউন্ডে রাখা │
└─────────────────────────────────────────────────────┘
উপসংহার
সফটওয়্যার ডেপ্লয়মেন্ট প্রথম দেখায় জটিল মনে হয়। কিন্তু মূল ধারণাগুলো বুঝলে এটি একটি পরিষ্কার এবং যুক্তিসঙ্গত প্রক্রিয়া।
মনে রাখুন: ফান্ডামেন্টাল একই, প্ল্যাটফর্ম যেটাই হোক। DigitalOcean, AWS, Azure, GCP — সবজায়গায় SSH, পোর্ট, Key Management, এবং CI/CD-এর ধারণা একই।
প্রথমবার সেটআপে ভুল হবে, অনেক error দেখবেন — এটা স্বাভাবিক। প্রতিটি error আপনাকে একটু বেশি শেখায়।
একটি সার্ভার কিনুন, একটি পাইপলাইন বানান, নিজের প্রজেক্ট deploy করুন — শেখার এটাই সেরা পথ।
Top comments (0)