Cómo instalar Authentik para SSO auto-alojado
Índice de contenidos
- Puntos clave
- Qué ha cambiado desde la 2025.10
- Por qué Authentik y no otra cosa
- La arquitectura desde 2025.10
- El despliegue básico
- El primer arranque y las migraciones
- Forward auth con Traefik
- Puntos de fricción típicos
- Forward auth que deja de funcionar tras actualizar: el cambio de cabecera
- Dos comprobaciones más que evitan sustos
- Preguntas frecuentes
- ¿Hace falta instalar Redis para usar Authentik?
- ¿Es Authentik mejor que Keycloak?
- Conclusión
- Fuentes
Probado con Authentik 2026.8.1 · Docker Compose · verificado
Actualizado: 2026-09-02
Authentik es uno de los proyectos de identidad auto-alojada más sólidos del panorama open source. Guía práctica de instalación con Docker Compose, arquitectura sin Redis desde 2025.10 y los puntos de fricción reales en la primera instalación.
Instalar Authentik con Docker Compose despliega un IdP (identity provider: verifica quién eres y qué permisos tienes) que centraliza el inicio de sesión único, SSO: un solo login para todas las aplicaciones conectadas. Usa OAuth2, OIDC, SAML y LDAP, los protocolos estándar de autenticación y directorio del software empresarial. El stack mínimo actual son tres contenedores: PostgreSQL, servidor y worker, sin Redis obligatorio desde la versión 2025.10. En una tarde se tiene login web y forward auth (autenticación delegada: un proxy inverso como Traefik consulta a Authentik antes de dejar pasar cada petición) funcionando en un par de servicios.
Esta guía también está disponible en inglés: How to Install Authentik for Self-Hosted SSO.
Puntos clave
- Desde la versión 2025.10, Authentik elimina por completo la dependencia de Redis: el stack mínimo es PostgreSQL + servidor + worker (tres contenedores en lugar de cuatro).
- El forward auth con Traefik es el caso de uso más común: proteger servicios web internos sin modificar cada aplicación.
- Tres problemas clásicos de primera instalación: configuración de dominio/URLs, manejo de cookies en subdominios y volúmenes persistentes para PostgreSQL.
- Encaja bien para organizaciones pequeñas y medianas; para miles de usuarios o políticas complejas, Keycloak sigue siendo más potente.
- Nunca saltar versiones major.minor en las actualizaciones: hay que ir una a una.
Qué ha cambiado desde la 2025.10
Esta guía se escribió sobre la rama 2025.10, la primera sin Redis. La rama actual es la 2026.8. La 2026.8.0 salió el 18 de agosto de 2026. La 2026.8.1, el 1 de septiembre de 2026, es la etiqueta que fija hoy el compose.yml oficial.
Comprobado el 2 de septiembre de 2026 contra las notas de la versión 2026.8[1] y las releases del repositorio[2]. Nada de lo anterior sobre la arquitectura sin Redis cambia; lo que sigue se suma:
- Cambio que rompe el forward auth si no lo preparas: desde 2026.8 el servidor solo acepta las cabeceras
X-Forwarded-Proto,X-Forwarded-HostyX-Forwarded-Forcuando la conexión llega desde una red de proxy de confianza. Toda dirección o red desde la que Traefik o Nginx conecten directamente con Authentik tiene que estar enAUTHENTIK_LISTEN__TRUSTED_PROXY_CIDRS; si no, Authentik verá la petición como HTTP plano y las redirecciones fallarán. Revísalo antes de actualizar, no después. - Otros dos cambios incompatibles: la orden
hash_passwordya no acepta la contraseña como argumento (pide de forma interactiva) y desaparece la opción de impedir dispositivos WebAuthn duplicados, sin nada que configurar. - Novedades de la 2026.8: gestión de accesos privilegiados (los usuarios solicitan acceso a una aplicación o a un entitlement y un aprobador lo concede con caducidad), cambio de una sesión iniciada a otra desde la interfaz de usuario, baja programada de usuarios (desactivación o borrado a fecha y hora), atributos de objeto tipados (texto, número y booleano con validación) para usuarios, grupos y entitlements, y mapas de eventos con un mapa base incluido que no hace peticiones externas, pensado para entornos aislados. En OAuth 2.0 el proyecto ha obtenido la certificación OpenID Certified y añade intercambio de tokens, delegación on-behalf-of, registro dinámico de clientes y tokens de identidad ligados a clave. Las cuentas de agente (cuentas de servicio que actúan en nombre de un usuario) son función Enterprise.
AUTHENTIK_POSTGRESQL__CONN_OPTIONSsigue deprecada en 2026.8 y las notas mantienen que «se eliminará en una versión próxima». Si aún la tienes, quítala.- Actualizar con Compose, tal como lo describen las notas:
wget -O docker-compose.yml https://goauthentik.io/version/2026.8/lifecycle/container/compose.ymlydocker compose up -d. Con la regla de esta guía de no saltar versiones, desde 2025.10 el camino pasa por 2025.12, 2026.2 y 2026.5 antes de 2026.8. El compose oficial sigue usando PostgreSQL 16.
Por qué Authentik y no otra cosa
La decisión entre Authentik, Keycloak, Zitadel y soluciones comerciales como Auth0 depende del contexto, pero para auto-alojado pequeño y medio la elección tiene matices claros:
- Keycloak[3]: potente pero pesado. Interfaz administrativa con curva de aprendizaje que frena a equipos sin dedicación de tiempo.
- Zitadel: elegante pero más joven y con ecosistema menor.
- Auth0: excelente pero dejó de ser opción realista para quien quiere auto-alojar.
Authentik ocupa el hueco intermedio. Es suficientemente completo para casos reales, con buen soporte de SAML y OAuth2, con forward auth útil para proteger servicios detrás de Traefik o Nginx, y con consumo de recursos manejable. Una instancia pequeña corre cómoda con 2 GB de memoria y un par de núcleos. La documentación oficial de Authentik[4] detalla los requisitos completos por tamaño de despliegue.
La arquitectura desde 2025.10
Un cambio importante que conviene entender antes de instalar: en la versión 2025.10, Authentik eliminó Redis del todo, no lo hizo opcional. Durante años la arquitectura mínima era PostgreSQL + Redis + servidor + worker.
El proceso empezó en la versión 2024.6, sustituyendo los locks de Redis por locks de PostgreSQL. Terminó en 2025.10, cuando la caché, la cola de tareas y las conexiones WebSocket también pasaron a PostgreSQL, estas últimas usando NOTIFY/LISTEN en lugar de pub/sub de Redis. El propio equipo de Authentik documenta el cambio en su blog técnico[5].
Esta simplificación tiene efectos prácticos, con matices:
- El stack baja de cuatro contenedores a tres, reduciendo superficie de configuración y de fallos.
- Quien instala por primera vez no tiene que explicar por qué hay un Redis colgando del servicio de identidad.
- A cambio, Authentik consume aproximadamente un 50% más de conexiones a PostgreSQL que antes, porque absorbe el trabajo que hacía Redis. En instancias con límites de conexión ajustados conviene revisar
max_connectionsen PostgreSQL antes de actualizar. - Si PostgreSQL exige TLS, Authentik desde 2025.10 requiere TLS 1.3 o la extensión Extended Master Secret para conectar.
El despliegue básico
El archivo docker-compose.yml parte del oficial publicado por Authentik pero simplificado. Define:
- Un servicio
postgresqlcon versión 16. - Un servicio
servercon la imagenghcr.io/goauthentik/servery comandoserver. - Un servicio
workercon la misma imagen y comandoworker.
El servidor expone los puertos 9000 y 9443, que son los que Traefik o Nginx usan para forward auth.
Las variables de entorno mínimas son:
AUTHENTIK_SECRET_KEY: cadena aleatoria larga usada para firmar tokens.AUTHENTIK_POSTGRESQL__HOST: apunta al servicio de base de datos.AUTHENTIK_POSTGRESQL__USER,AUTHENTIK_POSTGRESQL__NAME,AUTHENTIK_POSTGRESQL__PASSWORD.
En despliegues serios, sacar la contraseña y el secret a un gestor de secretos o a un archivo .env ignorado por git (ver nuestra guía de variables de entorno y secretos en Docker Compose).
services:
server:
image: ghcr.io/goauthentik/server:2026.8.1
command: server
environment:
AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY}
AUTHENTIK_POSTGRESQL__HOST: postgresql
AUTHENTIK_POSTGRESQL__NAME: authentik
AUTHENTIK_POSTGRESQL__USER: authentik
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
ports:
- "9000:9000"
- "9443:9443"
depends_on:
- postgresql
deploy:
resources:
limits:
memory: 768M
cpus: "1.5"
La etiqueta fijada arriba es la 2026.8.1 (1 de septiembre de 2026), la misma que usa el compose.yml oficial de la rama 2026.8; cuando se escribió esta guía era 2025.10. Si Authentik va detrás de Traefik o Nginx, añade también AUTHENTIK_LISTEN__TRUSTED_PROXY_CIDRS con la red desde la que conecta el proxy. Desde 2026.8 las cabeceras X-Forwarded-* solo se aceptan de proxies de confianza (detalle en la sección anterior).
Un detalle útil: poner límites de memoria y CPU desde el principio. El servidor puede tener picos durante logins masivos o sincronizaciones LDAP, y sin límite declarado puede afectar a otros servicios en el mismo host.
El primer arranque y las migraciones
Cuando el servidor arranca por primera vez, ejecuta automáticamente las migraciones de base de datos. Este proceso puede tardar minutos, no segundos. Un punto de fricción típico es arrancar servidor y worker a la vez. En la primera instalación y en actualizaciones mayores, lo ideal es:
- Arrancar solo el servicio
postgresqly esperar a que su healthcheck esté listo. - Arrancar el
servery ver en los logs (docker compose logs -f server) que termina las migraciones (línea final del tipoMigrations applied). - Arrancar el
worker.
Si servidor y worker intentan aplicar migraciones al mismo tiempo pueden aparecer bloqueos de PostgreSQL que requieren matar sesiones manualmente con SELECT pg_terminate_backend(pid). Este patrón también aplica en actualizaciones secuenciales entre versiones mayores. Nunca se pueden saltar major.minor, hay que ir una a una (por ejemplo, de 2025.8 a 2025.10, no directo de 2025.4 a 2025.10).
Tras las migraciones, la interfaz de administración está en el puerto 9000 bajo /if/flow/initial-setup/ la primera vez. Allí se crea el usuario admin inicial. Usar un correo real y guardar la contraseña en un gestor.
Forward auth con Traefik
El caso de uso más común al adoptar Authentik es proteger servicios web internos detrás de un proxy inverso (el componente que recibe todas las peticiones HTTP y las reparte hacia el contenedor correcto). El patrón se llama forward auth: Traefik recibe la petición, la redirige a Authentik para verificar que hay sesión válida, y si no la hay envía al usuario al login. Si ya tienes Traefik desplegado, nuestra guía de instalación de Traefik con Docker Compose cubre el proxy inverso desde cero.
La configuración en Authentik sigue estos pasos:
- Crear un proxy provider con forward auth single application o forward auth domain.
- Crear una aplicación asociada.
- Crear un outpost que exponga el endpoint de forward auth.
Del lado de Traefik, se define un middleware de tipo forwardAuth[6] apuntando al outpost, y se aplica ese middleware a cualquier router que quiera quedar protegido.
Un patrón que uso es tener dos cadenas de middlewares predefinidas:
chain-base: para servicios públicos sin autenticación.chain-oauth: para servicios protegidos que pasan por Authentik.
Esta separación hace que añadir o quitar protección de un servicio sea cambiar una etiqueta, no rehacer la configuración.
Puntos de fricción típicos
Hay tres problemas que casi todo el mundo encuentra la primera vez:
- Configuración de dominio y URLs. Authentik necesita saber desde qué dominio se le accede para generar correctamente las redirecciones. La variable
AUTHENTIK_HOSTy la configuración de brand dentro de la interfaz tienen que coincidir con el dominio real. Si ponesauthentik.ejemplo.comen Traefik pero Authentik cree que está enlocalhost, las redirecciones devuelven al usuario alocalhosty el login no funciona. - Manejo de cookies en subdominios. Para que una sesión de Authentik proteja servicios en subdominios distintos, las cookies tienen que estar configuradas con el dominio padre. La solución es configurar el proxy provider con la opción de cookie domain apuntando al dominio raíz (por ejemplo
.ejemplo.com, con el punto inicial). - Almacenamiento de datos. La base de datos de PostgreSQL es crítica y debe ir a un volumen persistente (revisa nuestra guía de volúmenes y bind mounts en Docker) con copias de seguridad configuradas, por ejemplo con Restic. Más de un equipo ha perdido la configuración entera de Authentik por tener el volumen en un tmpfs o por eliminar el volumen al hacer
compose down -vpor error.
Forward auth que deja de funcionar tras actualizar: el cambio de cabecera
Si el forward auth con Traefik te funcionaba y deja de hacerlo justo después de actualizar Authentik, casi seguro no has roto la configuración: cambió la cabecera.
Authentik 2025.12.5 y 2026.2.3 incluyen una corrección de seguridad que elimina el soporte de la cabecera no estándar X-Original-Uri. Las versiones antiguas del plugin de forward auth para Traefik enviaban exactamente esa cabecera, así que dejan de funcionar con esas versiones de Authentik y posteriores. La solución no es tocar el middleware: es actualizar el plugin, que ya envía la cabecera correcta X-Original-Url y sigue siendo compatible con versiones anteriores de Authentik.
| Si tu Authentik es… | Qué necesitas |
|---|---|
| Anterior a 2025.12.5 | Funciona con plugin antiguo o nuevo; actualiza igualmente antes de subir de versión |
| 2025.12.5, 2026.2.3 o posterior | Obligatorio actualizar el plugin de forward auth |
| 2026.5 | Plugin actualizado, y revisa la escucha por defecto: pasó de 0.0.0.0 a [::], lo que rompe entornos solo-IPv4 |
| 2026.8 (rama actual; 2026.8.1 del 1 de septiembre de 2026) | Plugin actualizado, y además AUTHENTIK_LISTEN__TRUSTED_PROXY_CIDRS con la red del proxy: las cabeceras X-Forwarded-* solo se aceptan desde proxies de confianza |
Dos comprobaciones más que evitan sustos
-
Limpia las cabeceras
X-Authentik-*entrantes. Si un cliente puede enviarlas y tu proxy las deja pasar hasta la aplicación, puede suplantar identidad. Un plugin de forward auth serio las elimina antes de reenviar; verifica que el tuyo lo hace. -
AUTHENTIK_POSTGRESQL__CONN_OPTIONSestá deprecada desde la rama 2026.5 y en 2026.8 sigue marcada para eliminarse «en una versión próxima». Si la tienes en tu.env, quítala ahora y no en mitad de una actualización urgente.
Nota sobre Redis, porque genera confusión al leer guías antiguas: desde 2025.10 no hace falta. La caché, el outpost embebido y los WebSocket se movieron a PostgreSQL, y los ajustes de Redis se pueden borrar de la configuración.
Preguntas frecuentes
¿Hace falta instalar Redis para usar Authentik?
No, desde la versión 2025.10 no. Authentik migró toda la caché, la cola de tareas y las notificaciones WebSocket a PostgreSQL, así que el stack mínimo son tres contenedores: PostgreSQL, servidor y worker. En versiones anteriores a 2025.10, Redis sí era obligatorio.
¿Es Authentik mejor que Keycloak?
Depende del tamaño. Para equipos pequeños o medianos, Authentik suele instalarse y mantenerse más rápido gracias a una interfaz más simple. Para organizaciones grandes con miles de usuarios, federación compleja o requisitos estrictos de cumplimiento, Keycloak ofrece más políticas y una comunidad más veterana.
Conclusión
Authentik ofrece la mejor relación entre esfuerzo de instalación y capacidades obtenidas en el espacio de identidad auto-alojada. Una tarde basta para tener una instancia funcional con login web y forward auth en un par de servicios. Si estás evaluando identidad auto-alojada y no tienes requisitos extremos de escala o cumplimiento específicos, Authentik es el primer candidato a probar.
Donde pausar y pensar: si tu organización tiene usuarios externos, partners o clientes que también se van a autenticar. Los requisitos de disponibilidad y de identidad federada cambian mucho cuando el SSO deja de ser interno. La buena noticia es que esa revisión puede hacerse con Authentik ya funcionando en tareas internas, sin necesidad de elegir la herramienta final desde el día uno.
Fuentes: documentación oficial de Authentik[4], repositorio de Authentik en GitHub[7], blog técnico de Authentik sobre la eliminación de Redis[5], documentación de Traefik sobre el middleware ForwardAuth[6].