-
Notifications
You must be signed in to change notification settings - Fork 63
Expand file tree
/
Copy pathsetup.sh
More file actions
executable file
·155 lines (140 loc) · 4.82 KB
/
setup.sh
File metadata and controls
executable file
·155 lines (140 loc) · 4.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#!/bin/bash
# ============================================================
# NexusRAG — Local Development Setup
# ============================================================
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$SCRIPT_DIR"
echo "============================================"
echo " NexusRAG — Local Development Setup"
echo "============================================"
echo ""
# -----------------------------------------------------------
# 1. Check prerequisites
# -----------------------------------------------------------
echo "[1/7] Checking prerequisites..."
# Python
if ! command -v python3 &>/dev/null; then
echo "ERROR: python3 not found. Install Python 3.10+ first."
exit 1
fi
PY_VERSION=$(python3 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
PY_MAJOR=$(echo "$PY_VERSION" | cut -d. -f1)
PY_MINOR=$(echo "$PY_VERSION" | cut -d. -f2)
if [ "$PY_MAJOR" -lt 3 ] || ([ "$PY_MAJOR" -eq 3 ] && [ "$PY_MINOR" -lt 10 ]); then
echo "ERROR: Python 3.10+ required (found $PY_VERSION)"
exit 1
fi
echo " Python $PY_VERSION"
# Node
if ! command -v node &>/dev/null; then
echo "ERROR: node not found. Install Node.js 18+ first."
exit 1
fi
NODE_MAJOR=$(node -v | sed 's/v//' | cut -d. -f1)
if [ "$NODE_MAJOR" -lt 18 ]; then
echo "ERROR: Node.js 18+ required (found $(node -v))"
exit 1
fi
echo " Node $(node -v)"
# pnpm
if ! command -v pnpm &>/dev/null; then
echo "ERROR: pnpm not found. Install: npm install -g pnpm"
exit 1
fi
echo " pnpm $(pnpm -v)"
# Docker (optional)
if command -v docker &>/dev/null; then
echo " Docker $(docker --version | cut -d' ' -f3 | tr -d ',')"
HAS_DOCKER=true
else
echo " Docker: not found (PostgreSQL + ChromaDB must be started manually)"
HAS_DOCKER=false
fi
echo ""
# -----------------------------------------------------------
# 2. Create Python virtual environment
# -----------------------------------------------------------
echo "[2/7] Setting up Python virtual environment..."
if [ ! -d "venv" ]; then
python3 -m venv venv
echo " Created venv/"
else
echo " venv/ already exists"
fi
source venv/bin/activate
# -----------------------------------------------------------
# 3. Install Python dependencies
# -----------------------------------------------------------
echo "[3/7] Installing Python dependencies..."
pip install -q --upgrade pip
pip install -q -r backend/requirements.txt
echo " Done."
# -----------------------------------------------------------
# 4. Create .env if not exists
# -----------------------------------------------------------
echo "[4/7] Checking .env configuration..."
if [ ! -f ".env" ]; then
cp .env.example .env
echo " Created .env from .env.example"
echo " >>> IMPORTANT: Edit .env and set GOOGLE_AI_API_KEY <<<"
else
echo " .env already exists"
fi
# -----------------------------------------------------------
# 5. Start services (Docker)
# -----------------------------------------------------------
echo "[5/7] Starting database services..."
if [ "$HAS_DOCKER" = true ]; then
docker compose -f docker-compose.services.yml up -d
echo " Waiting for PostgreSQL to be ready..."
for i in $(seq 1 30); do
if docker exec nexusrag-postgres pg_isready -U postgres &>/dev/null; then
echo " PostgreSQL ready."
break
fi
if [ "$i" -eq 30 ]; then
echo " WARNING: PostgreSQL not ready after 30s. Check docker logs."
fi
sleep 1
done
else
echo " Skipped (no Docker). Ensure PostgreSQL (port 5433) and ChromaDB (port 8002) are running."
fi
# -----------------------------------------------------------
# 6. Download ML models (optional)
# -----------------------------------------------------------
echo ""
echo "[6/7] ML models (~2.5GB total):"
echo " - BAAI/bge-m3 (embedding, ~1.4GB)"
echo " - BAAI/bge-reranker-v2-m3 (reranker, ~1.1GB)"
echo ""
read -p " Download models now? [y/N] " -n 1 -r
echo ""
if [[ $REPLY =~ ^[yY]$ ]]; then
echo " Downloading models (this may take a few minutes)..."
python backend/scripts/download_models.py
else
echo " Skipped. Models will be downloaded on first use."
fi
# -----------------------------------------------------------
# 7. Install frontend dependencies
# -----------------------------------------------------------
echo "[7/7] Installing frontend dependencies..."
cd frontend
pnpm install
cd ..
# -----------------------------------------------------------
# Done
# -----------------------------------------------------------
echo ""
echo "============================================"
echo " Setup Complete!"
echo "============================================"
echo ""
echo " Start backend: ./run_bk.sh"
echo " Start frontend: ./run_fe.sh"
echo " Open: http://localhost:5174"
echo ""
echo " Or use Docker: docker compose up -d"
echo ""