February 7, 2021 · 技术文章

docker 部署traefik并打开dashboard

介绍

traefik是个反向代理并负载均衡的工具,比较方便的地方在于能够证书自签。

配置步骤

version: "3.3"

services:

  traefik:
    image: "traefik:v2.4"
    container_name: "traefik"
    restart: "always"
    command:
      - '--api=true'
      - '--api.dashboard=true'
      - '--providers.docker.endpoint=unix:///var/run/docker.sock'
      - '--providers.docker.exposedbydefault=false'
      - '--providers.docker.network=traefik-public'
      - '--entrypoints.web.address=:80'
      - '--entrypoints.websecure.address=:443'
      - '--certificatesresolvers.letsencryptresolver.acme.httpchallenge=true'
      - '--certificatesresolvers.letsencryptresolver.acme.httpchallenge.entrypoint=web'
      - '--certificatesresolvers.letsencryptresolver.acme.email=a18814888787@gmail.com'
      - '--certificatesresolvers.letsencryptresolver.acme.storage=/letsencrypt/acme.json'
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    networks:
      - traefik-public
    volumes:
      - "./letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    labels:
      - "traefik.enable=true"

      - 'traefik.http.routers.http-catchall.rule=PathPrefix(`/`)'
      - 'traefik.http.routers.http-catchall.entrypoints=web'
      - 'traefik.http.routers.http-catchall.middlewares=redirect-to-https'
      - 'traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https'
      - 'traefik.http.routers.traefik.rule=(Host(`traefik.xxxx.com`)) && (PathPrefix(`/traefik`) || PathPrefix(`/api`))' # Put in your domain
      - 'traefik.http.routers.traefik.entrypoints=websecure'
      - 'traefik.http.routers.traefik.tls.certresolver=letsencryptresolver'
      - 'traefik.http.routers.traefik.service=api@internal'
      - 'traefik.http.services.api@internal.loadbalancer.server.port=8080'
      - 'traefik.http.routers.traefik.middlewares=strip'
      - 'traefik.http.middlewares.strip.stripprefix.prefixes=/traefik'

  whoami:
    image: "traefik/whoami"
    container_name: "traefik-service"
    restart: "always"
    labels:
      - 'traefik.enable=true'
      - 'traefik.http.routers.whoami.rule=(Host(`traefik.xxxx.com`))'
      - 'traefik.http.routers.whoami.entrypoints=websecure'
      - 'traefik.http.routers.whoami.tls.certresolver=letsencryptresolver'
      - 'traefik.http.routers.whoami.service=whoamiservice'
      - 'traefik.http.services.whoamiservice.loadbalancer.server.port=80'
    networks:
      - traefik-public

最后通过docker-compose -f traefik_docker_compose.yml up -d 命令启动容器。在域名解析增加ip后,可以通过http://traefik.xxxx.com/traefik 来进入traefik的dashboard.