Authelia项目Docker部署指南
前言
Authelia是一款开源的认证与授权服务,可以作为单点登录(SSO)解决方案的前置保护层。本文将详细介绍如何在Docker环境中部署Authelia服务,帮助开发者快速搭建安全认证系统。
容器镜像说明
Authelia官方提供了多个容器镜像源,包括:
- authelia/authelia
- docker.io/authelia/authelia
这些镜像都包含相同的内容,用户可以根据自己的网络环境选择合适的镜像源。
环境准备
在开始部署前,强烈建议新手用户先了解Authelia的基本概念和工作原理。需要准备以下内容:
- 确保已安装Docker和Docker Compose
- 准备配置文件目录结构
- 生成必要的密钥文件
容器配置详解
环境变量
Authelia容器支持以下特殊环境变量:
| 变量名 | 默认值 | 说明 |
|---|---|---|
| PUID | 0 | 容器运行时降权后的用户ID |
| PGID | 0 | 容器运行时降权后的组ID |
| UMASK | N/A | 设置容器运行时的umask值 |
权限管理
容器运行时权限有三种管理方式:
-
推荐方式:通过Docker daemon配置直接指定运行用户
- 优点:进程不会获得特权
- 注意:需要手动设置文件系统权限
-
环境变量方式:使用PUID/PGID环境变量
- 优点:自动设置文件权限
- 缺点:入口点会以root身份运行
-
用户命名空间:使用Docker的用户命名空间功能
- 高级用法,需要额外配置
Docker Compose部署方案
独立部署示例
这是最基本的部署方式,仅包含Authelia服务本身。
前提条件
- 配置文件路径:
data/authelia/config/configuration.yml - 密钥目录:
data/authelia/secrets/,包含:- JWT_SECRET:用于密码重置的JWT密钥
- SESSION_SECRET:会话密钥
- STORAGE_PASSWORD:PostgreSQL密码
- STORAGE_ENCRYPTION_KEY:存储加密密钥
- 使用PostgreSQL数据库
- 存在名为
net的外部桥接网络
使用Docker Secrets
secrets:
JWT_SECRET:
file: './data/authelia/secrets/JWT_SECRET'
SESSION_SECRET:
file: './data/authelia/secrets/SESSION_SECRET'
STORAGE_PASSWORD:
file: './data/authelia/secrets/STORAGE_PASSWORD'
STORAGE_ENCRYPTION_KEY:
file: './data/authelia/secrets/STORAGE_ENCRYPTION_KEY'
services:
authelia:
image: 'docker.io/authelia/authelia:latest'
restart: 'unless-stopped'
networks:
net: {}
secrets:
- JWT_SECRET
- SESSION_SECRET
- STORAGE_PASSWORD
- STORAGE_ENCRYPTION_KEY
environment:
AUTHELIA_IDENTITY_VALIDATION_RESET_PASSWORD_JWT_SECRET_FILE: '/run/secrets/JWT_SECRET'
AUTHELIA_SESSION_SECRET_FILE: '/run/secrets/SESSION_SECRET'
AUTHELIA_STORAGE_POSTGRES_PASSWORD_FILE: '/run/secrets/STORAGE_PASSWORD'
AUTHELIA_STORAGE_ENCRYPTION_KEY_FILE: '/run/secrets/STORAGE_ENCRYPTION_KEY'
volumes:
- './data/authelia/config:/config'
networks:
net:
external: true
使用卷挂载密钥
services:
authelia:
image: 'docker.io/authelia/authelia:latest'
restart: 'unless-stopped'
networks:
net: {}
environment:
AUTHELIA_IDENTITY_VALIDATION_RESET_PASSWORD_JWT_SECRET_FILE: '/secrets/JWT_SECRET'
AUTHELIA_SESSION_SECRET_FILE: '/secrets/SESSION_SECRET'
AUTHELIA_STORAGE_POSTGRES_PASSWORD_FILE: '/secrets/STORAGE_PASSWORD'
AUTHELIA_STORAGE_ENCRYPTION_KEY_FILE: '/secrets/STORAGE_ENCRYPTION_KEY'
volumes:
- './data/authelia/config:/config'
- './data/authelia/secrets:/secrets'
networks:
net:
external: true
常见问题解答
如何在宿主机上运行反向代理?
如果需要在宿主机而非容器中运行反向代理,需要添加端口映射配置:
services:
authelia:
ports:
- '127.0.0.1:9091:9091'
这样配置后,宿主机上的服务可以通过127.0.0.1:9091访问Authelia。
如何调试容器启动问题?
当日志无法提供足够信息时,可以尝试以下调试方法:
- 创建调试用的compose.debug.yml文件:
services:
authelia:
healthcheck:
disable: true
environment:
AUTHELIA_LOG_LEVEL: 'trace'
command: 'sleep 3300'
- 启动容器:
docker compose up -f compose.yml -f compose.debug.yml -d
- 进入容器交互模式:
docker exec -it authelia sh
authelia
最佳实践建议
- 生产环境建议使用特定版本标签而非latest
- 密钥文件应设置严格的权限(600)
- 定期备份配置文件和数据
- 监控容器资源使用情况
- 保持Authelia版本更新
通过以上步骤,您应该能够成功在Docker环境中部署Authelia服务。根据实际需求调整配置,确保系统安全稳定运行。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



