|
|
#!/bin/bash |
|
|
|
|
|
set -e |
|
|
|
|
|
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
|
|
VENV_DIR="$PROJECT_DIR/.venv" |
|
|
FRONTEND_DIR="$PROJECT_DIR/frontend" |
|
|
|
|
|
echo "🔧 Preparando entorno para Llama Dev Suite PRO v5 (modo completo)..." |
|
|
|
|
|
if [ ! -d "$VENV_DIR" ]; then |
|
|
echo "📦 Creando entorno virtual en $VENV_DIR" |
|
|
python3 -m venv "$VENV_DIR" |
|
|
fi |
|
|
|
|
|
source "$VENV_DIR/bin/activate" |
|
|
|
|
|
echo "📚 Instalando dependencias Python (FastAPI, Gradio, etc.)" |
|
|
pip install -r "$PROJECT_DIR/requirements.txt" |
|
|
|
|
|
hash -r 2>/dev/null || true |
|
|
NPM_BIN="$(command -v npm 2>/dev/null || true)" |
|
|
|
|
|
if [ -z "$NPM_BIN" ] && [ -x "/usr/bin/npm" ]; then |
|
|
NPM_BIN="/usr/bin/npm" |
|
|
fi |
|
|
|
|
|
if [ -z "$NPM_BIN" ] && [ -x "/usr/local/bin/npm" ]; then |
|
|
NPM_BIN="/usr/local/bin/npm" |
|
|
fi |
|
|
|
|
|
if [ -z "$NPM_BIN" ] && [ -x "/snap/bin/npm" ]; then |
|
|
NPM_BIN="/snap/bin/npm" |
|
|
fi |
|
|
|
|
|
if [ -z "$NPM_BIN" ]; then |
|
|
if [ -s "$HOME/.nvm/nvm.sh" ]; then |
|
|
echo "ℹ️ Detectado nvm — cargándolo para exponer npm..." |
|
|
export NVM_DIR="$HOME/.nvm" |
|
|
|
|
|
. "$NVM_DIR/nvm.sh" |
|
|
hash -r 2>/dev/null || true |
|
|
NPM_BIN="$(command -v npm 2>/dev/null || true)" |
|
|
fi |
|
|
fi |
|
|
|
|
|
if [ -z "$NPM_BIN" ]; then |
|
|
echo "❌ npm no está disponible en el PATH actual." |
|
|
echo " PATH=$PATH" |
|
|
if [ -x "/usr/lib/node_modules/npm/bin/npm-cli.js" ]; then |
|
|
echo " ⚠️ npm-cli.js encontrado pero falta ejecutable 'npm'." |
|
|
fi |
|
|
echo " Verifica que Node.js esté instalado y que el comando 'npm' esté en tu PATH." |
|
|
echo " Sugerencias:" |
|
|
echo " - Linux: reinstala con 'sudo apt install nodejs npm' o usa nvm" |
|
|
echo " - macOS: 'brew install node'" |
|
|
echo " - Windows: https://nodejs.org/" |
|
|
echo " Luego vuelve a ejecutar ./start_full.sh" |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
echo "🔍 npm detectado en: $NPM_BIN" |
|
|
|
|
|
if [ ! -d "$FRONTEND_DIR/node_modules" ]; then |
|
|
echo "📦 Instalando dependencias de frontend (npm install)" |
|
|
(cd "$FRONTEND_DIR" && "$NPM_BIN" install) |
|
|
fi |
|
|
|
|
|
cleanup() { |
|
|
echo -e "\n🧹 Deteniendo servicios..." |
|
|
if [ -n "$BACKEND_PID" ] && kill -0 "$BACKEND_PID" 2>/dev/null; then |
|
|
kill "$BACKEND_PID" 2>/dev/null || true |
|
|
fi |
|
|
if [ -n "$FRONTEND_PID" ] && kill -0 "$FRONTEND_PID" 2>/dev/null; then |
|
|
kill "$FRONTEND_PID" 2>/dev/null || true |
|
|
fi |
|
|
wait || true |
|
|
echo "✅ Servicios detenidos." |
|
|
} |
|
|
|
|
|
trap cleanup EXIT |
|
|
|
|
|
echo "🚀 Iniciando backend FastAPI en http://127.0.0.1:8000" |
|
|
"$VENV_DIR/bin/uvicorn" backend.main:app --host 127.0.0.1 --port 8000 --reload & |
|
|
BACKEND_PID=$! |
|
|
|
|
|
echo "🎨 Iniciando frontend React en http://127.0.0.1:5173" |
|
|
(cd "$FRONTEND_DIR" && "$NPM_BIN" run dev -- --host 127.0.0.1 --port 5173) & |
|
|
FRONTEND_PID=$! |
|
|
|
|
|
echo "" |
|
|
echo "🟢 Todo listo. Abre http://127.0.0.1:5173 para usar la app completa." |
|
|
echo "ℹ️ Mantén esta ventana abierta. Pulsa Ctrl+C para detener ambos servicios." |
|
|
|
|
|
wait |
|
|
|