Authelia Docker Compose es la solución definitiva para añadir autenticación de dos factores (2FA) y inicio de sesión único (SSO) a todas tus aplicaciones self-hosted. Si gestionas múltiples servicios con Docker y necesitas una capa de seguridad profesional sin complicaciones, este sistema de autenticación open-source te permite proteger Nextcloud, Grafana, Portainer y cualquier aplicación web en minutos.
¿Qué es Authelia Docker Compose y por qué lo necesitas?
Authelia es un servidor de autenticación y autorización de código abierto que actúa como portal de seguridad frente a tus aplicaciones. Con más de 26,000 estrellas en GitHub, esta solución ligera (menos de 20MB comprimida) escrita en Go ofrece autenticación multifactor, control de acceso granular y compatibilidad con los principales proxies inversos como Traefik, Nginx y Caddy.
La principal ventaja de implementar Authelia Docker Compose es que centraliza la seguridad de todas tus aplicaciones en un único punto de control. En lugar de configurar autenticación individual para cada servicio, tus usuarios se autentican una vez y acceden a todos los recursos autorizados mediante sesiones cifradas.
Características principales de Authelia
Este sistema de gestión de identidad y acceso (IAM) destaca por su equilibrio entre seguridad robusta y bajo consumo de recursos:
- Múltiples métodos de autenticación: Passkeys sin contraseña, códigos OTP basados en tiempo (TOTP), notificaciones push móviles, claves de seguridad WebAuthn (YubiKey, Google Titan) y autenticación tradicional
- OpenID Connect 1.0 certificado: Integración nativa con aplicaciones modernas mediante OAuth 2.0, compatible con protocolos estándar
- Políticas de acceso granulares: Define reglas específicas por subdominio, usuario, grupo, URI, método HTTP y red de origen
- Alta disponibilidad: Arquitectura escalable con soporte para PostgreSQL/MySQL y Redis, preparada para entornos Kubernetes
- Prevención de fuerza bruta: Límites configurables de intentos fallidos con bloqueo temporal automático
- Reset de contraseñas seguro: Sistema de verificación por email con tokens JWT firmados
El rendimiento es excepcional: las políticas de autorización se procesan en milisegundos, mientras el consumo de memoria ronda los 30MB en ejecución normal. Consulta la documentación oficial para casos de uso avanzados.
Requisitos previos para Authelia Docker Compose
Antes de comenzar la instalación, asegúrate de cumplir estos requisitos técnicos imprescindibles:
- Docker y Docker Compose instalados (versión 20.10 o superior recomendada)
- Proxy inverso configurado con certificados SSL válidos (Traefik, Nginx Proxy Manager o Caddy)
- Dominio propio con DNS configurado apuntando a tu servidor
- HTTPS obligatorio: La aplicación rechaza conexiones HTTP por diseño de seguridad
- Servidor SMTP para notificaciones por email (Gmail, SendGrid, Mailgun o servidor propio)
- Base de datos (opcional pero recomendado): PostgreSQL o MySQL para entornos de producción
Para entornos de prueba puedes usar SQLite3 y certificados autofirmados, pero la producción exige HTTPS real con certificados de Let’s Encrypt.
Configuración completa de Authelia Docker Compose
A continuación encontrarás una configuración funcional lista para producción. Este stack de Authelia Docker Compose incluye el servicio principal con Redis para sesiones y un volumen persistente para la base de datos SQLite:
version: '3.8'
services:
authelia:
image: authelia/authelia:latest
container_name: authelia
volumes:
- ./authelia:/config
environment:
- TZ=Europe/Madrid
- AUTHELIA_JWT_SECRET_FILE=/config/secrets/jwt_secret
- AUTHELIA_SESSION_SECRET_FILE=/config/secrets/session_secret
- AUTHELIA_STORAGE_ENCRYPTION_KEY_FILE=/config/secrets/storage_encryption_key
ports:
- '9091:9091'
restart: unless-stopped
networks:
- proxy
depends_on:
- redis
labels:
- "traefik.enable=true"
- "traefik.http.routers.authelia.rule=Host(`auth.tudominio.com`)"
- "traefik.http.routers.authelia.entrypoints=websecure"
- "traefik.http.routers.authelia.tls.certresolver=letsencrypt"
- "traefik.http.services.authelia.loadbalancer.server.port=9091"
redis:
image: redis:alpine
container_name: authelia-redis
volumes:
- ./redis:/data
restart: unless-stopped
networks:
- proxy
command: redis-server --save 60 1 --loglevel warning
networks:
proxy:
external: true
Este docker-compose.yml asume que tienes Traefik funcionando en la red proxy. Si usas Nginx Proxy Manager o Caddy, elimina las labels de Traefik y configura el proxy manualmente apuntando a authelia:9091.
Archivo de configuración esencial para Authelia Docker Compose
Crea el directorio de configuración y los secretos necesarios:
mkdir -p authelia/secrets
openssl rand -hex 32 > authelia/secrets/jwt_secret
openssl rand -hex 32 > authelia/secrets/session_secret
openssl rand -hex 32 > authelia/secrets/storage_encryption_key
chmod 600 authelia/secrets/*
Ahora crea authelia/configuration.yml con esta estructura base:
---
server:
address: 'tcp://0.0.0.0:9091'
buffers:
read: 4096
write: 4096
log:
level: info
format: text
theme: dark
authentication_backend:
file:
path: /config/users_database.yml
password:
algorithm: argon2
argon2:
variant: argon2id
iterations: 3
memory: 65536
parallelism: 4
key_length: 32
salt_length: 16
access_control:
default_policy: deny
rules:
- domain: "*.tudominio.com"
policy: one_factor
- domain: "admin.tudominio.com"
policy: two_factor
session:
secret: !secret
cookies:
- domain: 'tudominio.com'
authelia_url: 'https://auth.tudominio.com'
default_redirection_url: 'https://tudominio.com'
redis:
host: redis
port: 6379
regulation:
max_retries: 5
find_time: '2m'
ban_time: '10m'
storage:
encryption_key: !secret
local:
path: /config/db.sqlite3
notifier:
smtp:
address: 'smtp.gmail.com:587'
username: '[email protected]'
password: 'tu-app-password'
sender: 'Authelia <[email protected]>'
subject: '[Authelia] {title}'
Reemplaza tudominio.com con tu dominio real y configura las credenciales SMTP. Para Gmail, necesitas una contraseña de aplicación específica.
Crear usuarios y gestionar credenciales
Para el backend de archivos, crea authelia/users_database.yml con tus usuarios iniciales:
users:
admin:
disabled: false
displayname: "Administrador"
password: "$argon2id$v=19$m=65536,t=3,p=4$..."
email: [email protected]
groups:
- admins
- developers
usuario:
disabled: false
displayname: "Usuario Normal"
password: "$argon2id$v=19$m=65536,t=3,p=4$..."
email: [email protected]
groups:
- users
Para generar el hash de contraseña seguro con Authelia Docker Compose, ejecuta dentro del contenedor:
docker exec -it authelia authelia crypto hash generate argon2 --password 'TuContraseñaSegura'
Copia el hash generado y pégalo en el campo password de cada usuario. Este método garantiza que las contraseñas nunca se almacenan en texto plano.
Integración de Authelia Docker Compose con proxies inversos
La potencia del sistema radica en su integración transparente con tu proxy. Aquí ejemplos para los tres más usados con Authelia Docker Compose:
Traefik
Añade estos middlewares en tu archivo de configuración dinámica de Traefik:
http:
middlewares:
authelia:
forwardAuth:
address: "http://authelia:9091/api/authz/forward-auth"
trustForwardHeader: true
authResponseHeaders:
- "Remote-User"
- "Remote-Groups"
- "Remote-Name"
- "Remote-Email"
Luego aplica el middleware a cualquier servicio añadiendo el label:traefik.http.routers.tu-servicio.middlewares=authelia@file
Nginx Proxy Manager
En la pestaña «Advanced» de cada proxy host, añade:
location /authelia {
internal;
set $upstream_authelia http://authelia:9091/api/authz/forward-auth;
proxy_pass $upstream_authelia;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
}
auth_request /authelia;
auth_request_set $user $upstream_http_remote_user;
auth_request_set $groups $upstream_http_remote_groups;
proxy_set_header Remote-User $user;
proxy_set_header Remote-Groups $groups;
Caddy
Instala el módulo forward_auth y añade en tu Caddyfile:
app.tudominio.com {
forward_auth authelia:9091 {
uri /api/authz/forward-auth
copy_headers Remote-User Remote-Groups Remote-Name Remote-Email
}
reverse_proxy tu-aplicacion:puerto
}
Configurar autenticación de dos factores (2FA)
Una vez desplegado Authelia Docker Compose, accede a https://auth.tudominio.com e inicia sesión con tus credenciales. El portal te guiará para configurar tu segundo factor:
- TOTP (Time-based One-Time Password): Escanea el código QR con Google Authenticator, Authy o 1Password. Introduce el código de 6 dígitos para confirmar
- WebAuthn (claves de seguridad): Conecta tu YubiKey, Google Titan o usa el Face ID/Touch ID de tu dispositivo como passkey sin contraseña
- Notificaciones push: Configura Duo Mobile (requiere cuenta en Duo Security) para aprobaciones con un toque
Recomiendo TOTP como método universal y WebAuthn para máxima seguridad. Puedes habilitar múltiples métodos simultáneamente, y los usuarios eligen su favorito al autenticarse.
Políticas de acceso avanzadas con Authelia Docker Compose
El verdadero poder de Authelia Docker Compose se revela al definir políticas granulares en configuration.yml. Ejemplos prácticos:
access_control:
default_policy: deny
networks:
- name: internal
networks:
- '192.168.1.0/24'
- '10.0.0.0/8'
rules:
# Admin panel requiere 2FA siempre
- domain:
- "portainer.tudominio.com"
- "grafana.tudominio.com"
policy: two_factor
subject:
- "group:admins"
# Servicios públicos solo necesitan login
- domain: "*.tudominio.com"
policy: one_factor
# Acceso desde red local sin autenticación
- domain: "*.tudominio.com"
policy: bypass
networks:
- internal
# API endpoints permiten bearer tokens
- domain: "api.tudominio.com"
policy: one_factor
resources:
- "^/api/.*$"
Estas reglas se evalúan en orden. La primera coincidencia determina la acción. Combina dominios, subdominios, grupos de usuarios, redes origen y patrones de URI para control total.
Migrar de SQLite a PostgreSQL para producción
Para entornos de alta disponibilidad, reemplaza SQLite por PostgreSQL añadiendo este servicio al compose:
postgres:
image: postgres:16-alpine
container_name: authelia-postgres
environment:
POSTGRES_DB: authelia
POSTGRES_USER: authelia
POSTGRES_PASSWORD: password-seguro-aqui
volumes:
- ./postgres:/var/lib/postgresql/data
restart: unless-stopped
networks:
- proxy
Y modifica la sección storage en configuration.yml:
storage:
encryption_key: !secret
postgres:
address: 'tcp://postgres:5432'
database: authelia
username: authelia
password: password-seguro-aqui
PostgreSQL permite ejecutar múltiples réplicas del servidor con balanceo de carga, ideal para clusters Kubernetes o entornos Docker Swarm.
Solución de problemas comunes en Authelia Docker Compose
Estos son los errores más frecuentes al implementar Authelia Docker Compose y sus soluciones:
- «Unable to contact authentication backend»: Verifica que
users_database.ymltenga permisos correctos (chmod 644) y formato YAML válido - Bucle de redirección infinito: Revisa que el proxy envíe correctamente los headers
X-Forwarded-ProtoyX-Forwarded-Host. Traefik los añade automáticamente - Session no persiste: Asegúrate que Redis esté funcionando y accesible en la red. Comprueba con
docker exec -it authelia-redis redis-cli PING - Emails no llegan: Prueba la configuración SMTP con
docker logs authelia. Para Gmail, verifica que IMAP esté activo y uses una App Password - Proxy devuelve 502: El contenedor no está listo. Espera 10-15 segundos tras el inicio y revisa logs con
docker logs authelia -f
Activa el nivel de log debug temporalmente para diagnóstico detallado de problemas de integración con aplicaciones.
Mejores prácticas de seguridad
Implementa estas recomendaciones para maximizar la protección de tu despliegue:
- Secretos en archivos separados: Nunca hardcodees JWT secrets en configuration.yml. Usa siempre archivos en
/config/secrets/ - Limita intentos de login: Configura
regulationconmax_retries: 5yban_time: 15mmínimo - Habilita HTTPS estricto: Añade header
Strict-Transport-Securityen tu proxy con valormax-age=31536000; includeSubDomains - Audita logs regularmente: Exporta logs a un sistema centralizado como Loki o Elasticsearch para detectar patrones de acceso anormales
- Actualiza frecuentemente: Authelia lanza parches de seguridad regularmente. Usa
watchtowero actualiza manualmente cada mes - Backup de configuración: Respalda
authelia/completo, especialmentedb.sqlite3y los secrets
Para entornos críticos, considera implementar fail2ban monitorizando los logs para banear IPs con múltiples intentos fallidos a nivel de firewall.
Preguntas frecuentes (FAQ)
¿Puedo usar Authelia Docker Compose con aplicaciones que no soportan OAuth/OIDC?
Sí, mediante forward authentication. El proxy intercepta las solicitudes antes de llegar a la aplicación, validando la sesión sin que la aplicación necesite soporte específico para OAuth. Funciona con cualquier servicio web HTTP/HTTPS.
¿Cuántos usuarios puedo gestionar con el backend de archivos?
El backend de archivos es práctico hasta 50-100 usuarios. Para organizaciones mayores, integra LDAP con OpenLDAP, FreeIPA o Active Directory para gestión centralizada de identidades.
¿Es compatible Authelia Docker Compose con aplicaciones móviles?
Sí, si la aplicación móvil usa navegador web interno. Para apps nativas que usan APIs, implementa OAuth 2.0 con el provider OpenID Connect incluido, que soporta flujos de autorización estándar.
¿Puedo ejecutar múltiples instancias para alta disponibilidad?
Absolutamente. Usando PostgreSQL/MySQL como storage y Redis como session provider, puedes escalar horizontalmente con balanceador delante. Cada instancia comparte estado mediante la base de datos.
¿Qué ventajas tiene Authelia Docker Compose sobre soluciones comerciales como Auth0?
Control total sobre tus datos de autenticación, cero costes recurrentes por usuario, despliegue on-premise sin dependencias cloud, y personalización ilimitada del flujo de autenticación. Ideal para cumplimiento GDPR estricto.
Conclusión
Authelia Docker Compose representa la solución más completa para añadir autenticación profesional a tu infraestructura self-hosted. Con su arquitectura ligera, compatibilidad universal con proxies, y soporte para los estándares modernos de autenticación, transforma un conjunto de aplicaciones individuales en un ecosistema unificado y seguro.
La inversión inicial de 30 minutos en configuración te recompensa con autenticación centralizada, 2FA robusto, y control de acceso granular para todos tus servicios. Ya sea que gestiones un homelab personal o una infraestructura empresarial, Authelia Docker Compose escala contigo sin comprometer seguridad ni rendimiento.
Para más información sobre gestión de contenedores y stacks de Docker Compose, explora otros artículos en nuestra categoría docker-compose.
