通过LetsEncrypt和多个Docker后端部署Traefik

时间:2018-08-07 16:14:20

标签: traefik kestrel-http-server

我正在考虑为我的Web项目(Kestrel / .Net Core)替换Apache for Traefik。阅读文档后,关于Traefik的一些事情我仍然不清楚:

1 / Traefik是否自动处理LetsEncrypt证书的续签,还是需要手动或通过外部脚本完成?从文档中可以得知,这是在添加新主机或重新启动时执行的,但是Traefik运行3个月后未添加任何重新启动/新主机会发生什么情况?

2 /当Docker后端无法访问时,如何提供自定义静态HTML页面?我可以从文档中看到如何设置特定的错误页面,但是在给定的后端不可用时如何将流量重定向到该页面。

3 /当需要更新Docker后端时,在执行Docker停止/重新启动之前,是否需要在Traefik上执行一些步骤?

4 /看来我无法同时运行2个docker后端,请参阅下面的配置文件,如果我取消注释第二个后端(api.mydomain.io),则第一个后端将不可用不再。我在这里想念东西吗?

version: '3'

services:
  reverse-proxy:
    image: traefik # The official Traefik docker image
    command: --docker # Enables the web UI and tells Træfik to listen to docker
    ports:
      - "80:80"     # The HTTP port
      - "443:443"     # The HTTPS port
      - "8080:8080" # The Web UI (enabled by --api)
    networks:
      - proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock 
      - $PWD/traefik.toml:/etc/traefik/traefik.toml
      - $PWD/acme.json:/acme.json
      - /root/mydomain_prod/cert/:/certs/
      - /root/mydomain_prod/503.html:/503.html
    container_name: traefik-reverse-proxy

  ##############################
  # Front - www.mydomain.io
  ##############################
  mydomain-front:
    image: mydomain-front
    labels:
      - traefik.enable=true
      - traefik.backend=mydomain-front
      - traefik.frontend.rule=Host:traefik.mydomain.io
      - traefik.port=8084
    networks:
      - internal
      - proxy
    container_name: mydomain-front


  ##############################
  # API - api.mydomain.io
  # Note: If I uncomment this one, then www.mydomain.io won't work anymore
  ##############################
  #mydomain-api:
  #  image: mydomain-api
  #  labels:
  #    - traefik.enable=true
  #    - traefik.backend=mydomain-api
  #    - traefik.frontend.rule=Host:api.mydomain.io
  #    - traefik.port=8082
  #  networks:
  #    - internal
  #    - proxy
  #  container_name: mydomain-api

非常感谢,

Flo

1 个答案:

答案 0 :(得分:0)

1 / Traefik可以处理LetsEncrypt证书的续订。只要记住要创建一个卷来存储acme.json文件即可。证书过期后,Traefik将不要求进行续订。

2 /我不知道是否可能。如果找到解决方案,请共享它。

3 /当您需要更新Docker时,只需对其进行更新。 Traefik将因更改而触发,更新是自己的配置。

4 /您可能必须同时运行后端。在下面您可以看到docker-compose.yml配置:

version: '3'
services:
  two-backend-service:
    restart: always
    image: ……..
    labels:
      - traefik.enable=true
      - traefik.service1.frontend.rule=Host:service1.exemple.com
      - traefik.service1.frontend.passHostHeader=true
      - traefik.service1.port=8082
      - traefik.Service2.backend=service2
      - traefik.Service2.frontend.rule=Host:service2.exemple.com
      - traefik.Service2.frontend.passHostHeader=true
      - traefik.Service2.port=8081

  traefik:
    build:
      context: ./traefik
      dockerfile: Dockerfile
    restart: always
    ports:
      - 80:80
      - 443:443
    labels:
      - traefik.enable=false
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - traefik_letsencrypt:/etc/traefik/acme/

volumes:
  traefik_letsencrypt:
      driver: local