我正在考虑为我的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
答案 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