Files
erp-efintel-2026-portainer/start.sh
T

135 lines
5.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# ============================================================
# EFINTEL ERP Interno (Django) — Script de Arranque Local
# ============================================================
# Uso en Mac / Linux:
# chmod +x start.sh (solo la primera vez)
# ./start.sh
#
# Para detener: Ctrl+C
# ============================================================
set -e
# Colores
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
YELLOW='\033[1;33m'
BOLD='\033[1m'
NC='\033[0m'
echo ""
echo -e "${CYAN}${BOLD}╔══════════════════════════════════════════════════════╗${NC}"
echo -e "${CYAN}${BOLD}║ EFINTEL ERP Interno I+D+i — Django Server ║${NC}"
echo -e "${CYAN}${BOLD}║ Sistema de Control de Gastos & Proyectos ║${NC}"
echo -e "${CYAN}${BOLD}╚══════════════════════════════════════════════════════╝${NC}"
echo ""
# Cambiar al directorio del script
cd "$(dirname "$0")"
# ---- Paso 1: Verificar Python 3 ----
echo -e "${BLUE}[1/6]${NC} Verificando Python 3..."
if ! command -v python3 &> /dev/null; then
echo -e "${RED}❌ Python 3 no está instalado.${NC}"
echo ""
echo " Para instalar en macOS:"
echo " 1. Instala Homebrew:"
echo " /bin/bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\""
echo ""
echo " 2. Instala Python:"
echo " brew install python@3.12"
echo ""
exit 1
fi
PYTHON_VERSION=$(python3 --version 2>&1)
echo -e " ${GREEN}✅ ${PYTHON_VERSION}${NC}"
# ---- Paso 2: Crear venv si no existe o si es de otro OS ----
echo -e "${BLUE}[2/6]${NC} Verificando entorno virtual (venv)..."
NEEDS_VENV=false
if [ ! -d "venv" ]; then
NEEDS_VENV=true
echo -e " ${YELLOW}⚠ No existe venv, creando uno nuevo...${NC}"
elif [ ! -f "venv/bin/activate" ]; then
# venv corrupto o de Windows
NEEDS_VENV=true
echo -e " ${YELLOW}⚠ venv inválido detectado, recreando...${NC}"
rm -rf venv
fi
if [ "$NEEDS_VENV" = true ]; then
python3 -m venv venv
echo -e " ${GREEN}✅ venv creado exitosamente${NC}"
else
echo -e " ${GREEN}✅ venv ya existe${NC}"
fi
# ---- Paso 3: Activar venv ----
echo -e "${BLUE}[3/6]${NC} Activando entorno virtual..."
source venv/bin/activate
echo -e " ${GREEN}✅ venv activado ($(which python))${NC}"
# ---- Paso 4: Instalar dependencias ----
echo -e "${BLUE}[4/6]${NC} Instalando dependencias de Django..."
pip install --quiet --upgrade pip
pip install --quiet -r requirements.txt
echo -e " ${GREEN}✅ 29 paquetes instalados (Django 6.1, Channels, Daphne, etc.)${NC}"
# ---- Paso 5: Migraciones y datos iniciales ----
echo -e "${BLUE}[5/6]${NC} Configurando base de datos..."
# Ejecutar migraciones
python manage.py migrate --run-syncdb --verbosity 0
echo -e " ${GREEN}✅ Migraciones aplicadas${NC}"
# Crear roles y usuarios si no existen
if ! python -c "
import os, django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
django.setup()
from django.contrib.auth.models import User
exit(0 if User.objects.filter(username='admin').exists() else 1)
" 2>/dev/null; then
echo -e " ${YELLOW}⚠ Primera ejecución — creando usuarios y roles EFINTEL...${NC}"
python setup_roles.py
echo -e " ${GREEN}✅ Usuarios creados:${NC}"
echo -e " ${BOLD}admin${NC} / admin (Administrador)"
echo -e " ${BOLD}ginevra_ortega${NC} / ginevra123 (Administrador)"
echo -e " ${BOLD}finanzas${NC} / finanzas123 (Adm. Finanzas)"
echo -e " ${BOLD}miguel_contreras${NC} / miguel123 (Director Proyecto)"
else
echo -e " ${GREEN}✅ Usuarios ya configurados${NC}"
fi
# ---- Paso 6: Iniciar servidor ----
PORT=8000
URL="http://localhost:${PORT}"
echo ""
echo -e "${BLUE}[6/6]${NC} Iniciando servidor Django (Daphne)..."
echo ""
echo -e "${GREEN}${BOLD} ┌──────────────────────────────────────────────────────┐${NC}"
echo -e "${GREEN}${BOLD} │ 🚀 EFINTEL ERP corriendo en: ${URL} │${NC}"
echo -e "${GREEN}${BOLD} │ 🔑 Admin Django: ${URL}/admin/ │${NC}"
echo -e "${GREEN}${BOLD} │ 📋 Presiona Ctrl+C para detener │${NC}"
echo -e "${GREEN}${BOLD} └──────────────────────────────────────────────────────┘${NC}"
echo ""
echo -e "${CYAN} Cuentas de acceso:${NC}"
echo -e " admin / admin | finanzas / finanzas123"
echo -e " ginevra_ortega / ginevra123 | miguel_contreras / miguel123"
echo ""
# Abrir navegador automáticamente
if [[ "$OSTYPE" == "darwin"* ]]; then
sleep 2 && open "${URL}" &
elif command -v xdg-open &> /dev/null; then
sleep 2 && xdg-open "${URL}" &
fi
# Ejecutar con Daphne (ASGI server para WebSockets)
python -m daphne -b 0.0.0.0 -p ${PORT} config.asgi:application