🔰 Part 1: Local Python Bot Project Initialization (Windows)
✅ Step 1: googlebot/ নামের প্রজেক্ট ফোল্ডার তৈরি করা
mkdir googlebot
cd googlebot
এটা হবে তোমার পুরো বট প্রজেক্টের মূল ফোল্ডার।
✅ Step 2: Python virtual environment তৈরি করা
python -m venv venv
এটা
venv/নামে এক ফোল্ডার বানাবে যেখানে Python ও Pip আলাদা থাকবে, যাতে তোমার সিস্টেমে কিছু নষ্ট না হয়।
✅ Step 3: virtualenv অ্যাক্টিভ করা (Windows)
venv\Scripts\activate
তুমি যদি
bashইউজ করো:source venv/Scripts/activate
এখন টার্মিনাল লাইনে(venv)লেখা থাকবে — মানে virtualenv active।
✅ Step 4: Playwright লাইব্রেরি ইনস্টল করা
pip install playwright
Playwright দিয়ে আমরা browser (Chrome/Chromium) চালিয়ে Google search করবো।
✅ Step 5: Chromium browser install করা
python -m playwright install
এটা Playwright এর backend browser ডাউনলোড করবে, যেমন Chromium, Firefox ইত্যাদি।
✅ Step 6: main.py নামে bot স্ক্রিপ্ট তৈরি করা
# main.py
from playwright.sync_api import sync_playwright
def run():
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto("https://www.google.com")
page.fill("input[name='q']", "prime minister in bd")
page.keyboard.press("Enter")
page.wait_for_timeout(3000)
print("🔍 Page Title:", page.title())
browser.close()
if __name__ == "__main__":
run()
এই কোডটা Google এ গিয়ে “prime minister in bd” সার্চ করে Page Title প্রিন্ট করবে।
✅ Step 7: requirements.txt তৈরি করা
pip freeze > requirements.txt
এটা সমস্ত ইনস্টলকৃত লাইব্রেরি লিস্ট করবে, যেমন
playwright==1.x.xইত্যাদি।
এই ফাইল পরে VPS-এ ইনস্টল করার সময় কাজে লাগবে।
✅ Step 8: .gitignore, .env, README.md ফাইল তৈরি করা
🔹 .gitignore:
__pycache__/
*.pyc
venv/
.env
🔹 .env (optional):
BOT_QUERY=prime minister in bd
🔹 README.md:
# Google Search Bot
A simple Python bot that uses Playwright to search Google and print the result page title.
✅ Step 9: Git Init এবং Commit করা
git init
git add .
git commit -m "Initial bot setup"
তোমার প্রজেক্ট git repo হিসেবে তৈরি হলো।
✅ Step 10: GitHub Repo তৈরি করে push করা
git remote add origin https://github.com/yourusername/googlebot.git
git push -u origin main
GitHub এ repo তৈরি করে URL কপি করে
originহিসেবে যোগ করো।
✅ শেষ টেস্ট:
python main.py
যদি
🔍 Page Title:এর মত output আসে, তাহলে সব ঠিক!
⚙️ Part 2 (Updated): VPS Server Setup for Python Bot Deployment (Using python3 only)
🎯 লক্ষ্য: VPS-এ Python 3 ও Pip 3 ব্যবহার করে bot deployment environment তৈরি করা
✅ Step 2.1: VPS-এ SSH দিয়ে লগইন
ssh root@your-vps-ip
উদাহরণ:
ssh root@217.65.145.29
✅ Step 2.2: সার্ভার আপডেট ও Python 3 related প্যাকেজ ইনস্টল
sudo apt update && sudo apt upgrade -y
sudo apt install python3 python3-venv python3-pip git curl -y
✅ Step 2.3: Node.js ইনস্টল (PM2 ব্যবহারের জন্য ভবিষ্যতের জন্য এখনই করো)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs
✅ Step 2.4: GitHub থেকে কোড ক্লোন করা
cd ~
git clone https://github.com/yourusername/googlebot.git
cd googlebot
তুমি চাইলে SSH দিয়ে
git@github.com:ফরম্যাটেও ক্লোন করতে পারো যদি VPS-এ SSH key configure করা থাকে।
✅ Step 2.5: Python 3 virtualenv তৈরি ও অ্যাক্টিভ
python3 -m venv venv
source venv/bin/activate
✅ Step 2.6: requirements.txt থেকে লাইব্রেরি ইনস্টল
pip3 install --upgrade pip
pip3 install -r requirements.txt
Playwright থাকলে এই কমান্ডও চালাও:
python3 -m playwright install
✅ Step 2.7: Bot রান করে টেস্ট করা
python3 main.py
যদি
🔍 Page Title:প্রিন্ট হয় তাহলে সবকিছু ঠিকমতো কাজ করছে।
✅ এই Part শেষে তুমি যেটা পাচ্ছো:
- Python 3, pip3, virtualenv, Git, Node.js ইনস্টল ✅
- Bot প্রজেক্ট GitHub থেকে pull ✅
- Virtualenv সহ dependency install ✅
- Bot চালু ও কাজ করছে ✅
এখানে থাকছে পুরো Part 3 সফটওয়্যার ইঞ্জিনিয়ার লেভেলের breakdown সহ।
🚀 Part 3 (Updated): PM2 দিয়ে Python Bot 24/7 চালানো — একদম স্ক্র্যাচ থেকে
🎯 লক্ষ্য: PM2 দিয়ে Python bot সারাক্ষণ চালানো, multiple bot without conflict, auto restart, log সহ।
✅ Step 3.1: PM2 ইনস্টল করা (প্রথমবার একবারই লাগবে)
sudo npm install -g pm2
👉 ইনস্টল চেক:
pm2 -v
✅ Step 3.2: Python Virtualenv লোকেশন বের করা (interpreter path)
তুমি যেখানে virtualenv করেছো সেখানে যাও:
cd ~/googlebot
তারপর দেখো Python কোথায় আছে:
which python3
কিংবা যদি virtualenv অ্যাক্টিভ করা থাকে:
source venv/bin/activate
which python
✅ Output হবে এরকম:
/root/googlebot/venv/bin/python
এটাই তোমার --interpreter path হবে।
✅ Step 3.3: PM2 দিয়ে Bot চালানো (conflict-free)
Example 1: একটাই bot
pm2 start main.py \
--name=googlebot \
--interpreter=/root/googlebot/venv/bin/python
✅ যদি multiple bot থাকে (like sendbot.py, schedulebot.py, dailybot.py)
pm2 start sendbot.py \
--name=sendbot \
--interpreter=/root/googlebot/venv/bin/python
pm2 start schedulebot.py \
--name=scheduler \
--interpreter=/root/googlebot/venv/bin/python
pm2 start dailybot.py \
--name=daily \
--interpreter=/root/googlebot/venv/bin/python
প্রত্যেকটার
--nameআলাদা রাখতে হবে ✅
interpreter same থাকলেও কোনো conflict হবে না ✅
✅ Step 3.4: PM2 Process Status দেখা
pm2 list
✅ Output:
┌────┬────────────┬────────────┬────┬────────┬────────┐
│ id │ name │ script │... │ status │ memory │
├────┼────────────┼────────────┼────┼────────┼────────┤
│ 0 │ googlebot │ main.py │... │ online │ ... │
│ 1 │ sendbot │ sendbot.py │... │ online │ ... │
│ 2 │ daily │ dailybot.py│... │ online │ ... │
└────┴────────────┴────────────┴────┴────────┴────────┘
✅ Step 3.5: Log দেখা & মনিটর করা
pm2 logs googlebot
pm2 logs sendbot
pm2 logs all
প্রতিটি bot আলাদা log stream রাখে, তুমি চাইলে log ফাইলে redirect করে রাখতে পারো
--logফ্ল্যাগ দিয়ে।
✅ Step 3.6: Server Reboot হলেও bot Auto Start
pm2 startup
📌 এক লাইনের একটি কমান্ড আসবে (যেমন sudo env PATH=...), সেটি কপি করে রান করো।
তারপর:
pm2 save
✅ এখন VPS রিবুট হলেও bot চালু থাকবে।
✅ Step 3.7: Restart / Stop / Delete
pm2 restart googlebot
pm2 stop sendbot
pm2 delete daily
🧠 টিপস:
| দরকার | কমান্ড |
|---|---|
| সবগুলো দেখো | pm2 list |
| নির্দিষ্ট bot log | pm2 logs botname |
| সবগুলো bot log | pm2 logs |
| শুধু Error log | pm2 logs --err |
✅ এই Part শেষে তুমি যা পারবে:
✅ একাধিক bot (Python script) আলাদা আলাদা নামে ২৪/৭ চালাতে
✅ Virtualenv এর interpreter দিয়ে isolate করে রাখতে
✅ Log দেখতে, restart দিতে, reboot হলে auto-start করতে
🔄 Part 4: GitHub Actions CI/CD Automation (Pro Engineer-Level Breakdown)
🎯 লক্ষ্য:
GitHub → Push করলে → VPS-এ SSH Login হবে → কোড pull হবে → requirements ইনস্টল হবে → PM2 দিয়ে restart হবে।
🧱 Step-by-Step Breakdown
✅ Step 4.1: GitHub Repo তে .github/workflows/deploy.yml তৈরি করা
👉 Folder বানাও (Windows):
mkdir -p .github/workflows
👉 ফাইল তৈরি করো:
notepad .github\workflows\deploy.yml
✅ Step 4.2: GitHub Secrets সেট করা
GitHub Repo → Settings → Secrets and variables → Actions → New repository secret
তুমি নিচের ৩টি Secret দেবে:
| Name | Description |
|---|---|
VPS_HOST | তোমার VPS এর IP Address (e.g. 217.x.x.x) |
VPS_USER | সাধারণত root |
VPS_KEY | তোমার private SSH key (id_rsa) content |
📌 .ssh/id_rsa content Windows CMD থেকে দেখতে:
type C:\Users\yourusername\.ssh\id_rsa
✅ Step 4.3: Deploy YAML ফাইল লিখো (Full File)
name: Deploy Python Bot to VPS
on:
push:
branches:
- main
jobs:
deploy:
name: Deploy via SSH
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@v3
- name: SSH into VPS and Deploy Bot
uses: appleboy/ssh-action@v0.1.10
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USER }}
key: ${{ secrets.VPS_KEY }}
port: 22
script: |
echo "🔐 Connecting to VPS..."
cd ~/googlebot
echo "🔄 Pulling latest code..."
git pull origin main
echo "🐍 Activating venv..."
source venv/bin/activate
echo "📦 Installing dependencies..."
pip install -r requirements.txt
echo "🚀 Restarting bot via PM2..."
pm2 restart googlebot
🧠 ইঞ্জিনিয়ার লেভেল বিশ্লেষণ:
| YAML Key | কাজ |
|---|---|
on.push.branches | main branch-এ push হলেই ট্রিগার |
runs-on | GitHub এর virtual machine কোন OS চালাবে |
uses: actions/checkout | Repo-এর কোড clone করবে runner-এ |
appleboy/ssh-action | GitHub থেকে VPS-এ SSH login করে command চালায় |
script: | VPS-এ যে command গুলো SSH হয়ে রান হবে |
✅ Step 4.4: Commit and Push
git add .github/workflows/deploy.yml
git commit -m "CI/CD: Auto deploy setup"
git push origin main
✅ Step 4.5: Check GitHub Actions রান করছে কিনা
- GitHub → Repo → Actions tab-এ যাও
- দেখো নতুন
Deploy Python Bot to VPSরান শুরু হয়েছে কিনা - ✅ হলে সফল
- ❌ হলে log খুলে দেখো কোথায় issue
🔐 Bonus: SSH Debugging টিপস
- If permission denied: SSH key ঠিকমতো GitHub Secrets এ paste হয়েছে কি না চেক করো
- যদি GitHub কোড pull করতে পারে না: VPS এ repo
originঠিক আছে কি না চেক করো - যদি
pm2 restartকাজ না করে: PM2 নাম ঠিক আছে (pm2 listদিয়ে চেক)
✅ এই Part শেষে তুমি যা পারো:
| কাজ | নিশ্চিত |
|---|---|
| GitHub এ push → VPS এ deploy | ✅ |
| SSH Key নিরাপদভাবে ব্যবহার | ✅ |
| কোড pull + pip install + pm2 restart | ✅ |
| Logging এবং Debugging | ✅ |
Gunicorn দিয়ে Flask/FastAPI bot deploy করা এবং PM2 বা systemd দিয়ে serve করার জন্য।
তুমি যদি API-based bot বানাও, বলো: “Part 5 দাও” — আমি Gunicorn সহ full system দিচ্ছি।
🧰 Part 5 (from scratch): Django Deployment with Gunicorn + PM2 (Pro-Ready)
🔧 Step 5.1: Django Project VPS-এ ক্লোন করা
cd ~
git clone https://github.com/yourusername/your-django-repo.git
cd your-django-repo
🎯 ধরো project folder name: myproject/
🎯 Django config folder: myproject/settings.py, myproject/wsgi.py
🐍 Step 5.2: Python virtualenv তৈরি ও অ্যাক্টিভেট
python3 -m venv venv
source venv/bin/activate
📦 Step 5.3: Requirements Install করা
pip install --upgrade pip
pip install -r requirements.txt
✅ যদি Gunicorn নাই থাকে:
pip install gunicorn
🧹 Step 5.4: Static Files সংগ্রহ করা
python manage.py collectstatic --noinput
settings.py তে ensure করো:
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
⚙️ Step 5.5: Django Settings for Production
settings.py:
DEBUG = False
ALLOWED_HOSTS = ['your-vps-ip', 'yourdomain.com']
👉 যদি .env ইউজ করো, SECRET_KEY সেখান থেকে load করো
🚀 Step 5.6: Gunicorn দিয়ে Run Test (manual)
gunicorn --workers 3 --bind 0.0.0.0:8000 myproject.wsgi:application
✅ Test: VPS browser → http://your-vps-ip:8000
✅ Success হলে: CTRL + C দিয়ে বন্ধ করো
তুমি একদম ঠিক ধরেছো ✅ — যদি তুমি Gunicorn দিয়ে কোনো port (যেমন 0.0.0.0:8003) এ externally bind করো,
এবং তুমি VPS এর firewall চালু (secure) রাখতে চাও, তাহলে ufw (Uncomplicated Firewall) configure করা একদম প্রয়োজনীয়।
🔐 তুমি যা বলছো:
এই কমান্ড Gunicorn কে 8000 port-এ publicly bind করে দেয়।
এই port firewall দিয়ে allow না করলে external browser থেকে open হবে না।
🔹 Step 1: UFW install & enable (যদি আগে না করো)
sudo apt install ufw -y
sudo ufw allow OpenSSH
sudo ufw enable
🔹 Step 2: Gunicorn এর port (8003) allow করো
sudo ufw allow 8000
🔹 Step 3: Check করতে
sudo ufw status
Output হবে এরকম:
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
8001 ALLOW Anywhere
8002 ALLOW Anywhere
8003 ALLOW Anywhere
🧠 Bonus: Security Best Practice
| Port | Recommendation |
|---|---|
| 8000–8999 | Temporary only for dev/test |
| 80/443 | Use in production (via Nginx) |
0.0.0.0 | Open to world |
127.0.0.1 | Only accessible by Nginx (safe) |
✅ তাই production এ আমরা Gunicorn কে 127.0.0.1:8003 bind করে Nginx দিয়ে serve করি (Port 80/443),
আর development বা testing purpose এ 0.0.0.0 দিয়ে port firewall এর মাধ্যমে allow করি।
- তুমি যদি Gunicorn সরাসরি ব্যবহার করো, তাহলে
ufw allow portকরা লাগবেই - আর যদি Nginx দিয়ে serve করো, তাহলে Gunicorn
127.0.0.1-এ bind করে public port only Nginx-এ ছাড়ো
🔁 Step 5.7: PM2 দিয়ে Gunicorn কে Always ON করো
pm2 start "gunicorn --workers 3 --bind 0.0.0.0:8000 myproject.wsgi:application" \
--name mydjangoapp \
--interpreter=venv/bin/python
💾 Step 5.8: PM2 Startup Enable + Save
pm2 startup
pm2 save
🔁 VPS রিবুট হলেও Django app চালু থাকবে।
🧪 Step 5.9: PM2 Logs ও Control
pm2 list
pm2 logs mydjangoapp
pm2 restart mydjangoapp
pm2 stop mydjangoapp
🧠 Bonus (Optional):
| কাজ | কমান্ড |
|---|---|
| Gunicorn with log | --access-logfile logs/access.log --error-logfile logs/error.log |
| Worker tuning | --workers $(nproc) |
| Serve on port 9000 | --bind 0.0.0.0:9000 |
✅ তোমার ফুল Deployment Stack এখন দাঁড়াল:
| উপাদান | কাজ |
|---|---|
| GitHub → VPS | কোড হোস্টিং ও ক্লোন |
| Python 3 + venv | isolate environment |
| Gunicorn | WSGI HTTP Server |
| PM2 | 24/7 runtime & monitoring |
collectstatic | static file serve |
| DEBUG=False | safe production |
✅ তুমি এখন সম্পূর্ণভাবে Django project Gunicorn + PM2 দিয়ে live চালাতে পারো।
অসাধারণ! এখন তুমি চলে এসেছো শেষের দিকে, যেখানে আমরা Django App-কে Gunicorn দিয়ে serve করার পর, সেটাকে public web এর সামনে Nginx দিয়ে proxy করব — যেন সেটা Domain name বা SSL সহ accessible হয়।
এটাই হবে:
🛡️ Part 6: Nginx Integration with Gunicorn for Django (Software Engineer Level Breakdown)
🎯 লক্ষ্য: Gunicorn-এ চলা Django app কে Nginx দিয়ে public port (80, 443) থেকে serve করা, with static files, SSL-ready & production-configured.
✅ Full Breakdown
🧩 Step 6.1: Nginx ইনস্টল করা (VPS এ)
sudo apt update
sudo apt install nginx -y
✅ চেক করো Nginx চলছে কি না:
sudo systemctl status nginx
যদি না চলে থাকে:
sudo systemctl start nginx
🌐 Step 6.2: Gunicorn কে internal port (8000) এ চালু রাখা
তোমার আগের কমান্ড:
pm2 start "gunicorn --workers 3 --bind 127.0.0.1:8000 myproject.wsgi:application" \
--name mydjangoapp \
--interpreter=venv/bin/python
📌 Note:
- bind address এখন 127.0.0.1 = শুধু internal-accessible
- Nginx এটা কে proxy করবে
📁 Step 6.3: Static File Serve করার জন্য Django config নিশ্চিত করা
settings.py:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
Collect করো:
python manage.py collectstatic --noinput
🧾 Step 6.4: Nginx Configuration ফাইল তৈরি করা
sudo nano /etc/nginx/sites-available/myproject
এখানে নিচের মতো কনফিগ দাও:
server {
listen 80;
server_name yourdomain.com your-vps-ip;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /root/myproject; # static ফোল্ডার যেখানে collect হয়েছে
}
location / {
include proxy_params;
proxy_pass http://127.0.0.1:8000;
}
}
✅ Change করো:
yourdomain.com= তোমার domain (না থাকলে IP)root /root/myproject= Django static ফোল্ডারের path
🔗 Step 6.5: Config Enable করা এবং Default Disable
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
🔍 Step 6.6: Config Check এবং Restart
sudo nginx -t
sudo systemctl restart nginx
🌍 Step 6.7: ব্রাউজারে ওপেন করো
http://yourdomain.com
অথবা
http://your-vps-ip
✅ এখন তুমি Gunicorn কে Nginx এর মাধ্যমে serve করতে পারো port 80 থেকে 🎉
🔐 Optional Step 6.8: Free SSL with Let’s Encrypt
Install certbot:
sudo apt install certbot python3-certbot-nginx -y
SSL Setup:
sudo certbot --nginx -d yourdomain.com
✅ এখন:
- HTTPS enabled
- Auto renewal config হয়ে যাবে
🧠 Engineer-Level Tips
| বিষয় | সুপারিশ |
|---|---|
| HTTPS only | server { listen 443 ssl; } enforced |
| Gunicorn reload | Add --reload for dev (production-এ না) |
| Load balancing | Nginx multiple proxy_pass for gunicorn upstream |
| Static/media separation | Static serve via Nginx, Media via S3 or local with proper MEDIA_URL |
| Gzip, Caching | Add gzip on; expires headers in Nginx for performance |
✅ এই Part শেষে তুমি যা পেলা:
| Feature | Done |
|---|---|
| Nginx config | ✅ |
| Static file serve | ✅ |
| Gunicorn internal proxy | ✅ |
| Public domain / IP থেকে access | ✅ |
| SSL ready | ✅ |
না ভাই, আমি একদম ঠিক আছি 😊 — আর এখন আমি তোমার কথা পুরোপুরি পরিষ্কারভাবে বুঝে ফেলেছি:
🔥 তুমি চাও:
একটা VPS-এ ৩টি আলাদা Django ওয়েবসাইট,
প্রত্যেকটা চালবে:
- আলাদা ফোল্ডারে
- আলাদা virtualenv-এ
- আলাদা Gunicorn instance-এ
- আলাদা domain দিয়ে
- একে অপরের সাথে কোনো dependency conflict হবে না ✅
✅ এখন তোমাকে দিচ্ছি একদম Software Engineer লেভেলের Full Breakdown
🧱 স্ট্রাকচার প্ল্যান (VPS ফোল্ডার লেভেলে)
/root/
├── site1/
│ ├── venv/ ← site1 এর own virtualenv
│ ├── manage.py
│ ├── mysite1/
│ └── static/
├── site2/
│ ├── venv/ ← site2 এর own virtualenv
│ ├── manage.py
│ ├── mysite2/
│ └── static/
├── site3/
│ ├── venv/ ← site3 এর own virtualenv
│ ├── manage.py
│ ├── mysite3/
│ └── static/
🧰 Step-by-Step Setup for 3 Django Projects (Each with Different Virtualenv)
🔁 Repeat this setup for each site:
✅ Step 1: Clone each Django repo to its own folder
cd /root
git clone https://github.com/you/site1.git
git clone https://github.com/you/site2.git
git clone https://github.com/you/site3.git
✅ Step 2: Create separate virtualenvs
# For site1
cd /root/site1
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python manage.py collectstatic --noinput
deactivate
# For site2
cd /root/site2
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python manage.py collectstatic --noinput
deactivate
# For site3
cd /root/site3
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python manage.py collectstatic --noinput
deactivate
✅ Step 3: Run each app on different port via PM2 + Gunicorn (with its own venv)
# Site 1
pm2 start "gunicorn --workers 3 --bind 127.0.0.1:8001 mysite1.wsgi:application" \
--name site1 \
--interpreter=/root/site1/venv/bin/python
# Site 2
pm2 start "gunicorn --workers 3 --bind 127.0.0.1:8002 mysite2.wsgi:application" \
--name site2 \
--interpreter=/root/site2/venv/bin/python
# Site 3
pm2 start "gunicorn --workers 3 --bind 127.0.0.1:8003 mysite3.wsgi:application" \
--name site3 \
--interpreter=/root/site3/venv/bin/python
✅ Step 4: Create separate Nginx config files
sudo nano /etc/nginx/sites-available/site1
server {
listen 80;
server_name site1.com;
location /static/ {
root /root/site1;
}
location / {
include proxy_params;
proxy_pass http://127.0.0.1:8001;
}
}
Repeat for site2.com, site3.com, port 8002, 8003 accordingly.
✅ Step 5: Enable configs + restart nginx
sudo ln -s /etc/nginx/sites-available/site1 /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site2 /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site3 /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
✅ Step 6: SSL (Let’s Encrypt — Optional)
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d site1.com
sudo certbot --nginx -d site2.com
sudo certbot --nginx -d site3.com
🧠 Engineer-Level Summary
| Django Project | Virtualenv Path | Port | Gunicorn Bind | Domain |
|---|---|---|---|---|
| site1 | /root/site1/venv/ | 8001 | 127.0.0.1:8001 | site1.com |
| site2 | /root/site2/venv/ | 8002 | 127.0.0.1:8002 | site2.com |
| site3 | /root/site3/venv/ | 8003 | 127.0.0.1:8003 | site3.com |
✅ No dependency conflict
✅ Separate project control
✅ SSL & domain independent
🔚 তুমি এখন পারো:
- এক VPS এ ৩ Django site চালাতে
- আলাদা virtualenv দিয়ে isolate রাখতে
- আলাদা port + Gunicorn instance দিয়ে serve করতে
- Alada Nginx config দিয়ে domain map করতে
তুমি চাইলে আমি পুরো config ফাইল প্যাকেজ করে সাজিয়ে দিতে পারি, including .env, .service, .logrotate, etc.
বল — আমি করে দেই এখনই।