# PUERTOS DE SERVICIOS - ORBIQUANT IA TRADING PLATFORM

**Documento:** Asignación de Puertos para Desarrollo y Producción
**Proyecto:** OrbiQuant IA Trading Platform
**Fecha:** 2025-12-05
**Estado:** Activo

---

## ÍNDICE

1. [Resumen Ejecutivo](#resumen-ejecutivo)
2. [Tabla de Puertos](#tabla-de-puertos)
3. [Servicios Detallados](#servicios-detallados)
4. [Configuración por Entorno](#configuración-por-entorno)
5. [Verificación de Puertos](#verificación-de-puertos)
6. [Troubleshooting](#troubleshooting)

---

## RESUMEN EJECUTIVO

Este documento centraliza la asignación de puertos para todos los servicios del proyecto OrbiQuant IA Trading Platform. Los puertos están organizados por bloques funcionales para facilitar la gestión de firewall y evitar conflictos.

### Principios de Asignación

- **Rango 3100-3199**: Servicios de Frontend (React/Vite)
- **Rango 4000-4099**: Servicios Backend (Node.js/Express)
- **Rango 5000-5099**: Servicios Python (FastAPI/AsyncIO)
- **Rango 5432-5433**: PostgreSQL (principal y testing)
- **Puerto 6379**: Redis (estándar)
- **Rango 8000-8099**: CI/CD y herramientas externas
- **Rango 9000-9099**: Monitoreo (Prometheus, Grafana)

### Archivo de Configuración Central

Todos los puertos están definidos en:
```
/home/isem/workspace/projects/trading-platform/.env.ports
```

---

## TABLA DE PUERTOS

### Servicios de Aplicación

| Servicio | Puerto | Protocolo | Estado | Descripción |
|----------|--------|-----------|--------|-------------|
| **Frontend Web** | 3100 | HTTP | Activo | Aplicación React principal (Vite dev server) |
| **Frontend Admin** | 3101 | HTTP | Reservado | Panel de administración (futuro) |
| **Frontend Preview** | 4173 | HTTP | Dev | Preview de build de Vite |
| **Backend API** | 4000 | HTTP | Activo | API REST principal (Express) |
| **Backend WebSocket** | 4001 | WS | Activo | WebSocket para real-time updates |
| **Backend Webhooks** | 4002 | HTTP | Reservado | Endpoint para webhooks externos |
| **ML Engine** | 5000 | HTTP | Activo | API de predicciones (FastAPI) |
| **Data Service** | 5001 | TCP | Activo | Sincronización de datos de mercado |
| **LLM Agent** | 5002 | HTTP | Planeado | Asistente inteligente (FastAPI) |
| **Portfolio Manager** | 5003 | HTTP | Planeado | Gestión de portafolios (FastAPI) |

### Infraestructura

| Servicio | Puerto | Protocolo | Estado | Descripción |
|----------|--------|-----------|--------|-------------|
| **PostgreSQL** | 5432 | TCP | Activo | Base de datos principal |
| **PostgreSQL Test** | 5433 | TCP | Dev | Instancia para testing |
| **Redis** | 6379 | TCP | Activo | Cache y message queues |
| **MySQL (Legacy)** | 3306 | TCP | Temporal | Solo para migración |

### CI/CD y Monitoreo

| Servicio | Puerto | Protocolo | Estado | Descripción |
|----------|--------|-----------|--------|-------------|
| **Jenkins** | 8080 | HTTP | Planeado | CI/CD pipeline |
| **Jenkins Agent** | 50000 | TCP | Planeado | Comunicación con agentes |
| **Prometheus** | 9090 | HTTP | Opcional | Métricas del sistema |
| **Grafana** | 3200 | HTTP | Opcional | Dashboards de monitoreo |

### Herramientas de Desarrollo

| Servicio | Puerto | Protocolo | Estado | Descripción |
|----------|--------|-----------|--------|-------------|
| **PgAdmin** | 5050 | HTTP | Opcional | Administración de PostgreSQL |
| **Mailhog SMTP** | 1025 | SMTP | Opcional | Testing de emails (SMTP) |
| **Mailhog Web** | 8025 | HTTP | Opcional | Testing de emails (Web UI) |

---

## SERVICIOS DETALLADOS

### Frontend Services

#### 1. Frontend Web (React + Vite)
- **Puerto**: `3100`
- **Comando Dev**: `npm run dev -- --port 3100`
- **URL**: `http://localhost:3100`
- **Variables de Entorno**:
  ```bash
  VITE_API_URL=http://localhost:4000/api/v1
  VITE_WS_URL=ws://localhost:4001
  ```

#### 2. Frontend Admin Panel (Futuro)
- **Puerto**: `3101`
- **Estado**: Reservado para separación de panel admin
- **URL**: `http://localhost:3101`

### Backend Services

#### 1. Backend API (Express)
- **Puerto**: `4000`
- **Archivo**: `/apps/backend/src/index.ts`
- **Comando**: `npm run dev`
- **Endpoints**:
  - API REST: `http://localhost:4000/api/v1`
  - Health: `http://localhost:4000/health`
  - Docs: `http://localhost:4000/api/v1/docs`
- **Variables de Entorno**:
  ```bash
  PORT=4000
  DB_PORT=5432
  REDIS_PORT=6379
  ML_ENGINE_URL=http://localhost:5000
  ```

#### 2. WebSocket Server
- **Puerto**: `4001`
- **Protocolo**: WebSocket (WS/WSS)
- **Uso**: Real-time charts, notifications, live prices
- **Conexión**: `ws://localhost:4001`

### Python Services

#### 1. ML Engine (FastAPI)
- **Puerto**: `5000`
- **Archivo**: `/apps/ml-engine/src/api/main.py`
- **Comando**: `uvicorn src.api.main:app --host 0.0.0.0 --port 5000 --reload`
- **Endpoints**:
  - API Docs: `http://localhost:5000/docs`
  - Health: `http://localhost:5000/health`
  - Predictions: `http://localhost:5000/predict/range`
- **Modelos Servidos**:
  - Range Predictor (ΔHigh/ΔLow)
  - TP/SL Classifier
  - Signal Generator

#### 2. Data Service (Python AsyncIO)
- **Puerto**: `5001`
- **Archivo**: `/apps/data-service/src/main.py`
- **Comando**: `python -m src.main`
- **Funciones**:
  - Sync de datos de Polygon.io cada 5min
  - Tracking de spreads desde MT4/MetaAPI
  - Entrenamiento de modelos de ajuste de precios
- **Variables de Entorno**:
  ```bash
  POLYGON_API_KEY=your_key
  METAAPI_TOKEN=your_token
  SYNC_INTERVAL_MINUTES=5
  ```

#### 3. LLM Agent API (Futuro)
- **Puerto**: `5002`
- **Estado**: Planeado (Módulo OQI-007)
- **Función**: Asistente inteligente con Claude/GPT

#### 4. Portfolio Manager (Futuro)
- **Puerto**: `5003`
- **Estado**: Planeado (Módulo OQI-008)
- **Función**: Gestión de portafolios de inversión

### Infrastructure Services

#### 1. PostgreSQL
- **Puerto**: `5432`
- **Estado**: ACTIVO (No cambiar)
- **Conexión**: `postgresql://orbiquant_user:password@localhost:5432/orbiquant_trading`
- **Schemas**:
  - `users` - Usuarios y autenticación
  - `market_data` - Datos de mercado
  - `trading` - Señales y operaciones
  - `education` - Contenido educativo
  - `investment` - Cuentas de inversión
  - `payments` - Suscripciones y pagos
  - `broker_integration` - Integración con brokers

#### 2. Redis
- **Puerto**: `6379`
- **Estado**: ACTIVO (No cambiar)
- **Conexión**: `redis://localhost:6379`
- **Uso**:
  - Session storage
  - Cache de queries
  - Message queues para jobs
  - Rate limiting

---

## CONFIGURACIÓN POR ENTORNO

### Desarrollo Local

Crear archivo `.env` en la raíz del proyecto:

```bash
# Copiar plantilla de puertos
cp .env.ports .env.local

# Variables de entorno específicas
NODE_ENV=development
POSTGRES_PASSWORD=orbiquant_dev_2025
JWT_ACCESS_SECRET=your-secret-min-32-chars
JWT_REFRESH_SECRET=your-secret-min-32-chars
STRIPE_SECRET_KEY=sk_test_...
POLYGON_API_KEY=your_polygon_key
```

### Docker Compose

El archivo `docker-compose.yml` usa los mismos puertos:

```bash
# Iniciar todos los servicios
docker-compose up -d

# Iniciar con herramientas de desarrollo
docker-compose --profile dev-tools up -d

# Ver logs
docker-compose logs -f backend

# Detener
docker-compose down
```

### Producción (Jenkins)

Jenkins usará los mismos puertos. Configurar en `.env.production`:

```bash
NODE_ENV=production
FRONTEND_WEB_PORT=3100
BACKEND_API_PORT=4000
ML_ENGINE_PORT=5000
POSTGRES_PORT=5432
REDIS_PORT=6379
```

---

## VERIFICACIÓN DE PUERTOS

### Comandos Útiles

#### Listar puertos en uso
```bash
# Todos los puertos TCP/UDP en escucha
ss -tuln | grep LISTEN

# Específico de un puerto
ss -tuln | grep :4000

# Usando netstat (si está instalado)
netstat -tuln | grep LISTEN
```

#### Verificar servicio en puerto
```bash
# Verificar con curl
curl http://localhost:4000/health

# Verificar con telnet
telnet localhost 4000

# Verificar proceso usando puerto
lsof -i :4000
```

#### Matar proceso en puerto
```bash
# Encontrar PID
lsof -t -i :4000

# Matar proceso
kill -9 $(lsof -t -i :4000)
```

### Script de Verificación

Crear `/scripts/check-ports.sh`:

```bash
#!/bin/bash

echo "=== OrbiQuant Port Status ==="
echo ""

declare -A services=(
  ["Frontend Web"]="3100"
  ["Backend API"]="4000"
  ["Backend WS"]="4001"
  ["ML Engine"]="5000"
  ["Data Service"]="5001"
  ["PostgreSQL"]="5432"
  ["Redis"]="6379"
)

for service in "${!services[@]}"; do
  port=${services[$service]}
  if ss -tuln | grep -q ":$port "; then
    echo "✓ $service (port $port) - RUNNING"
  else
    echo "✗ $service (port $port) - NOT RUNNING"
  fi
done
```

Ejecutar:
```bash
chmod +x scripts/check-ports.sh
./scripts/check-ports.sh
```

---

## TROUBLESHOOTING

### Problema: Puerto ya en uso

**Síntoma**: Error `EADDRINUSE` o `Address already in use`

**Solución**:
```bash
# 1. Identificar proceso
lsof -i :3100

# 2. Matar proceso
kill -9 <PID>

# 3. Usar puerto alternativo temporalmente
PORT=3200 npm run dev
```

### Problema: No se puede conectar al servicio

**Verificar**:
1. Servicio está corriendo: `ss -tuln | grep :4000`
2. Firewall permite conexión: `sudo ufw status`
3. Variables de entorno correctas: `echo $BACKEND_API_PORT`
4. Logs del servicio: `docker-compose logs backend`

### Problema: CORS en desarrollo

**Causa**: Frontend en puerto diferente al configurado

**Solución**: Actualizar `CORS_ORIGINS` en backend `.env`:
```bash
CORS_ORIGINS=http://localhost:3100,http://localhost:4173
```

### Problema: WebSocket no conecta

**Verificar**:
1. Backend WS está corriendo en puerto 4001
2. Frontend usa `ws://` (no `wss://`) en desarrollo
3. No hay proxy inverso bloqueando WS

---

## ACTUALIZACIÓN DE PUERTOS

Si necesitas cambiar un puerto:

1. **Actualizar** `/home/isem/workspace/projects/trading-platform/.env.ports`
2. **Actualizar** este documento
3. **Actualizar** `docker-compose.yml`
4. **Actualizar** archivos `.env` de cada servicio:
   - `/apps/backend/.env`
   - `/apps/frontend/.env`
   - `/apps/ml-engine/.env`
   - `/apps/data-service/.env`
5. **Reiniciar** servicios afectados
6. **Notificar** al equipo del cambio

---

## REFERENCIAS

- **Archivo de puertos**: `/home/isem/workspace/projects/trading-platform/.env.ports`
- **Docker Compose**: `/home/isem/workspace/projects/trading-platform/docker-compose.yml`
- **Config Backend**: `/home/isem/workspace/projects/trading-platform/apps/backend/.env.example`
- **Config Frontend**: `/home/isem/workspace/projects/trading-platform/apps/frontend/vite.config.ts`
- **Config ML Engine**: `/home/isem/workspace/projects/trading-platform/apps/ml-engine/src/api/main.py`
- **Config Data Service**: `/home/isem/workspace/projects/trading-platform/apps/data-service/src/main.py`

---

**Última Actualización**: 2025-12-05
**Mantenedor**: DevEnv Agent
**Contacto**: Equipo de Desarrollo OrbiQuant
