আমি ধরে নিচ্ছি:
- Domain: att.igenhr.com
- Repo: git@github.com:ibitltd/screen.git
- Email: ashik.mou.897@gmail.com
- OS: Ubuntu (aaPanel সহ)
🔴 COMPLETE END-TO-END CI/CD DEPLOYMENT GUIDE (ZERO MISSING STEPS)
🧩 PART 0 — Pre-checks (একবার দেখে নাও)
VPS-এ ঢুকে চালাও:
whoami
pwd
python3 --version
git --version
👉 নিশ্চিত হও Python 3, Git আছে।
🔐 PART 1 — SSH KEY SETUP (Scratch থেকে)
1️⃣ VPS-এ SSH key generate
ssh-keygen -t ed25519 -C "ashik.mou.897@gmail.com"
সব প্রশ্নে Enter চাপো।
2️⃣ Public key → GitHub (Authorization)
cat ~/.ssh/id_ed25519.pub
GitHub → Profile → Settings → SSH and GPG keys → New SSH key
- Title:
VPS - att.igenhr.com - Key: (paste)
- Save
3️⃣ Test connection
ssh -T git@github.com
Expected:
Hi your-username! You've successfully authenticated, but GitHub does not provide shell access.
❗ না এলে এখানেই থামো।
🌐 PART 2 — aaPanel Site Setup (One-time)
aaPanel → Website → Add Site
- Domain:
att.igenhr.com - Root directory:
/www/wwwroot/att.igenhr.com/public - PHP Version: None
Submit
👉 এতে .user.ini parent folder-এ থাকবে।
🛠 PART 3 — MANUAL DEPLOYMENT (সবচেয়ে গুরুত্বপূর্ণ অংশ)
3.1 Parent folder (এখানে .user.ini আছে — এটাকে ছুঁবো না)
cd /www/wwwroot/att.igenhr.com
3.2 public folder তৈরি + repo clone
mkdir -p public
cd public
git clone git@github.com:ibitltd/screen.git .
3.3 Virtual environment তৈরি + activate
python3 -m venv venv
source venv/bin/activate
3.4 pip upgrade + dependency install
pip install --upgrade pip setuptools wheel
pip install -r requirements.txt
pip install gunicorn
3.5 Django environment variables (যদি .env লাগে)
nano .env
উদাহরণ:
DEBUG=False
SECRET_KEY=your-secret-key
ALLOWED_HOSTS=att.igenhr.com,127.0.0.1,localhost
DATABASE_URL=...
3.6 Django migrations
python manage.py makemigrations
python manage.py migrate --noinput
3.7 Static files collect
python manage.py collectstatic --noinput
3.8 Gunicorn test run (foreground)
gunicorn config.wsgi:application --bind 127.0.0.1:8000 --workers 3 --timeout 120
Browser / curl:
curl http://127.0.0.1:8000
✔️ Django page আসলে Ctrl+C করে বন্ধ করো।
⚙️ PART 4 — SYSTEMD SERVICE (Permanent Run)
4.1 Service file তৈরি
sudo nano /etc/systemd/system/screen.service
Paste:
[Unit]
Description=Gunicorn for att.igenhr.com (Django)
After=network.target
[Service]
User=root
Group=root
WorkingDirectory=/www/wwwroot/att.igenhr.com/public
Environment="PATH=/www/wwwroot/att.igenhr.com/public/venv/bin"
ExecStart=/www/wwwroot/att.igenhr.com/public/venv/bin/gunicorn \
config.wsgi:application \
--workers 3 \
--bind 127.0.0.1:8000 \
--timeout 120 \
--access-logfile - \
--error-logfile -
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
4.2 Reload + enable + start
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable screen
sudo systemctl start screen
sudo systemctl status screen
✔️ Active (running) হলে OK।
🌍 PART 5 — aaPanel Reverse Proxy (Domain → Gunicorn)
aaPanel → Website → att.igenhr.com → Reverse Proxy → Add
- Proxy Name:
django-gunicorn - Target URL:
http://127.0.0.1:8000 - Enable: Yes
Save
👉 এখন:
https://att.igenhr.com
Django সাইট দেখা যাবে।
🔒 PART 6 — GitHub Actions-এর জন্য Private Key → Secrets
6.1 VPS থেকে private key কপি
cat ~/.ssh/id_ed25519
6.2 GitHub → Repo → Secrets
Repo → Settings → Secrets and variables → Actions → New repository secret
| Name | Value |
|---|---|
| SERVER_HOST | তোমার VPS IP বা domain |
| SERVER_USER | root |
| SERVER_SSH_KEY | পুরো private key paste |
🚀 PART 7 — GitHub Actions Workflow (CI/CD)
7.1 Workflow ফাইল তৈরি
mkdir -p .github/workflows
nano .github/workflows/deploy.yml
Paste:
name: Auto Deploy to aaPanel Server
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Deploy via SSH
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
port: 22
script: |
set -e
cd /www/wwwroot/att.igenhr.com/public
git fetch origin main
git reset --hard origin/main
source venv/bin/activate
pip install -r requirements.txt --no-cache-dir
python manage.py makemigrations
python manage.py migrate --noinput
python manage.py collectstatic --noinput
sudo systemctl restart screen
🧪 PART 8 — FINAL TEST (End-to-End)
git add .
git commit -m "test auto deploy"
git push origin main
GitHub → Actions → workflow run ✔️
Server:
sudo systemctl status screen
Browser:
https://att.igenhr.com
👉 নতুন code live হলে 🎉 CI/CD সম্পূর্ণ সফল।
🧠 FINAL CHECKLIST (একটাও বাদ নেই)
| ✔️ | ধাপ |
|---|---|
| SSH key generate | |
| Public key → GitHub | |
| SSH test | |
| aaPanel site create | |
| Manual deploy | |
| venv + pip | |
| .env config | |
| migrate + collectstatic | |
| gunicorn test | |
| systemd service | |
| reverse proxy | |
| private key → GitHub Secrets | |
| workflow file | |
| push → auto deploy test |
যদি তুমি চাও, আমি এই পুরোটা:
- 📄 PDF tutorial বানিয়ে দিতে পারি
- 🎥 ভিডিও স্ক্রিপ্ট বানিয়ে দিতে পারি
- বা তোমার server error log দিলে real-time debug করে দিতে পারি
বললেই হবে — আমি তোমার সাথে production পর্যন্ত নিয়ে যাবো।