77 lines
3.1 KiB
Bash
Executable File
77 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
||
set -e
|
||
|
||
echo "🚀 Checking system configuration for Dataset Enrichment App..."
|
||
|
||
# Remove any old overrides so we start fresh
|
||
rm -f docker-compose.override.yml
|
||
|
||
# 1. Check for NVIDIA GPU
|
||
if command -v nvidia-smi &> /dev/null; then
|
||
echo "✅ NVIDIA GPU detected."
|
||
|
||
# 2. Docker Desktop ships its own GPU support; a native engine needs the NVIDIA Container Toolkit
|
||
if ! command -v nvidia-ctk &> /dev/null; then
|
||
if docker info --format '{{.Name}}' 2>/dev/null | grep -q docker-desktop; then
|
||
echo "🐳 Docker Desktop detected — GPU support is built in, no toolkit needed."
|
||
else
|
||
echo "⚠️ NVIDIA Container Toolkit is missing."
|
||
echo " Without it, Docker cannot access your GPU, and the app will run in CPU-only mode."
|
||
read -p "Would you like to install it automatically now? (requires sudo) [y/N] " install_choice
|
||
if [[ "$install_choice" =~ ^[Yy]$ ]]; then
|
||
echo "Installing NVIDIA Toolkit..."
|
||
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor --yes -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
|
||
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
|
||
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
|
||
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
|
||
sudo apt-get update
|
||
sudo apt-get install -y nvidia-container-toolkit
|
||
sudo nvidia-ctk runtime configure --runtime=docker
|
||
sudo systemctl restart docker
|
||
echo "✅ NVIDIA Toolkit installed successfully!"
|
||
else
|
||
echo "⚠️ Skipping installation. Proceeding without GPU support."
|
||
fi
|
||
fi
|
||
fi
|
||
|
||
echo "🔌 Enabling GPU support via docker-compose.override.yml..."
|
||
cat <<EOF > docker-compose.override.yml
|
||
services:
|
||
backend:
|
||
gpus: all
|
||
EOF
|
||
else
|
||
echo "ℹ️ No NVIDIA GPU detected. Running in CPU-only mode."
|
||
fi
|
||
|
||
if [ -f .env ]; then
|
||
export $(grep -v '^#' .env | xargs -d '\n')
|
||
fi
|
||
|
||
if docker info &> /dev/null; then
|
||
echo "📦 Starting containers..."
|
||
docker compose up -d --build
|
||
PORT=${WEB_PORT:-9000}
|
||
API_P=${API_PORT:-9010}
|
||
else
|
||
echo "⚠️ Docker is not accessible (or requires root permissions)."
|
||
echo "🚀 Starting app in local development mode..."
|
||
uv run uvicorn backend.main:app --host 0.0.0.0 --port 8000 &
|
||
npm --prefix frontend run dev -- --host 0.0.0.0 &
|
||
PORT=5173
|
||
API_P=8000
|
||
fi
|
||
|
||
# Get local IP for convenience
|
||
LOCAL_IP=$(hostname -I | awk '{print $1}' || echo "localhost")
|
||
|
||
echo ""
|
||
echo "=========================================================="
|
||
echo "✅ App is running!"
|
||
echo "🌐 Web Studio UI: http://localhost:$PORT (Network: http://$LOCAL_IP:$PORT)"
|
||
echo "📑 REST API Docs: http://localhost:$API_P/docs"
|
||
echo "🩺 Health Check: http://localhost:$API_P/api/health"
|
||
echo "=========================================================="
|
||
|