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:
45
.env.example
45
.env.example
@@ -18,42 +18,35 @@ APP_NAME=mi-app
|
|||||||
# Dominio donde se desplegará la aplicación
|
# Dominio donde se desplegará la aplicación
|
||||||
APP_DOMAIN=miapp.ejemplo.com
|
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
|
# APPLICATION
|
||||||
# ===========================================
|
# ===========================================
|
||||||
# URL pública de la aplicación
|
# URL pública de la aplicación
|
||||||
NUXT_PUBLIC_APP_URL=https://miapp.ejemplo.com
|
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)
|
# REGISTRY AUTHENTICATION (solo para CI/CD)
|
||||||
# ===========================================
|
# ===========================================
|
||||||
# Usuario del registro Docker
|
# Usuario del registro Docker (SECRETO)
|
||||||
REGISTRY_USERNAME=mi-usuario
|
REGISTRY_USERNAME=mi-usuario
|
||||||
|
|
||||||
# Contraseña del registro Docker (SECRETO)
|
# Contraseña del registro Docker (SECRETO)
|
||||||
REGISTRY_PASSWORD=mi-password-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
|
||||||
|
|||||||
@@ -36,13 +36,7 @@ jobs:
|
|||||||
APP_NAME: ${{ vars.APP_NAME }}
|
APP_NAME: ${{ vars.APP_NAME }}
|
||||||
# Variables de entorno para docker-compose
|
# Variables de entorno para docker-compose
|
||||||
APP_DOMAIN: ${{ vars.APP_DOMAIN }}
|
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_PUBLIC_APP_URL: ${{ vars.NUXT_PUBLIC_APP_URL }}
|
||||||
NUXT_SESSION_PASSWORD: ${{ secrets.NUXT_SESSION_PASSWORD }}
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: Login to registry
|
- name: Login to registry
|
||||||
|
|||||||
34
README.md
34
README.md
@@ -1,6 +1,6 @@
|
|||||||
# Plantilla Nuxt + Authentik Proxy
|
# 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
|
## Estructura del Proyecto
|
||||||
|
|
||||||
@@ -14,11 +14,12 @@ Plantilla base para aplicaciones Nuxt 4 con autenticación mediante Authentik OA
|
|||||||
## Características
|
## Características
|
||||||
|
|
||||||
- ✅ Nuxt 4
|
- ✅ Nuxt 4
|
||||||
- ✅ Autenticación OAuth con Authentik
|
- ✅ Autenticación con Authentik Proxy Outpost
|
||||||
- ✅ Docker y Docker Compose
|
- ✅ Docker y Docker Compose
|
||||||
- ✅ CI/CD con Gitea Actions
|
- ✅ CI/CD con Gitea Actions
|
||||||
- ✅ Traefik para proxy reverso y SSL
|
- ✅ Traefik para proxy reverso y SSL
|
||||||
- ✅ Claude Code hooks para monitoreo de Actions
|
- ✅ Claude Code hooks para monitoreo de Actions
|
||||||
|
- ✅ Sin configuración OAuth necesaria (todo manejado por el proxy)
|
||||||
|
|
||||||
## Desarrollo Local
|
## Desarrollo Local
|
||||||
|
|
||||||
@@ -67,21 +68,36 @@ Para configurar el despliegue automático, ve a tu repositorio en Gitea:
|
|||||||
**Secrets (valores sensibles):**
|
**Secrets (valores sensibles):**
|
||||||
- `REGISTRY_USERNAME` - Usuario del registro Docker
|
- `REGISTRY_USERNAME` - Usuario del registro Docker
|
||||||
- `REGISTRY_PASSWORD` - Contraseña 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):**
|
**Variables (valores públicos):**
|
||||||
- `REGISTRY_URL` - URL del registro Docker (ej: `registry.ejemplo.com`)
|
- `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_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`)
|
- `APP_DOMAIN` - Dominio de la aplicación (ej: `miapp.ejemplo.com`)
|
||||||
- `NUXT_OAUTH_AUTHENTIK_SERVER_URL` - URL pública de Authentik
|
- `NUXT_PUBLIC_APP_URL` - URL pública de la app (ej: `https://miapp.ejemplo.com`)
|
||||||
- `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
|
|
||||||
|
|
||||||
📄 Ver ejemplo completo en [`.env.example`](.env.example)
|
📄 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
|
## Licencia
|
||||||
|
|
||||||
MIT
|
MIT
|
||||||
|
|||||||
@@ -10,16 +10,8 @@ services:
|
|||||||
- NODE_ENV=production
|
- NODE_ENV=production
|
||||||
- NUXT_HOST=0.0.0.0
|
- NUXT_HOST=0.0.0.0
|
||||||
- NUXT_PORT=3000
|
- 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
|
# Public URL
|
||||||
- NUXT_PUBLIC_APP_URL=${NUXT_PUBLIC_APP_URL}
|
- NUXT_PUBLIC_APP_URL=${NUXT_PUBLIC_APP_URL}
|
||||||
# Session Secret
|
|
||||||
- NUXT_SESSION_PASSWORD=${NUXT_SESSION_PASSWORD}
|
|
||||||
networks:
|
networks:
|
||||||
- principal
|
- principal
|
||||||
labels:
|
labels:
|
||||||
@@ -35,8 +27,11 @@ services:
|
|||||||
# Service
|
# Service
|
||||||
- "traefik.http.services.${APP_NAME}.loadbalancer.server.port=3000"
|
- "traefik.http.services.${APP_NAME}.loadbalancer.server.port=3000"
|
||||||
|
|
||||||
# Middleware (headers para proxy)
|
# Middleware chain: Authentik Proxy Outpost + Headers
|
||||||
- "traefik.http.routers.${APP_NAME}.middlewares=${APP_NAME}-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"
|
- "traefik.http.middlewares.${APP_NAME}-headers.headers.customrequestheaders.X-Forwarded-Proto=https"
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
|
|||||||
Reference in New Issue
Block a user