136 lines
6.5 KiB
Bash
Executable File
136 lines
6.5 KiB
Bash
Executable File
#!/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
|