当前位置: 首页 > news >正文

别再手动改hosts了!用Docker Compose一键部署Authelia SSO,顺便搞定Traefik反向代理

一键部署Authelia SSO与Traefik反向代理的Docker Compose实战指南

在当今复杂的网络环境中,管理多个Web应用的认证流程往往成为开发者的痛点。手动配置hosts文件、逐个设置访问权限不仅耗时耗力,还容易出错。本文将介绍如何利用Docker Compose快速搭建Authelia单点登录系统,并集成Traefik作为反向代理,实现开箱即用的安全访问控制方案。

1. 技术栈概述与准备工作

Authelia是一款开源的单点登录(SSO)和双因素认证(2FA)系统,专为自托管应用设计。它支持多种认证方式,能与反向代理无缝集成,为内部应用提供统一的认证入口。Traefik则是现代化的反向代理和负载均衡工具,支持自动服务发现和Let's Encrypt证书管理。

部署前准备:

  • 已安装Docker和Docker Compose的Linux服务器(推荐Ubuntu 20.04+)
  • 有效的域名(用于SSL证书申请)
  • 基础命令行操作知识

提示:虽然本文使用.example.com作为演示域名,实际部署时请替换为您自己的域名。

2. Docker Compose编排文件解析

以下是经过优化的docker-compose.yml文件,集成了Authelia、Redis、Traefik和演示站点:

version: '3.8' networks: sso-network: driver: bridge services: authelia: image: authelia/authelia:latest container_name: authelia volumes: - ./authelia/config:/config networks: - sso-network environment: - TZ=Asia/Shanghai labels: - "traefik.enable=true" - "traefik.http.routers.authelia.rule=Host(`auth.yourdomain.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: redis volumes: - ./redis/data:/data networks: - sso-network restart: unless-stopped traefik: image: traefik:v2.6 container_name: traefik ports: - "80:80" - "443:443" volumes: - ./traefik/config:/etc/traefik - /var/run/docker.sock:/var/run/docker.sock networks: - sso-network command: - "--api.insecure=true" - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--certificatesresolvers.letsencrypt.acme.email=your@email.com" - "--certificatesresolvers.letsencrypt.acme.storage=/etc/traefik/acme.json" - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web" whoami: image: containous/whoami container_name: whoami networks: - sso-network labels: - "traefik.enable=true" - "traefik.http.routers.whoami.rule=Host(`app.yourdomain.com`)" - "traefik.http.routers.whoami.entrypoints=websecure" - "traefik.http.routers.whoami.tls.certresolver=letsencrypt" - "traefik.http.routers.whoami.middlewares=authelia@docker"

关键配置说明:

  • 使用独立的Docker网络sso-network确保服务间隔离
  • Authelia配置挂载到本地./authelia/config目录
  • Traefik配置自动SSL证书申请
  • Whoami服务作为演示应用,受Authelia保护

3. Authelia详细配置

./authelia/config目录下创建两个关键配置文件:

configuration.yml

theme: light jwt_secret: your_secure_jwt_secret_here default_redirection_url: https://app.yourdomain.com server: host: 0.0.0.0 port: 9091 authentication_backend: file: path: /config/users_database.yml password: algorithm: argon2id iterations: 3 memory: 65536 parallelism: 4 access_control: default_policy: deny rules: - domain: "auth.yourdomain.com" policy: bypass - domain: "app.yourdomain.com" policy: two_factor session: name: authelia_session secret: your_session_secret_here expiration: 1h inactivity: 5m domain: yourdomain.com storage: encryption_key: your_encryption_key_here local: path: /config/db.sqlite3 notifier: filesystem: filename: /config/notifications.txt

users_database.yml

users: admin: displayname: "Admin User" password: "$argon2id$v=19$m=65536,t=3,p=4$dGhlc2FsdHlzdHJpbmc$thehashedpassword" email: admin@yourdomain.com groups: - admins developer: displayname: "Developer" password: "$argon2id$v=19$m=65536,t=3,p=4$YW5vdGhlcnNhbHQ$anotherhashedpassword" email: dev@yourdomain.com

生成密码哈希的命令:

docker run --rm authelia/authelia:latest authelia hash-password 'yourpassword'

4. Traefik配置优化

./traefik/config目录下创建traefik.yml

api: dashboard: true insecure: true entryPoints: web: address: ":80" http: redirections: entryPoint: to: websecure scheme: https websecure: address: ":443" providers: docker: endpoint: "unix:///var/run/docker.sock" exposedByDefault: false certificatesResolvers: letsencrypt: acme: email: "your@email.com" storage: "/etc/traefik/acme.json" httpChallenge: entryPoint: "web"

