# Configuración de Nginx para SnatchGame

Este documento explica cómo configurar Nginx Proxy Manager para que el juego SnatchGame funcione correctamente con todos sus componentes.

## Arquitectura del Sistema

El juego está dockerizado en un solo contenedor que ejecuta dos servicios:
- **Frontend (Vue.js)**: Puerto 3000 interno
- **Backend (Colyseus)**: Puerto 2567 interno

El contenedor está conectado a la red `principal` de Docker sin exponer puertos al host.

## Configuración en Nginx Proxy Manager

### 1. Proxy Host Principal

**Configuración básica:**
- **Domain Names:** `snatchgame.nucleoriofrio.com`
- **Forward Hostname/IP:** `snatchgame`
- **Forward Port:** `3000`
- **Cache Assets:** ON
- **Block Common Exploits:** ON
- **Websockets Support:** ON

### 2. Custom Locations (Advanced Tab)

#### Location: `/api`
- **Forward to:** `http://snatchgame:2567/api`
- **Websockets Support:** OFF

#### Location: `/ws`
- **Forward to:** `http://snatchgame:2567`
- **Websockets Support:** ON

#### Location: `/colyseus` (Opcional - Monitor)
- **Forward to:** `http://snatchgame:2567/colyseus`
- **Websockets Support:** OFF

### 3. Custom Nginx Configuration

Para que el dashboard SSE funcione correctamente, agregar en **Advanced → Custom Nginx Configuration:**

```nginx
location /api/dashboard-stream {
    proxy_pass http://snatchgame:2567/api/dashboard-stream;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    # Headers específicos para SSE
    proxy_buffering off;
    proxy_cache off;
    proxy_read_timeout 24h;
    proxy_http_version 1.1;
}
```

### 4. SSL Configuration

- **SSL Certificate:** Request new Let's Encrypt
- **Force SSL:** ON
- **HTTP/2 Support:** ON

## Rutas Resultantes

Una vez configurado, las siguientes rutas estarán disponibles:

| Ruta | Destino | Propósito |
|------|---------|-----------|
| `https://snatchgame.nucleoriofrio.com/` | `snatchgame:3000` | Frontend principal (Vue.js) |
| `https://snatchgame.nucleoriofrio.com/api/*` | `snatchgame:2567/api/*` | API REST del backend |
| `https://snatchgame.nucleoriofrio.com/ws` | `snatchgame:2567` | WebSocket de Colyseus |
| `https://snatchgame.nucleoriofrio.com/api/dashboard-stream` | `snatchgame:2567/api/dashboard-stream` | Server-Sent Events para dashboard |
| `https://snatchgame.nucleoriofrio.com/colyseus` | `snatchgame:2567/colyseus` | Monitor de Colyseus |

## Configuración del Cliente

El cliente (frontend) está configurado para usar estas rutas automáticamente:

- **WebSocket:** `wss://snatchgame.nucleoriofrio.com/ws`
- **API:** `https://snatchgame.nucleoriofrio.com/api`
- **SSE Dashboard:** `https://snatchgame.nucleoriofrio.com/api/dashboard-stream`

## Problemas Comunes y Soluciones

### Dashboard SSE no funciona
**Síntoma:** Error "MIME type text/html instead of text/event-stream"
**Solución:** Verificar que la configuración custom nginx para `/api/dashboard-stream` esté presente con `proxy_buffering off`

### WebSocket no conecta
**Síntoma:** Error de conexión WebSocket
**Solución:** Verificar que "Websockets Support" esté habilitado en la location `/ws`

### API calls fallan
**Síntoma:** Errores 404 o 502 en calls de API
**Solución:** Verificar que la location `/api` esté configurada correctamente apuntando a `snatchgame:2567/api`

## Despliegue Automático

El sistema utiliza Gitea Actions para CI/CD:
1. Build de imagen Docker única
2. Deploy automático en contenedor `snatchgame` en red `principal`
3. Nginx proxy maneja el routing automáticamente

No se requiere reiniciar nginx tras deploys, solo el contenedor se actualiza.