refactor nginx

Signed-off-by: Omar Sánchez Pizarro <omar.sanchez@pistacero.net>
This commit is contained in:
Omar Sánchez Pizarro
2026-01-21 00:30:13 +01:00
parent ed2107086c
commit 53928328d4
11 changed files with 394 additions and 78 deletions

205
web/DEVELOPMENT.md Normal file
View File

@@ -0,0 +1,205 @@
# Guía de Desarrollo
## Configuración de Puertos
### Desarrollo Local
| Servicio | Puerto | URL |
|----------|--------|-----|
| Dashboard (Vue) | 3000 | http://localhost:3000 |
| Backend (API) | 3001 | http://localhost:3001 |
| Landing (Astro) | 3002 | http://localhost:3002 |
### Producción (Docker)
| Servicio | Puerto Externo | Puerto Interno |
|----------|----------------|----------------|
| Nginx Proxy | 80 | - |
| Dashboard | - | 80 |
| Backend | - | 3001 |
| Landing | - | 80 |
## Ejecutar en Desarrollo Local
### 1. Backend (API)
```bash
cd web/backend
npm install
npm run dev
```
El backend estará disponible en `http://localhost:3001`
**Endpoints**:
- API: `http://localhost:3001/api/*`
- WebSocket: `ws://localhost:3001/ws`
### 2. Dashboard (Vue)
```bash
cd web/dashboard
npm install
npm run dev
```
El dashboard estará disponible en `http://localhost:3000`
**Nota**: Vite está configurado con proxy automático:
- `/api/*``http://localhost:3001/api/*`
- `/ws``ws://localhost:3001/ws`
Esto significa que puedes hacer peticiones a `/api/users` desde el dashboard y automáticamente se redirigirán al backend.
### 3. Landing (Astro)
```bash
cd web/landing
npm install
npm run dev
```
La landing estará disponible en `http://localhost:3002`
## Ejecutar con Docker (Producción)
```bash
# Construir imágenes
docker-compose build
# Iniciar servicios
docker-compose up -d
# Ver logs
docker-compose logs -f
# Detener servicios
docker-compose down
```
Todo estará disponible en `http://localhost`:
- Landing: `http://localhost/`
- Dashboard: `http://localhost/dashboard/`
- API: `http://localhost/api/`
## Reconstruir después de cambios
### Cambios en código (desarrollo)
No es necesario hacer nada, Vite y Node tienen hot-reload automático.
### Cambios en configuración o Docker
```bash
# Reconstruir servicio específico
docker-compose build dashboard
docker-compose build backend
docker-compose build landing
# Reconstruir todo
docker-compose build
# Reiniciar servicios
docker-compose up -d
```
## Diferencias entre Desarrollo y Producción
### Dashboard
- **Desarrollo**:
- Puerto 3000
- Vite proxy activo para `/api` y `/ws`
- Hot Module Replacement (HMR)
- Source maps
- **Producción**:
- Puerto 80 (interno)
- Sin proxy (nginx principal maneja todo)
- Código minificado y optimizado
- Assets con hash para cache
### Backend
- **Desarrollo**:
- Puerto 3001
- `node --watch` para auto-reload
- Variables de entorno por defecto
- **Producción**:
- Puerto 3001 (interno)
- `node` sin watch
- Variables de entorno de Docker
### Landing
- **Desarrollo**:
- Puerto 3002
- Servidor de desarrollo de Astro
- Hot reload
- **Producción**:
- Puerto 80 (interno)
- Archivos estáticos servidos por nginx
- Pre-renderizado
## Troubleshooting
### Puerto ya en uso
```bash
# Ver qué está usando el puerto
lsof -i :3000 # Dashboard
lsof -i :3001 # Backend
lsof -i :3002 # Landing
# Matar proceso
kill -9 <PID>
```
### Proxy no funciona en desarrollo
Asegúrate de que:
1. El backend está corriendo en el puerto 3001
2. Estás ejecutando `npm run dev` (modo desarrollo)
3. La configuración de proxy en `vite.config.js` está correcta
### Assets 404 en producción
Ver `NGINX_CONFIG.md` para detalles de configuración de nginx y assets.
## Variables de Entorno
### Backend (desarrollo local)
Crear archivo `.env` en `web/backend/`:
```env
PORT=3001
PROJECT_ROOT=/ruta/al/proyecto
MONGODB_HOST=localhost
MONGODB_PORT=27017
MONGODB_DATABASE=wallabicher
MONGODB_USERNAME=admin
MONGODB_PASSWORD=adminpassword
```
### Backend (Docker)
Las variables se configuran en `docker-compose.yml`:
- `PORT=3001`
- `PROJECT_ROOT=/data`
- Credenciales de MongoDB
## Base URLs
### Dashboard
La configuración de `base: '/dashboard/'` en `vite.config.js` hace que:
- Todos los assets se construyan con prefijo `/dashboard/`
- Vue Router use `/dashboard` como base
- Service Worker se registre en `/dashboard/sw.js`
**No cambiar** a menos que quieras cambiar la ruta del dashboard.
### Landing
Sin base (raíz por defecto). Se sirve desde `/`.
**No cambiar** a menos que quieras mover la landing a otra ruta.