Files
seguidorDeLotes/SETUP.md
josedario87 7612487d3f
All checks were successful
build-and-deploy / build (push) Successful in 2m7s
build-and-deploy / deploy (push) Successful in 3s
Add Nuxt 4 app with OAuth/OIDC authentication and PWA support
- Integrated Authentik OAuth/OIDC authentication
- Added PWA functionality with offline support
- Created protected and public API endpoints
- Configured Docker deployment with Traefik
- Added Gitea Actions CI/CD workflow
- Included comprehensive setup documentation
2025-10-11 17:12:05 -06:00

316 lines
7.9 KiB
Markdown

# Guía de Configuración - Seguidor de Lotes
## Arquitectura
```
┌─────────────┐ ┌──────────┐ ┌────────────────┐
│ Traefik │────▶│ Nuxt App │────▶│ Authentik │
│ (Reverse │ │ (Puerto │ │ (OAuth/OIDC) │
│ Proxy) │ │ 3000) │ │ │
└─────────────┘ └──────────┘ └────────────────┘
│ │
└───────────────────┘
Red Docker "principal"
```
## 1. Configurar Authentik
### 1.1 Crear Aplicación OAuth en Authentik
1. Accede a tu panel de Authentik: `https://auth.tudominio.com`
2. Ve a **Applications****Applications****Create**
3. Configura:
- **Name**: Seguidor de Lotes
- **Slug**: seguidor-lotes
- **Provider**: (Crear nuevo provider OAuth2/OIDC)
### 1.2 Crear Provider OAuth2/OIDC
1. **Applications****Providers****Create**
2. Selecciona **OAuth2/OpenID Provider**
3. Configura:
- **Name**: Seguidor de Lotes OAuth
- **Authorization flow**: default-authentication-flow
- **Client type**: Confidential
- **Client ID**: (se genera automáticamente, guárdalo)
- **Client Secret**: (se genera automáticamente, guárdalo)
- **Redirect URIs**: `https://app.tudominio.com/auth/authentik`
- **Scopes**: openid, profile, email
- **Subject mode**: Based on the User's UUID
- **Include claims in id_token**: ✅ Activado
4. Guarda el provider y asócialo a la aplicación creada anteriormente
### 1.3 Configurar Grupos (Opcional)
Si quieres usar permisos basados en grupos:
1. **Directory****Groups****Create**
2. Crea grupos como: `admin`, `users`, etc.
3. En el Provider OAuth, asegúrate de incluir el scope `groups`
## 2. Configurar Variables de Entorno
### 2.1 Copiar archivo de ejemplo
```bash
cp .env.example .env
```
### 2.2 Editar variables en `.env`
```bash
# Dominio de tu aplicación
APP_DOMAIN=app.tudominio.com
# Datos de Authentik OAuth (desde el paso 1.2)
NUXT_OAUTH_AUTHENTIK_CLIENT_ID=tu-client-id-aqui
NUXT_OAUTH_AUTHENTIK_CLIENT_SECRET=tu-client-secret-aqui
NUXT_OAUTH_AUTHENTIK_SERVER_URL=https://auth.tudominio.com
NUXT_OAUTH_AUTHENTIK_REDIRECT_URL=https://app.tudominio.com/auth/authentik
# URL pública de la app
NUXT_PUBLIC_APP_URL=https://app.tudominio.com
# Secret para sesiones (generar con: openssl rand -base64 32)
NUXT_SESSION_PASSWORD=$(openssl rand -base64 32)
```
### 2.3 Generar Session Secret
```bash
openssl rand -base64 32
```
Copia el resultado y pégalo en `NUXT_SESSION_PASSWORD`
## 3. Configurar Red Docker
Asegúrate de que la red `principal` exista:
```bash
# Verificar si existe
docker network ls | grep principal
# Si no existe, crearla
docker network create principal
```
## 4. Verificar Traefik
Tu configuración de Traefik debe tener:
```yaml
# traefik.yml o docker-compose.yml de Traefik
providers:
docker:
network: principal
exposedByDefault: false
```
## 5. Crear Iconos PWA
Crea los iconos en `nuxt4-app/public/`:
```bash
# Necesitas un icono base de 512x512 llamado icon.png
# Puedes generarlos con imagemagick:
cd nuxt4-app/public
# Si tienes un SVG o PNG grande
convert icon.png -resize 192x192 pwa-192x192.png
convert icon.png -resize 512x512 pwa-512x512.png
# O usa una herramienta online: https://realfavicongenerator.net/
```
## 6. Desplegar
### 6.1 Build y Start
```bash
# Build y levantar el contenedor
docker-compose up -d --build
```
### 6.2 Ver logs
```bash
docker-compose logs -f seguidor-lotes
```
### 6.3 Verificar estado
```bash
docker-compose ps
```
## 7. Verificar Funcionamiento
### 7.1 Acceso Web
1. Accede a `https://app.tudominio.com`
2. Deberías ver la página de inicio
3. Click en "Iniciar Sesión"
4. Serás redirigido a Authentik
5. Tras autenticar, vuelves a la app con sesión iniciada
### 7.2 Verificar APIs
```bash
# API Pública (sin auth)
curl https://app.tudominio.com/api/public
# API Protegida (requiere auth - debería retornar 401)
curl https://app.tudominio.com/api/protected
# Info de usuario (requiere auth)
curl https://app.tudominio.com/api/user
```
### 7.3 Verificar PWA
1. Abre Chrome DevTools (F12)
2. Ve a la pestaña **Application****Service Workers**
3. Deberías ver el service worker registrado
4. Prueba el modo offline:
- Activa "Offline" en la pestaña Network
- Navega por la aplicación
- Las páginas cacheadas funcionarán sin conexión
## 8. Rutas y Endpoints
### Páginas
- `/` - Página de inicio (pública)
- `/login` - Página de login (solo para usuarios no autenticados)
- `/dashboard` - Dashboard (requiere autenticación)
### API Endpoints
- `GET /api/public` - Endpoint público
- `GET /api/protected` - Endpoint protegido (requiere auth)
- `GET /api/user` - Información del usuario autenticado
### Auth Endpoints
- `GET /auth/authentik` - Inicia OAuth flow con Authentik
- `GET /auth/logout` - Cierra sesión
## 9. Desarrollo Local
Si quieres desarrollar localmente sin Docker:
```bash
cd nuxt4-app
# Copiar variables de entorno
cp .env.example .env
# Editar .env con tus valores locales
# Usar http://localhost:3000 en lugar de https
# Instalar dependencias
npm install
# Ejecutar en modo desarrollo
npm run dev
```
**Nota**: Para desarrollo local, necesitas:
- Configurar Authentik con redirect URI: `http://localhost:3000/auth/authentik`
- O usar túnel como ngrok para https
## 10. Troubleshooting
### Error: "Invalid redirect_uri"
- Verifica que la URI en Authentik coincida exactamente con `NUXT_OAUTH_AUTHENTIK_REDIRECT_URL`
- El protocolo debe ser `https://` en producción
### Error: "Invalid client_id or client_secret"
- Verifica los valores copiados de Authentik
- Asegúrate de que el Provider esté activado
### PWA no se registra
- Verifica que estés usando HTTPS (obligatorio para service workers)
- Abre DevTools → Application → Service Workers
- Verifica errores en la consola
### Sesión no persiste
- Verifica que `NUXT_SESSION_PASSWORD` tenga al menos 32 caracteres
- Verifica las cookies en DevTools → Application → Cookies
### Container no inicia
```bash
# Ver logs detallados
docker-compose logs seguidor-lotes
# Ver todas las variables de entorno
docker-compose exec seguidor-lotes env | grep NUXT
```
## 11. Seguridad
### Recomendaciones
1. **HTTPS Obligatorio**: Nunca uses HTTP en producción
2. **Secrets Seguros**: Usa `openssl rand -base64 32` para generar secrets
3. **Variables de Entorno**: Nunca commits el archivo `.env`
4. **Rate Limiting**: Considera añadir rate limiting en Traefik
5. **CORS**: Configura CORS apropiadamente si usas subdominios
### Headers de Seguridad (Traefik)
Añade a los labels de Docker Compose:
```yaml
- "traefik.http.middlewares.security-headers.headers.stsSeconds=31536000"
- "traefik.http.middlewares.security-headers.headers.stsIncludeSubdomains=true"
- "traefik.http.middlewares.security-headers.headers.stsPreload=true"
- "traefik.http.middlewares.security-headers.headers.contentTypeNosniff=true"
- "traefik.http.middlewares.security-headers.headers.browserXssFilter=true"
- "traefik.http.routers.seguidor-lotes.middlewares=security-headers"
```
## 12. Personalización
### Cambiar nombre de la app
1. Edita `nuxt4-app/nuxt.config.ts` → sección `pwa.manifest`
2. Cambia `name` y `short_name`
### Añadir más rutas protegidas
Crea una nueva página con:
```vue
<script setup>
definePageMeta({
middleware: 'auth'
})
</script>
```
### Añadir más endpoints protegidos
Crea un archivo en `server/api/` con:
```typescript
export default defineEventHandler(async (event) => {
const session = await requireUserSession(event)
// Tu lógica aquí
})
```
## Soporte
Para más información:
- [Nuxt Auth Utils](https://github.com/atinux/nuxt-auth-utils)
- [Vite PWA](https://vite-pwa-org.netlify.app/)
- [Authentik Docs](https://docs.goauthentik.io/)