Configuración de Desarrollo Local
Tabla de Contenidos
- Propósito
- ¿Para quién es esto?
- Prerrequisitos
- Inicio Rápido (Stack Completo con Docker)
- Configuración de Servicio Individual
- Verificación
- Solución de Problemas
Propósito
Esta guía permite a los desarrolladores configurar la plataforma Algesta completa localmente para desarrollo, pruebas y depuración. Proporciona instrucciones paso a paso verificables para tener todos los microservicios y el dashboard ejecutándose en una máquina local en 1 hora.
Siguiendo esta guía, podrás:
- Clonar y configurar todos los repositorios de Algesta
- Instalar dependencias y configurar variables de entorno
- Ejecutar servicios individualmente o vía Docker Compose
- Verificar que todos los servicios se ejecutan correctamente con health checks
- Comenzar trabajo de desarrollo con un stack local completamente funcional
¿Para quién es esto?
Principalmente para desarrolladores en proceso de onboarding e ingenieros que se unen al proyecto Algesta. También útil para ingenieros DevOps probando entornos locales o solucionando problemas de despliegue.
Prerrequisitos
Antes de comenzar, asegúrate de tener lo siguiente instalado en tu máquina de desarrollo:
| Herramienta | Versión Requerida | Instalación | Comando de Verificación |
|---|---|---|---|
| Node.js | 20.x o 21.x | nodejs.org | node --version |
| npm | 10.x+ | Incluido con Node.js | npm --version |
| pnpm | 10.x+ (para dashboard) | npm install -g pnpm | pnpm --version |
| MongoDB | 7.x+ | mongodb.com | mongod --version |
| Docker | 24.x+ | docker.com | docker --version |
| Docker Compose | 2.x+ | Incluido con Docker Desktop | docker-compose --version |
| Git | 2.x+ | git-scm.com | git --version |
Opcional pero Recomendado:
- Redis 7.x+ para caché y mensajería (se puede usar Docker)
- Kafka para mensajería event-driven (se puede usar Docker)
- Azure CLI para integración con almacenamiento en la nube
- Postman o curl para pruebas de API
Descripción General de Repositorios
La plataforma Algesta consiste de 7 repositorios principales organizados en una estructura multi-repo:
| Repositorio | Propósito | Stack Tecnológico | Puerto |
|---|---|---|---|
| algesta-ms-orders-nestjs | Gestión del ciclo de vida de órdenes, cotizaciones, seguimiento de activos | NestJS, MongoDB, Redis, Kafka | 3001 |
| algesta-ms-notifications-nestjs | Despacho de notificaciones (email, in-app) | NestJS, MongoDB, SendGrid | 3002 |
| algesta-ms-provider-nestjs | Registro de proveedores, subastas, validación de documentos | NestJS, MongoDB, Azure Storage | 3003 |
| algesta-api-gateway-nestjs | API Gateway con limitación de tasa, enrutamiento, autenticación | NestJS, Redis | 3000 |
| algesta-dashboard-react | SPA de dashboard para admin y cliente | React 19, Vite, TanStack Query | 5173 |
| algesta-agent | (Futuro) Agente de IA conversacional | Python, LangChain | TBD |
| ops-algesta | Infraestructura como Código (Terraform, configs) | Terraform, YAML | N/A |
Directorio Base: Todos los repos deben clonarse en tu directorio de proyecto preferido.
Configuración del Entorno de Desarrollo
1. Crear Directorio del Proyecto
mkdir -p ~/Documents/3A/Algestacd ~/Documents/3A/AlgestaVerificación: Ejecuta pwd y confirma que estás en el directorio Algesta.
2. Instalar Dependencias Globales
# Instalar pnpm globalmente (para el dashboard)npm install -g pnpm
# Instalar Husky globalmente (opcional, para git hooks)npm install -g husky
# Instalar NestJS CLI (opcional, útil para generar código)npm install -g @nestjs/cliVerificación:
pnpm --version# Salida esperada: 10.15.0 o superior
nest --version# Salida esperada: 11.0.0 o superior3. Iniciar MongoDB Localmente
Opción A: MongoDB Nativo
# macOS con Homebrewbrew services start mongodb-community@7
# Linuxsudo systemctl start mongodOpción B: MongoDB con Docker
docker run -d \ --name algesta-mongo \ -p 27017:27017 \ -v algesta-mongo-data:/data/db \ mongo:7Verificación:
mongosh --eval "db.version()"# Salida esperada: 7.x.xSi la conexión a MongoDB falla, consulta la Guía de Solución de Problemas.
Configuración Servicio por Servicio
Microservicio de Órdenes
1. Clonar Repositorio
cd ~/Documents/3A/Algestagit clone <REPOSITORY_URL> algesta-ms-orders-nestjscd algesta-ms-orders-nestjs2. Instalar Dependencias
npm install --forceNota: La bandera --force se usa para manejar dependencias nativas de bcrypt y descargas de Puppeteer.
3. Configurar Entorno
Crear archivo .env en el directorio raíz:
cp .env.example .envEditar .env con las variables mínimas requeridas (ver Configuración de Entorno para detalles completos):
NODE_ENV=developmentPORT=3001MONGODB_URI=mongodb://localhost:27017/orders_msJWT_SECRET=your-dev-jwt-secret-min-32-charsREDIS_HOST=localhostREDIS_PORT=63794. Ejecutar en Modo Desarrollo
npm run start:devVerificación:
curl http://localhost:3001/health# Salida esperada: {"status":"ok","timestamp":"2025-11-20T..."}5. Ejecutar Pruebas
npm run test:covEsperado: Cobertura > 90% (objetivo actual).
Microservicio de Notificaciones
1. Clonar e Instalar
cd ~/Documents/3A/Algestagit clone <REPOSITORY_URL> algesta-ms-notifications-nestjscd algesta-ms-notifications-nestjsnpm install --force2. Configurar Entorno
NODE_ENV=developmentPORT=3002MONGODB_URI=mongodb://localhost:27017/notifications_msSENDGRID_API_KEY=your-sendgrid-api-keyEMAIL_FROM=noreply@algesta.comREDIS_HOST=localhostREDIS_PORT=6379Nota: Para desarrollo local, puedes usar una clave API de sandbox de SendGrid u omitir el envío de correos.
3. Ejecutar Servicio
npm run start:devVerificación:
curl http://localhost:3002/health# Esperado: {"status":"ok"}Microservicio de Proveedores
1. Clonar e Instalar
cd ~/Documents/3A/Algestagit clone <REPOSITORY_URL> algesta-ms-provider-nestjscd algesta-ms-provider-nestjsnpm install --force2. Configurar Entorno
NODE_ENV=developmentPORT=3003MONGODB_URI=mongodb://localhost:27017/providers_msJWT_SECRET=your-dev-jwt-secret-min-32-charsAZURE_STORAGE_CONNECTION_STRING=your-azure-storage-connection-stringAZURE_STORAGE_CONTAINER_NAME=documents-devREDIS_HOST=localhostREDIS_PORT=6379Nota: Para desarrollo local sin Azure, puedes usar almacenamiento de archivos local u omitir las cargas de documentos.
3. Ejecutar Servicio
npm run start:devVerificación:
curl http://localhost:3003/health# Esperado: {"status":"ok"}API Gateway
1. Clonar e Instalar
cd ~/Documents/3A/Algestagit clone <REPOSITORY_URL> algesta-api-gateway-nestjscd algesta-api-gateway-nestjsnpm install2. Configurar Entorno
NODE_ENV=developmentPORT=3000MS_ORDERS_URL=http://localhost:3001MS_NOTIFICATIONS_URL=http://localhost:3002MS_PROVIDER_URL=http://localhost:3003REDIS_HOST=localhostREDIS_PORT=6379RATE_LIMIT_MAX=100RATE_LIMIT_WINDOW_MS=60000JWT_SECRET=your-dev-jwt-secret-min-32-chars3. Ejecutar Servicio
npm run start:devVerificación:
curl http://localhost:3000/health# Esperado: {"status":"ok","services":{"orders":"up","notifications":"up","provider":"up"}}Acceder a la Documentación Swagger:
Abre http://localhost:3000/api en tu navegador para explorar los endpoints de la API.
Dashboard (React SPA)
1. Clonar e Instalar
cd ~/Documents/3A/Algestagit clone <REPOSITORY_URL> algesta-dashboard-reactcd algesta-dashboard-reactpnpm installNota: El dashboard usa pnpm como su gestor de paquetes (versión 10.15.0).
2. Configurar Entorno
Crear archivo .env.local:
VITE_API_BASE_URL=http://localhost:3000VITE_APP_TITLE=Algesta DashboardVITE_ENABLE_DEVTOOLS=true3. Ejecutar Servidor de Desarrollo
pnpm devAlternativa con acceso de red (para pruebas en otros dispositivos):
pnpm dev:hostVerificación:
Abre http://localhost:5173 en tu navegador. Deberías ver la página de inicio de sesión del Dashboard de Algesta.
4. Ejecutar Pruebas
Pruebas Unitarias (Vitest):
pnpm test# o con interfazpnpm test:uiPruebas E2E (Playwright):
pnpm test:e2e# o con interfaz de Playwrightpnpm test:e2e:uiConfiguración de Docker para Stack Completo
Por conveniencia, puedes ejecutar todos los servicios usando Docker Compose. Esto elimina la necesidad de gestionar servicios individuales.
Nota: Actualmente no existe un docker-compose.yml de stack completo en el código base. Cada microservicio tiene su propio archivo docker-compose. Puedes crear uno unificado basado en los archivos individuales.
Ejemplo de docker-compose.yml de Stack Completo (a crear en el directorio raíz de Algesta):
version: "3.8"
services: mongodb: image: mongo:7 container_name: algesta-mongodb ports: - "27017:27017" volumes: - algesta-mongo-data:/data/db networks: - algesta-network healthcheck: test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] interval: 10s timeout: 5s retries: 5
redis: image: redis:7-alpine container_name: algesta-redis ports: - "6379:6379" networks: - algesta-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5
orders-ms: build: context: ./algesta-ms-orders-nestjs dockerfile: Dockerfile container_name: algesta-orders-ms depends_on: mongodb: condition: service_healthy redis: condition: service_healthy environment: - NODE_ENV=development - PORT=3001 - MONGODB_URI=mongodb://mongodb:27017/orders_ms - REDIS_HOST=redis - REDIS_PORT=6379 - JWT_SECRET=dev-secret-minimum-32-characters-long ports: - "3001:3001" networks: - algesta-network volumes: - ./algesta-ms-orders-nestjs:/app - /app/node_modules
notifications-ms: build: context: ./algesta-ms-notifications-nestjs dockerfile: Dockerfile container_name: algesta-notifications-ms depends_on: mongodb: condition: service_healthy redis: condition: service_healthy environment: - NODE_ENV=development - PORT=3002 - MONGODB_URI=mongodb://mongodb:27017/notifications_ms - REDIS_HOST=redis - REDIS_PORT=6379 ports: - "3002:3002" networks: - algesta-network
provider-ms: build: context: ./algesta-ms-provider-nestjs dockerfile: Dockerfile container_name: algesta-provider-ms depends_on: mongodb: condition: service_healthy redis: condition: service_healthy environment: - NODE_ENV=development - PORT=3003 - MONGODB_URI=mongodb://mongodb:27017/providers_ms - REDIS_HOST=redis - REDIS_PORT=6379 - JWT_SECRET=dev-secret-minimum-32-characters-long ports: - "3003:3003" networks: - algesta-network
api-gateway: build: context: ./algesta-api-gateway-nestjs dockerfile: Dockerfile container_name: algesta-api-gateway depends_on: - orders-ms - notifications-ms - provider-ms - redis environment: - NODE_ENV=development - PORT=3000 - MS_ORDERS_URL=http://orders-ms:3001 - MS_NOTIFICATIONS_URL=http://notifications-ms:3002 - MS_PROVIDER_URL=http://provider-ms:3003 - REDIS_HOST=redis - REDIS_PORT=6379 - JWT_SECRET=dev-secret-minimum-32-characters-long ports: - "3000:3000" networks: - algesta-network
volumes: algesta-mongo-data:
networks: algesta-network: driver: bridgePara ejecutar el stack completo:
cd ~/Documents/3A/Algestadocker-compose up -dPara detener el stack:
docker-compose downPara ver los logs:
docker-compose logs -f# o para un servicio específicodocker-compose logs -f orders-msVerificación:
docker-compose ps# Todos los servicios deben mostrar estado "Up"
curl http://localhost:3000/health# Esperado: {"status":"ok","services":{...}}Puertos de Servicio y Endpoints
| Servicio | Puerto | Endpoint de Salud | Documentación Swagger |
|---|---|---|---|
| API Gateway | 3000 | http://localhost:3000/health | http://localhost:3000/api |
| Orders MS | 3001 | http://localhost:3001/health | http://localhost:3001/api |
| Notifications MS | 3002 | http://localhost:3002/health | http://localhost:3002/api |
| Provider MS | 3003 | http://localhost:3003/health | http://localhost:3003/api |
| Dashboard | 5173 | http://localhost:5173 | N/A (SPA) |
| MongoDB | 27017 | Conectar vía mongosh | N/A |
| Redis | 6379 | redis-cli ping | N/A |
Nota: Todos los microservicios exponen documentación Swagger/OpenAPI en el endpoint /api para exploración interactiva de la API.
Comandos de Verificación
Después de configurar todos los servicios, ejecuta estos comandos para verificar que todo funciona:
1. Verificar Conexión a MongoDB
mongosh --eval "show dbs"# Esperado: Lista de bases de datos incluyendo orders_ms, notifications_ms, providers_ms2. Verificar Conexión a Redis
redis-cli ping# Esperado: PONG3. Health Check de Todos los Servicios
# API Gatewaycurl http://localhost:3000/health | jq .
# Orders MScurl http://localhost:3001/health | jq .
# Notifications MScurl http://localhost:3002/health | jq .
# Provider MScurl http://localhost:3003/health | jq .Esperado: Cada uno debe retornar {"status":"ok"} o similar.
4. Verificar Procesos en Ejecución
# Verificar procesos de Nodeps aux | grep node
# Verificar contenedores Docker (si usas Docker)docker ps
# Verificar uso de puertoslsof -i :3000lsof -i :3001lsof -i :3002lsof -i :3003lsof -i :51735. Probar Enrutamiento del API Gateway
# Probar creación de orden (requiere token de autenticación)curl -X POST http://localhost:3000/orders \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_JWT_TOKEN" \ -d '{"service":"Test Service","address":"Test Address","city":"Bogotá"}'Nota: Necesitarás un token JWT válido. Consulta la Guía de Autenticación para detalles sobre cómo obtener tokens.
Próximos Pasos
Después de completar la configuración local, deberías:
-
Leer la Documentación de Arquitectura: Comprende el diseño del sistema en Descripción General de Arquitectura
-
Comprender los Requisitos del Negocio: Revisa el contexto del negocio y los requisitos en Documentación de Requisitos para entender el “por qué” detrás del sistema
-
Configurar tu IDE: Configura linting, formateo y depuración
- ESLint y Prettier están configurados en todos los repos
- Configuraciones de VS Code están disponibles en los directorios
.vscode/
-
Ejecutar Pruebas: Asegúrate de que todas las pruebas pasen antes de hacer cambios
- Consulta la Guía de Pruebas para instrucciones completas de pruebas
-
Explorar la API: Usa la documentación Swagger para entender los endpoints disponibles
- Gateway:
http://localhost:3000/api - Servicios individuales:
http://localhost:300X/api
- Gateway:
-
Configurar Git Hooks: Habilita hooks de pre-commit para calidad de código
Ventana de terminal cd algesta-ms-orders-nestjsnpm run prepare -
Revisar la Configuración de Entorno: Consulta la Guía de Configuración de Entorno para configuraciones similares a producción
-
Comprender el Despliegue: Lee la Guía de Despliegue para aprender sobre pipelines CI/CD y despliegue en la nube
Guías Relacionadas:
- Resumen Ejecutivo: Estado del proyecto y hallazgos clave
- Configuración de Entorno: Documentación detallada de variables de entorno
- Configuración de Docker: Configuración avanzada de Docker y builds multi-etapa
- Guía de Pruebas: Pruebas unitarias, de integración y E2E
- Guía de Despliegue: Azure Pipelines, GCP Cloud Run, despliegue en Firebase
- [Configuración de Base de Datos](/04-guides/Base de datos-setup/): Configuración de MongoDB, esquemas y operaciones
- Solución de Problemas: Problemas comunes y soluciones
Para Soporte:
- Consulta la Guía de Solución de Problemas para problemas comunes
- Revisa la Documentación de Arquitectura en
wiki/02-architecture/ - Contacta al líder del equipo para acceso a repositorios privados y credenciales