diff --git a/.env.example b/.env.example index c79950f..9f1ee01 100644 --- a/.env.example +++ b/.env.example @@ -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 diff --git a/.gitea/workflows/build-and-deploy.yml b/.gitea/workflows/build-and-deploy.yml index 1e48b93..c342d8d 100644 --- a/.gitea/workflows/build-and-deploy.yml +++ b/.gitea/workflows/build-and-deploy.yml @@ -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 diff --git a/README.md b/README.md index 302d2ae..92b442a 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/docker-compose.yml b/docker-compose.yml index fd99fd0..f92cc93 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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: