dev.sh
This commit is contained in:
135
dev.sh
Executable file
135
dev.sh
Executable file
@@ -0,0 +1,135 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# MTCBD – Multi-Tenant Cloud Based Dashboard
|
||||||
|
# Development Startup Script
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
VENV_DIR="$PROJECT_DIR/.venv"
|
||||||
|
BACKEND_DIR="$PROJECT_DIR/backend"
|
||||||
|
FRONTEND_DIR="$PROJECT_DIR/frontend"
|
||||||
|
|
||||||
|
BACKEND_PID=""
|
||||||
|
FRONTEND_SKIP=true # Frontend disabled by default, run manually when needed
|
||||||
|
|
||||||
|
# ── Colours ──────────────────────────────────
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
RED='\033[0;31m'
|
||||||
|
CYAN='\033[0;36m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
# ── Cleanup on Ctrl+C / exit ─────────────────
|
||||||
|
cleanup() {
|
||||||
|
echo ""
|
||||||
|
echo -e "${YELLOW} Shutting down servers...${NC}"
|
||||||
|
[ -n "$BACKEND_PID" ] && kill "$BACKEND_PID" 2>/dev/null
|
||||||
|
[ -n "$FRONTEND_PID" ] && kill "$FRONTEND_PID" 2>/dev/null
|
||||||
|
wait 2>/dev/null
|
||||||
|
echo -e "${GREEN} All servers stopped.${NC}"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
trap cleanup INT TERM EXIT
|
||||||
|
|
||||||
|
# ── Banner ────────────────────────────────────
|
||||||
|
echo -e "${CYAN}"
|
||||||
|
echo " ███╗ ███╗████████╗ ██████╗██████╗ ██████╗ "
|
||||||
|
echo " ████╗ ████║╚══██╔══╝██╔════╝██╔══██╗██╔══██╗"
|
||||||
|
echo " ██╔████╔██║ ██║ ██║ ██████╔╝██║ ██║"
|
||||||
|
echo " ██║╚██╔╝██║ ██║ ██║ ██╔══██╗██║ ██║"
|
||||||
|
echo " ██║ ╚═╝ ██║ ██║ ╚██████╗██████╔╝██████╔╝"
|
||||||
|
echo " ╚═╝ ╚═╝ ╚═╝ ╚═════╝╚═════╝ ╚═════╝ "
|
||||||
|
echo -e " Multi-Tenant Cloud Based Dashboard${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# ════════════════════════════════════════════════
|
||||||
|
# BACKEND SETUP
|
||||||
|
# ════════════════════════════════════════════════
|
||||||
|
|
||||||
|
# ── 1. Check / Create Virtual Environment ────
|
||||||
|
if [ ! -d "$VENV_DIR" ]; then
|
||||||
|
echo -e "${YELLOW}[1/6] Creating virtual environment...${NC}"
|
||||||
|
python3 -m venv "$VENV_DIR"
|
||||||
|
echo -e "${GREEN} ✓ Virtual environment created${NC}"
|
||||||
|
else
|
||||||
|
echo -e "${GREEN}[1/6] Virtual environment found${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ── 2. Activate Virtual Environment ──────────
|
||||||
|
echo -e "${YELLOW}[2/6] Activating virtual environment...${NC}"
|
||||||
|
source "$VENV_DIR/bin/activate"
|
||||||
|
echo -e "${GREEN} ✓ Activated: $VIRTUAL_ENV${NC}"
|
||||||
|
|
||||||
|
# ── 3. Install Python Dependencies ───────────
|
||||||
|
echo -e "${YELLOW}[3/6] Installing Python dependencies...${NC}"
|
||||||
|
pip install --upgrade pip --quiet
|
||||||
|
pip install -r "$PROJECT_DIR/requirements.txt" --quiet
|
||||||
|
echo -e "${GREEN} ✓ Dependencies installed${NC}"
|
||||||
|
|
||||||
|
# ── 4. Check .env File ───────────────────────
|
||||||
|
echo -e "${YELLOW}[4/6] Checking environment config...${NC}"
|
||||||
|
if [ ! -f "$PROJECT_DIR/.env" ]; then
|
||||||
|
echo -e "${RED} ⚠ No .env file found!${NC}"
|
||||||
|
if [ -f "$PROJECT_DIR/.env.example" ]; then
|
||||||
|
cp "$PROJECT_DIR/.env.example" "$PROJECT_DIR/.env"
|
||||||
|
echo -e "${YELLOW} ⚠ .env created from .env.example – fill in your secrets.${NC}"
|
||||||
|
else
|
||||||
|
echo -e "${RED} ✗ No .env.example either. Please create .env manually.${NC}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e "${GREEN} ✓ .env file found${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ── 5. Django Setup ───────────────────────────
|
||||||
|
echo -e "${YELLOW}[5/6] Running Django setup...${NC}"
|
||||||
|
if [ -d "$BACKEND_DIR" ]; then
|
||||||
|
(
|
||||||
|
cd "$BACKEND_DIR"
|
||||||
|
python manage.py collectstatic --noinput --quiet 2>/dev/null || true
|
||||||
|
python manage.py migrate --run-syncdb 2>/dev/null \
|
||||||
|
|| echo -e "${YELLOW} ⚠ Migrations skipped (DB may not be configured yet)${NC}"
|
||||||
|
)
|
||||||
|
echo -e "${GREEN} ✓ Django ready${NC}"
|
||||||
|
else
|
||||||
|
echo -e "${RED} ✗ backend/ directory not found${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ════════════════════════════════════════════════
|
||||||
|
# FRONTEND SETUP (SKIPPED)
|
||||||
|
# ════════════════════════════════════════════════
|
||||||
|
# Frontend is not started automatically. To run it manually:
|
||||||
|
# cd frontend && npm run dev
|
||||||
|
# FRONTEND_SKIP is set to true above to skip frontend launch.
|
||||||
|
|
||||||
|
# ════════════════════════════════════════════════
|
||||||
|
# LAUNCH BOTH SERVERS
|
||||||
|
# ════════════════════════════════════════════════
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${GREEN}════════════════════════════════════════════════════${NC}"
|
||||||
|
echo -e "${GREEN} Starting MTCBD Development Servers ${NC}"
|
||||||
|
echo -e "${GREEN} ${NC}"
|
||||||
|
echo -e "${GREEN} Backend → http://127.0.0.1:8000 ${NC}"
|
||||||
|
echo -e "${YELLOW} Frontend → (not started, run manually: cd frontend && npm run dev)${NC}"
|
||||||
|
echo -e "${GREEN} ${NC}"
|
||||||
|
echo -e "${YELLOW} Press Ctrl+C to stop all servers ${NC}"
|
||||||
|
echo -e "${GREEN}════════════════════════════════════════════════════${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# ── Start Backend ─────────────────────────────
|
||||||
|
(
|
||||||
|
source "$VENV_DIR/bin/activate"
|
||||||
|
cd "$BACKEND_DIR"
|
||||||
|
python manage.py runserver 2>&1 | while IFS= read -r line; do
|
||||||
|
echo -e "${GREEN}[BACKEND] ${NC} $line"
|
||||||
|
done
|
||||||
|
) &
|
||||||
|
BACKEND_PID=$!
|
||||||
|
|
||||||
|
# ── Start Frontend ────────────────────────────
|
||||||
|
# Skipped - start manually when needed
|
||||||
|
|
||||||
|
# ── Wait (keeps script alive until Ctrl+C) ────
|
||||||
|
wait
|
||||||
Reference in New Issue
Block a user