diff --git a/desplegar.sh b/desplegar.sh new file mode 100755 index 0000000..666d17a --- /dev/null +++ b/desplegar.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# Colores para la terminal +VERDE='\033[0;32m' +AZUL='\033[0;34m' +AMARILLO='\033[1;33m' +NC='\033[0m' # No Color + +echo -e "${AZUL}====================================================${NC}" +echo -e "${AZUL} S.I.P - Sistema de Identificación Papiloscópica ${NC}" +echo -e "${AZUL} Script de Despliegue y Sincronización ${NC}" +echo -e "${AZUL}====================================================${NC}" + +# 1. Detener contenedores previos y limpiar volúmenes huérfanos +echo -e "\n${AMARILLO}[1/4] Limpiando el entorno Docker anterior...${NC}" +docker compose down --remove-orphans + +# 2. Levantar los servicios en segundo plano (Backend, Frontend, Postgres) +echo -e "\n${AMARILLO}[2/4] Levantando contenedores en modo detached...${NC}" +docker compose up -d + +# Esperar unos segundos a que la base de datos PostgreSQL acepte conexiones +echo -e "${VERDE}Esperando que PostgreSQL inicialice correctamente...${NC}" +sleep 5 + +# 3. Ejecutar ciclo de migraciones del ORM en el Backend +echo -e "\n${AMARILLO}[3/4] Sincronizando estructura de base de datos...${NC}" + +# Verificar si la carpeta de migraciones ya existe en el contenedor +if docker exec huellas_api [ ! -d "migrations" ]; then + echo -e "${VERDE}-> Inicializando repositorio de Flask-Migrate...${NC}" + docker exec -it -e FLASK_APP=run.py huellas_api flask db init +fi + +echo -e "${VERDE}-> Generando script de migración para las tablas papiloscópicas...${NC}" +docker exec -it -e FLASK_APP=run.py huellas_api flask db migrate -m "migracion_sistema_papiloscopico" + +echo -e "${VERDE}-> Impactando esquema relacional en PostgreSQL...${NC}" +docker exec -it -e FLASK_APP=run.py huellas_api flask db upgrade + +# 4. Ejecutar sembrado de datos iniciales +echo -e "\n${AMARILLO}[4/4] Ejecutando Seeders de control...${NC}" +docker exec -it -e FLASK_APP=run.py huellas_api flask seed + +echo -e "\n${VERDE}====================================================${NC}" +echo -e "${VERDE} ¡PROCESO FINALIZADO CON ÉXITO! ${NC}" +echo -e "${VERDE} API escuchando, base de datos Postgres al día. ${NC}" +echo -e "${VERDE} Frontend listo en http://localhost:8080 ${NC}" +echo -e "${VERDE}====================================================${NC}" \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f701983 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,55 @@ +services: + db: + image: postgres:15-alpine + container_name: sip_db + restart: always + environment: + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + ports: + - "${POSTGRES_PORT}:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + networks: + - sip_network + + api: + build: ./api + container_name: sip_api + restart: always + volumes: + - ./api:/app + ports: + - "${FLASK_PORT}:5000" + environment: + - FLASK_ENV=${FLASK_ENV} + - DATABASE_URL=${DATABASE_URL} + - JWT_SECRET_KEY=${JWT_SECRET_KEY} + depends_on: + - db + networks: + - sip_network + + frontend: + build: ./frontend + container_name: sip_front + restart: always + volumes: + - ./frontend:/app + - /app/node_modules + ports: + - "${VITE_PORT}:8080" + environment: + - VITE_API_BASE_URL=${VITE_API_BASE_URL} + depends_on: + - api + networks: + - sip_network + +volumes: + postgres_data: + +networks: + sip_network: + driver: bridge \ No newline at end of file