MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

docker安装traefik

2025-03-11 16:37 huorong 精选文章 3 ℃ 0 评论

1. 准备工作

  • 确保已安装 Docker 和 Docker Compose。
  • 拥有一个域名(例如 http://example.com),并确保 DNS 已解析到服务器 IP。
  • 开放服务器的 80 和 443 端口。


2. 创建目录结构


mkdir -p traefik/{data,config}
cd traefik
  • data/: 存储 Traefik 的证书和持久化数据
  • config/: 存放配置文件


3. 创建 Traefik 配置文件

静态配置 (config/traefik.yml)


# 全局配置
global:
  checkNewVersion: true
  sendAnonymousUsage: false

# 入口点配置(定义监听的端口)
entryPoints:
  web:
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: websecure
          scheme: https
  websecure:
    address: ":443"

# 自动 HTTPS 配置(Let's Encrypt)
certificatesResolvers:
  letsencrypt:
    acme:
      email: your-email@example.com  # 替换为你的邮箱
      storage: /data/acme.json       # 证书存储位置
      httpChallenge:
        entryPoint: web

# Docker 提供者配置(自动发现容器)
providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false  # 默认不暴露容器,需手动标记

# 启用 Dashboard(可选)
api:
  dashboard: true
  insecure: true  # 生产环境应关闭,并通过路由保护

4. 创建 Docker Compose 文件 (docker-compose.yml)


version: '3'

services:
  traefik:
    image: traefik:latest
    container_name: traefik
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro  # 允许 Traefik 监听 Docker 事件
      - ./data:/data                                  # 证书存储
      - ./config/traefik.yml:/etc/traefik/traefik.yml # 主配置文件
    labels:
      - "traefik.enable=true"
      # 保护 Dashboard 路由(可选)
      - "traefik.http.routers.traefik-dashboard.rule=Host(`traefik.example.com`)"
      - "traefik.http.routers.traefik-dashboard.service=api@internal"
      - "traefik.http.routers.traefik-dashboard.entrypoints=websecure"
      - "traefik.http.routers.traefik-dashboard.tls.certresolver=letsencrypt"

5. 启动 Traefik


docker-compose up -d


6. 测试其他服务路由

示例:部署一个 Nginx 容器并配置路由

创建 docker-compose.nginx.yml:


version: '3'

services:
  nginx:
    image: nginx:alpine
    container_name: nginx
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.nginx.rule=Host(`app.example.com`)"  # 替换为你的域名
      - "traefik.http.routers.nginx.entrypoints=websecure"
      - "traefik.http.routers.nginx.tls.certresolver=letsencrypt"

启动并附加到 Traefik 网络:


docker-compose -f docker-compose.nginx.yml up -d


7. 验证

  1. 访问 Dashboard
  • 打开 https://traefik.example.com(需配置 DNS),查看 Traefik 仪表盘。
  • 测试 Nginx 服务
    • 访问 https://app.example.com,应看到 Nginx 默认页面。

    检查证书

    ls ./data/acme.json  # 确认证书已生成

    8. 高级配置

    安全加固 Dashboard

    为 Dashboard 添加 Basic Auth:


    # 生成密码(将 user:password 替换为实际值)
    echo $(htpasswd -nb user password) | sed -e 's/\$/\$\$/g'

    在 Traefik 的 labels 中添加:


    - "traefik.http.routers.traefik-dashboard.middlewares=auth"
    - "traefik.http.middlewares.auth.basicauth.users=user:$2y$05$xxxxxxxxxxxxxxxxxxxxxx"

    配置日志

    在 traefik.yml 中添加:


    log:
      level: INFO
      filePath: /data/traefik.log

    9. 常见问题

    • 证书未生成
      • 检查 acme.json 权限:chmod 600 ./data/acme.json
      • 确认域名 DNS 解析正确。
    • Traefik 无法连接 Docker
      • 确保 docker.sock 挂载正确。
    • 路由不生效
      • 检查容器标签 (labels) 是否拼写正确。
      • 查看 Traefik 日志:docker logs traefik


    10. 最终目录结构


    traefik/
    ├── docker-compose.yml
    ├── config/
    │   └── traefik.yml
    └── data/
        ├── acme.json
        └── traefik.log

    通过此配置,Traefik 将自动管理 Docker 容器的 HTTPS 证书和路由,实现服务的动态发现和负载均衡

    Tags:docker-compose 安装

    控制面板
    您好,欢迎到访网站!
      查看权限
    网站分类
    最新留言