性能优化参数:

serversTransport: maxIdleConnsPerHost: 200 forwardingTimeouts: dialTimeout: 30s responseHeaderTimeout: 0s log: level: INFO format: json

5. 部署与测试流程

  1. 启动服务栈
docker-compose up -d
  1. 验证服务状态
docker-compose ps
  1. 测试访问流程
  • 直接访问https://app.yourdomain.com应跳转到Authelia登录页
  • 使用users_database.yml中的凭证登录
  • 成功认证后应返回Whoami服务页面
  1. 管理界面
  • Traefik仪表板:https://traefik.yourdomain.com
  • Authelia管理API:https://auth.yourdomain.com/api/

常见问题排查:

# 查看Authelia日志 docker logs authelia # 检查Redis连接 docker exec -it redis redis-cli ping # 验证Traefik配置 docker exec traefik traefik check-config

6. 生产环境增强建议

安全加固措施:

  • 替换所有示例中的密钥和密码
  • 启用数据库存储替代SQLite
  • 配置SMTP通知服务
  • 设置适当的备份策略

性能扩展方案:

# 在docker-compose.yml中添加 authelia: deploy: resources: limits: cpus: '1' memory: 512M reservations: memory: 256M healthcheck: test: ["CMD", "authelia", "healthcheck"] interval: 30s timeout: 5s retries: 3

监控集成:

  • Prometheus指标端点
  • 日志收集到ELK或Loki
  • 健康检查报警

实际部署中发现,合理配置会话超时和密码策略能显著提升安全性。对于团队协作场景,建议结合LDAP或Active Directory进行用户管理,而非文件存储方式。

http://www.cnnetsun.cn/news/2452450.html

相关文章:

  • 番茄小说下载器:5分钟打造个人离线图书馆的终极解决方案
  • Taotoken 的用量看板与账单追溯功能如何帮助开发者优化资源消耗
  • 深度解析unrpa:Ren‘Py游戏资源提取工具的技术架构与实战应用
  • RHCE第四次练习
  • 异构双核与多接口设计:工业网关与边缘计算核心平台实战解析
  • Hitboxer终极指南:免费专业解决游戏按键冲突的SOCD重映射工具
  • C语言学习笔记 - 34.数据类型 - 编程规范与高效学习方法
  • BG3ModManager完整指南:免费管理《博德之门3》模组的终极解决方案
  • Backtrader 终极指南:Python量化交易回测框架完全解析
  • C++ 引用完全指南:别名背后的秘密
  • 终极免费AMD Ryzen硬件调试指南:掌握SMUDebugTool的完整使用技巧
  • Python开发者如何快速接入Taotoken调用多模型API服务
  • 华为2288H V5服务器U盘装CentOS 7.5,手把手解决‘dracut timeout’报错
  • Transformer时代回头看:Layer Norm为何成了BERT、GPT的“标配”组件?
  • 工业AI边缘计算实战:基于FCU3501打造智慧工厂视觉分析节点
  • SQL示例:巧妙的解题思路学习(MySQL)
  • 瑞萨与LVGL PRO合作:嵌入式GUI开发硬件加速与性能优化实践
  • 如何利用PowerShell精准筛选并批量清理注册表残留项
  • 【硬核复刻】用CH552G打造你的专属USB-Blaster
  • 3步打造你的专属数字工作台:告别Obsidian启动迷茫
  • Obsidian科研知识库:构建战略级学术研究基础设施的架构指南
  • 3步解锁求职效率革命:NewJob智能时间识别插件让投递成功率翻倍
  • 【Perplexity本地服务部署全指南】:从零搭建私有化AI查询引擎,3步绕过API限制
  • 如何免费绕过iPhone激活锁:applera1n图形化工具终极指南
  • 网盘直链下载助手:九大平台高速下载的终极解决方案
  • Python GDAL实战:从零构建与处理TIF影像的完整工作流
  • 别再死记硬背了!用BRDF、Irradiance和Radiance的日常比喻,5分钟搞懂图形学光照
  • 3分钟掌握LaTeX公式转Word的终极方案:告别复制粘贴的烦恼
  • 青龙面板签到脚本:一站式全平台自动化签到解决方案,每天节省30分钟
  • 告别浏览器标签混乱:Gmail桌面版(Meru)全面使用指南