Authentik Docker Compose te permite desplegar en tu propio servidor un proveedor de SSO (Single Sign-On), OAuth2, OIDC y SAML. Con esta solución tendrás un único login para Nextcloud, Gitea, Grafana y el resto de aplicaciones que uses, además de 2FA, recuperación por email y políticas por aplicación. En esta guía aprenderás a instalar Authentik con Docker Compose paso a paso, configurar secretos seguros, exponer puertos 80/443 y proteger tus apps con un proxy inverso.
¿Qué es Authentik?
Authentik es un proveedor de identidad (IdP) open source que centraliza la autenticación de todas tus aplicaciones. En lugar de mantener usuarios y contraseñas en cada servicio, defines una sola cuenta (o integración con Google, GitHub, LDAP) y el resto de aplicaciones delegan el login en Authentik mediante OAuth2, OIDC o SAML. Un despliegue con Authentik Docker Compose es la forma más rápida de tener este IdP en tu servidor. Es ideal para homelabs, equipos pequeños y entornos donde quieres control total sobre los datos de identidad.
La documentación oficial está en goauthentik.io y el código en el repositorio de GitHub. Incluye flujos configurables (registro, login, recuperación), etapas de autenticación (contraseña, 2FA, OAuth social) y Outposts para integrar con proxy inverso (Traefik, Caddy, Nginx). Requiere al menos 2 núcleos de CPU y 2 GB de RAM, además de Docker y Docker Compose v2.
Arquitectura de Authentik Docker Compose
El stack oficial de Authentik Docker Compose se compone de cuatro servicios: PostgreSQL 16 (base de datos), Redis (caché y colas), el servidor Authentik (API y UI) y el worker (tareas en segundo plano y, opcionalmente, integración con Docker). Por defecto el servidor escucha en los puertos internos 9000 (HTTP) y 9443 (HTTPS). Puedes exponer 80/443 mediante variables de entorno. Los volúmenes media y custom-templates permiten persistir archivos y personalizar plantillas.
Requisitos previos
- Servidor con al menos 2 CPU y 2 GB RAM
- Docker instalado
- Docker Compose v2 (recomendado)
- Dominio o IP para acceder al panel (opcional: proxy inverso con SSL)
Instalar Authentik Docker Compose paso a paso
Crea un directorio para el proyecto y descarga el docker-compose.yml oficial desde la documentación de instalación:
mkdir -p ~/authentik && cd ~/authentik
wget https://goauthentik.io/docker-compose.yml
Genera una contraseña para PostgreSQL y una clave secreta para Authentik, y guárdalas en un archivo .env:
echo "PG_PASS=$(openssl rand -base64 36 | tr -d '\n')" >> .env
echo "AUTHENTIK_SECRET_KEY=$(openssl rand -base64 60 | tr -d '\n')" >> .env
Para exponer el servicio en puertos 80 y 443 (útil si no usas proxy inverso delante), añade al .env:
echo "COMPOSE_PORT_HTTP=80" >> .env
echo "COMPOSE_PORT_HTTPS=443" >> .env
Opcional pero recomendado: configura SMTP para que Authentik envíe correos de verificación y recuperación. Añade a .env (ajusta host, puerto y credenciales):
# Ejemplo SMTP
AUTHENTIK_EMAIL__HOST=smtp.tudominio.com
AUTHENTIK_EMAIL__PORT=587
[email protected]
AUTHENTIK_EMAIL__PASSWORD=tu_contraseña
AUTHENTIK_EMAIL__USE_TLS=true
[email protected]
Importante: el servidor asume zona horaria UTC. No montes /etc/timezone ni /etc/localtime en los contenedores, ya que puede provocar fallos en OAuth y SAML. Arranca el stack:
docker compose pull
docker compose up -d
Comprueba que los contenedores estén en ejecución con docker compose ps. La primera vez, accede al flujo de configuración inicial en:
http://TU_IP:9000/if/flow/initial-setup/
La URL debe terminar en barra. Ahí establecerás la contraseña del usuario administrador akadmin. Después podrás entrar al panel en http://TU_IP:9000 (o por el puerto que hayas configurado).
Ejemplo de docker-compose.yml para Authentik Docker Compose
El archivo descargado de goauthentik.io incluye PostgreSQL, Redis, server y worker. Referencia la imagen ghcr.io/goauthentik/server con etiqueta fija (por ejemplo 2025.4.4). Aquí tienes la estructura típica:
services:
postgresql:
image: docker.io/library/postgres:16-alpine
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
interval: 30s
retries: 5
volumes:
- database:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: ${PG_PASS}
POSTGRES_USER: ${PG_USER:-authentik}
POSTGRES_DB: ${PG_DB:-authentik}
redis:
image: docker.io/library/redis:alpine
command: --save 60 1 --loglevel warning
restart: unless-stopped
volumes:
- redis:/data
server:
image: ghcr.io/goauthentik/server:2025.4.4
restart: unless-stopped
command: server
environment:
AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY}
AUTHENTIK_REDIS__HOST: redis
AUTHENTIK_POSTGRESQL__HOST: postgresql
AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
volumes:
- ./media:/media
- ./custom-templates:/templates
ports:
- "${COMPOSE_PORT_HTTP:-9000}:9000"
- "${COMPOSE_PORT_HTTPS:-9443}:9443"
depends_on:
postgresql: { condition: service_healthy }
redis: { condition: service_healthy }
worker:
image: ghcr.io/goauthentik/server:2025.4.4
restart: unless-stopped
command: worker
environment:
AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY}
AUTHENTIK_REDIS__HOST: redis
AUTHENTIK_POSTGRESQL__HOST: postgresql
AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
volumes:
- ./media:/media
- ./custom-templates:/templates
depends_on:
postgresql: { condition: service_healthy }
redis: { condition: service_healthy }
volumes:
database:
redis:
Configurar Authentik Docker Compose detrás de un proxy inverso
Authentik usa WebSockets para comunicarse con los Outposts, por lo que el proxy debe soportar WebSockets (HTTP/1.1). No uses un proxy que solo hable HTTP/1.0. Con Traefik o Caddy puedes terminar SSL en el proxy y redirigir al puerto 9000 o 9443 del servidor Authentik. En la documentación de reverse-proxy encontrarás ejemplos para Nginx, Traefik y Caddy. Configura las cabeceras X-Forwarded-For, X-Forwarded-Proto y, si aplica, Host, para que la aplicación detecte correctamente la URL pública.
Optimización y buenas prácticas
Mantén PG_PASS y AUTHENTIK_SECRET_KEY seguros y no los subas a repositorios. Haz copias de seguridad periódicas del volumen de PostgreSQL y del directorio media. Para actualizar, descarga de nuevo el docker-compose.yml desde goauthentik.io (apunta a la última versión), ejecuta docker compose pull y docker compose up -d. Revisa las notas de versión por posibles migraciones. Si expones puertos 80/443 directamente, considera poner un proxy con limitación de tasa y WAF delante.
Troubleshooting Authentik Docker Compose
Si no cargan el flujo inicial: comprueba que todos los contenedores estén healthy con docker compose ps y revisa los logs con docker compose logs server. Si cambiaste la zona horaria del host montando /etc/localtime en los contenedores, quita ese volumen; Authentik debe usar UTC internamente. Si el login falla tras configurar un proxy, verifica que las cabeceras de reenvío estén bien configuradas y que la URL base en la configuración de Authentik coincida con la que usa el usuario.
Conclusión
Con Authentik Docker Compose tienes un IdP completo en tu infraestructura: un solo punto de login para todas tus aplicaciones, con 2FA, OAuth2/OIDC/SAML y flujos personalizables. Siguiendo esta guía puedes tener el stack en marcha en pocos minutos y, con un proxy inverso, ofrecer SSO con HTTPS a Nextcloud, Gitea, Grafana y cualquier app que soporte OAuth o SAML.
FAQ sobre Authentik Docker Compose
¿Cuánta RAM necesita Authentik? El mínimo recomendado son 2 GB. Para varios Outposts y muchas aplicaciones enlazadas, 4 GB suele ir bien.
¿Puedo usar Authentik con Traefik? Sí. Authentik ofrece un Outpost que se integra con el proxy; en la documentación de reverse-proxy tienes ejemplos para Traefik.
¿Cómo actualizo Authentik? Descarga de nuevo el docker-compose.yml desde goauthentik.io, ejecuta docker compose pull y docker compose up -d. Revisa siempre las release notes por pasos de migración.
¿Authentik sustituye a Authelia? Authelia se centra en 2FA y protección de aplicaciones detrás de un proxy. Authentik es un IdP completo (OAuth2, OIDC, SAML, flujos, proveedores sociales). Puedes usar uno u otro según si necesitas solo 2FA o SSO completo.
¿Necesito HTTPS en el host? Para producción es recomendable. Puedes exponer 80/443 en el compose y usar Let’s Encrypt en el propio servidor, o poner delante Caddy o Traefik y terminar SSL ahí.
