Switch from OAuth to Authentik Proxy Outpost

- Remove all OAuth configuration (no longer needed)
- Add Authentik Proxy Outpost middleware to Traefik
- Simplify environment variables (only 4 required now)
- Update documentation with proxy outpost setup
- Document available Authentik headers
- Cleaner and simpler deployment
This commit is contained in:
2025-10-12 17:37:19 -06:00
parent c00d0fb61a
commit 7120d723ad
4 changed files with 49 additions and 51 deletions

View File

@@ -18,42 +18,35 @@ APP_NAME=mi-app
# Dominio donde se desplegará la aplicación
APP_DOMAIN=miapp.ejemplo.com
# ===========================================
# AUTHENTIK OAUTH
# ===========================================
# URL pública del servidor Authentik (con https://)
NUXT_OAUTH_AUTHENTIK_SERVER_URL=https://auth.ejemplo.com
# URL interna del servidor Authentik para comunicación server-side
# (puede ser la misma que la pública si no hay red interna)
NUXT_OAUTH_AUTHENTIK_SERVER_URL_INTERNAL=https://auth.ejemplo.com
# Client ID de la aplicación en Authentik
NUXT_OAUTH_AUTHENTIK_CLIENT_ID=abc123xyz
# Client Secret de la aplicación en Authentik (SECRETO)
NUXT_OAUTH_AUTHENTIK_CLIENT_SECRET=super-secreto-aqui
# URL de redirect después de autenticación
# Debe coincidir con la configurada en Authentik
NUXT_OAUTH_AUTHENTIK_REDIRECT_URL=https://miapp.ejemplo.com/auth/callback
# ===========================================
# APPLICATION
# ===========================================
# URL pública de la aplicación
NUXT_PUBLIC_APP_URL=https://miapp.ejemplo.com
# Password para encriptar sesiones (SECRETO)
# Debe ser una cadena aleatoria de al menos 32 caracteres
# Genera uno con: openssl rand -base64 32
NUXT_SESSION_PASSWORD=generar-con-openssl-rand-base64-32
# ===========================================
# REGISTRY AUTHENTICATION (solo para CI/CD)
# ===========================================
# Usuario del registro Docker
# Usuario del registro Docker (SECRETO)
REGISTRY_USERNAME=mi-usuario
# Contraseña del registro Docker (SECRETO)
REGISTRY_PASSWORD=mi-password-secreto
# ===========================================
# AUTHENTIK PROXY OUTPOST
# ===========================================
# Esta plantilla usa Authentik Proxy Outpost para autenticación.
# NO se requiere configuración OAuth en la aplicación.
#
# Asegúrate de:
# 1. Tener un Proxy Outpost de Authentik configurado en Traefik
# 2. Actualizar el middleware en docker-compose.yml con el nombre correcto de tu outpost
# 3. Configurar la aplicación en Authentik para este dominio
#
# La aplicación Nuxt recibirá estos headers automáticamente:
# - X-authentik-username: nombre de usuario
# - X-authentik-email: email del usuario
# - X-authentik-name: nombre completo
# - X-authentik-groups: grupos del usuario (separados por |)
# - X-authentik-uid: ID único del usuario

View File

@@ -36,13 +36,7 @@ jobs:
APP_NAME: ${{ vars.APP_NAME }}
# Variables de entorno para docker-compose
APP_DOMAIN: ${{ vars.APP_DOMAIN }}
NUXT_OAUTH_AUTHENTIK_CLIENT_ID: ${{ secrets.NUXT_OAUTH_AUTHENTIK_CLIENT_ID }}
NUXT_OAUTH_AUTHENTIK_CLIENT_SECRET: ${{ secrets.NUXT_OAUTH_AUTHENTIK_CLIENT_SECRET }}
NUXT_OAUTH_AUTHENTIK_SERVER_URL: ${{ vars.NUXT_OAUTH_AUTHENTIK_SERVER_URL }}
NUXT_OAUTH_AUTHENTIK_SERVER_URL_INTERNAL: ${{ vars.NUXT_OAUTH_AUTHENTIK_SERVER_URL_INTERNAL }}
NUXT_OAUTH_AUTHENTIK_REDIRECT_URL: ${{ vars.NUXT_OAUTH_AUTHENTIK_REDIRECT_URL }}
NUXT_PUBLIC_APP_URL: ${{ vars.NUXT_PUBLIC_APP_URL }}
NUXT_SESSION_PASSWORD: ${{ secrets.NUXT_SESSION_PASSWORD }}
steps:
- uses: actions/checkout@v3
- name: Login to registry

View File

