Django

⌘K
  1. Home
  2. Django
  3. cicd
  4. cicd with github action

cicd with github action

আমি ধরে নিচ্ছি:


🔴 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 keysNew 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

NameValue
SERVER_HOSTতোমার VPS IP বা domain
SERVER_USERroot
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 পর্যন্ত নিয়ে যাবো।

How can we help?