@@ -1,6 +1,6 @@
# Plantilla Nuxt + Authentik Proxy
Plantilla base para aplicaciones Nuxt 4 con autenticación mediante Authentik OAuth.
Plantilla base para aplicaciones Nuxt 4 con autenticación mediante Authentik Proxy Outpost.
## Estructura del Proyecto
@@ -14,11 +14,12 @@ Plantilla base para aplicaciones Nuxt 4 con autenticación mediante Authentik OA
## Características
- ✅ Nuxt 4
- ✅ Autenticación OAuth con Authentik
- ✅ Autenticación con Authentik Proxy Outpost
- ✅ Docker y Docker Compose
- ✅ CI/CD con Gitea Actions
- ✅ Traefik para proxy reverso y SSL
- ✅ Claude Code hooks para monitoreo de Actions
- ✅ Sin configuración OAuth necesaria (todo manejado por el proxy)
## Desarrollo Local
@@ -67,21 +68,36 @@ Para configurar el despliegue automático, ve a tu repositorio en Gitea:
**Secrets (valores sensibles):**
- `REGISTRY_USERNAME` - Usuario del registro Docker
- `REGISTRY_PASSWORD` - Contraseña del registro Docker
- `NUXT_OAUTH_AUTHENTIK_CLIENT_ID` - Client ID de Authentik
- `NUXT_OAUTH_AUTHENTIK_CLIENT_SECRET` - Client Secret de Authentik
- `NUXT_SESSION_PASSWORD` - Password para sesiones (generar con `openssl rand -base64 32`)
**Variables (valores públicos):**
- `REGISTRY_URL` - URL del registro Docker (ej: `registry.ejemplo.com`)
- `APP_NAME` - Nombre de la aplicación (ej: `mi-app`) - usado para container, imagen y Traefik
- `APP_DOMAIN` - Dominio de la aplicación (ej: `miapp.ejemplo.com`)
- `NUXT_OAUTH_AUTHENTIK_SERVER_URL` - URL pública de Authentik
- `NUXT_OAUTH_AUTHENTIK_SERVER_URL_INTERNAL` - URL interna de Authentik (para comunicación server-side)
- `NUXT_OAUTH_AUTHENTIK_REDIRECT_URL` - URL de callback OAuth (ej: `https://miapp.ejemplo.com/auth/callback`)
- `NUXT_PUBLIC_APP_URL` - URL pública de la app
- `NUXT_PUBLIC_APP_URL` - URL pública de la app (ej: `https://miapp.ejemplo.com`)
📄 Ver ejemplo completo en [`.env.example`](.env.example)
### Configuración de Authentik Proxy Outpost
Esta plantilla requiere un **Authentik Proxy Outpost** ya configurado en Traefik.
1. **En Authentik:**
- Crea una aplicación para tu dominio
- Crea/usa un Proxy Provider (Forward auth)
- Asocia la aplicación al Outpost
2. **En `docker-compose.yml`:**
- Actualiza el middleware `authentik-outpost@docker` con el nombre correcto de tu outpost
3. **Headers disponibles en la app:**
- `X-authentik-username`: nombre de usuario
- `X-authentik-email`: email del usuario
- `X-authentik-name`: nombre completo
- `X-authentik-groups`: grupos (separados por `|`)
- `X-authentik-uid`: ID único
Tu aplicación Nuxt puede leer estos headers para obtener información del usuario autenticado.
## Licencia
MIT

View File

@@ -10,16 +10,8 @@ services:
- NODE_ENV=production
- NUXT_HOST=0.0.0.0
- NUXT_PORT=3000
# OAuth Authentik
- NUXT_OAUTH_AUTHENTIK_CLIENT_ID=${NUXT_OAUTH_AUTHENTIK_CLIENT_ID}
- NUXT_OAUTH_AUTHENTIK_CLIENT_SECRET=${NUXT_OAUTH_AUTHENTIK_CLIENT_SECRET}
- NUXT_OAUTH_AUTHENTIK_SERVER_URL=${NUXT_OAUTH_AUTHENTIK_SERVER_URL}
- NUXT_OAUTH_AUTHENTIK_SERVER_URL_INTERNAL=${NUXT_OAUTH_AUTHENTIK_SERVER_URL_INTERNAL}
- NUXT_OAUTH_AUTHENTIK_REDIRECT_URL=${NUXT_OAUTH_AUTHENTIK_REDIRECT_URL}
# Public URL
- NUXT_PUBLIC_APP_URL=${NUXT_PUBLIC_APP_URL}
# Session Secret
- NUXT_SESSION_PASSWORD=${NUXT_SESSION_PASSWORD}
networks:
- principal
labels:
@@ -35,8 +27,11 @@ services:
# Service
- "traefik.http.services.${APP_NAME}.loadbalancer.server.port=3000"
# Middleware (headers para proxy)
- "traefik.http.routers.${APP_NAME}.middlewares=${APP_NAME}-headers"
# Middleware chain: Authentik Proxy Outpost + Headers
# IMPORTANTE: Reemplaza 'authentik-outpost@docker' con el nombre de tu proxy outpost
- "traefik.http.routers.${APP_NAME}.middlewares=authentik-outpost@docker,${APP_NAME}-headers"
# Custom headers middleware
- "traefik.http.middlewares.${APP_NAME}-headers.headers.customrequestheaders.X-Forwarded-Proto=https"
networks: