Je suis un débutant avec Traefik v2.1.4. J'utilise dans un conteneur Docker. J'essaye de mettre en place une route statique. J'ai trouvé quelques exemples utilisant le fichier de configuration toml.
[providers]
[providers.file]
[http]
[http.routers]
[http.routers.netdata]
rule = "Host(`netdata.my-domain.com`)"
service = "netdata"
entrypoint=["http"]
[http.services]
[http.services.netdata.loadbalancer]
[[http.services.netdata.loadbalancer.servers]]
url = "https://192.168.0.2:19999"
En suivant cet exemple, je voudrais le convertir en étiquettes docker de mon docker-compose.
Mon fichier docker-compose:
version: "3.7"
services:
traefik:
image: traefik:v2.1.4
container_name: traefik
restart: always
command:
- "--log.level=DEBUG"
- "--api.insecure=false"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.letsresolver.acme.tlschallenge=true"
- "--certificatesresolvers.letsresolver.acme.email=my-email@domain.com"
- "--certificatesresolvers.letsresolver.acme.storage=/letsencrypt/acme.json"
labels:
- "traefik.enable=true"
# middleware redirect
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
# global redirect to https
- "traefik.http.routers.redirs.rule=hostregexp(`{Host:.+}`)"
- "traefik.http.routers.redirs.entrypoints=web"
- "traefik.http.routers.redirs.middlewares=redirect-to-https"
# dashboard
- "traefik.http.routers.traefik.rule=Host(`traefik.my-domain.com`)"
- "traefik.http.routers.traefik.service=api@internal"
- "traefik.http.routers.traefik.middlewares=admin"
- "traefik.http.routers.traefik.tls.certresolver=letsresolver"
- "traefik.http.routers.traefik.entrypoints=websecure"
- "traefik.http.middlewares.admin.basicauth.users=user:hash-passwordXXX"
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
networks:
default:
external:
name: network
Il est possible de tiliser 2 fournisseurs ensemble: file
et docker
.
Votre docker-compose.yml
:
services: traefik: image: traefik: 2.2.1 commande: traefik --configFile =/etc/traefik/traefik.yml ports: - "80:80" - "8080: 8080" Volumes: - ./traefik.yml:/etc/traefik/traefik.yml - ./routes.yml:/etc/traefik/routes.yml - /var/run/docker.sock:/var/run/docker.sock[.____. </font> # vos services vont ici ...
Votre traefik.yml
:
api:
dashboard: true
insecure: true
entryPoints:
web:
address: :80
providers:
docker: {}
file:
filename: /etc/traefik/routes.yml
watch: true
Votre routes.yml
:
http:
routers:
hello:
rule: PathPrefix(`/hello`)
service: hello@docker
rule: PathPrefix(`/world`)"
service: world@docker
Ce ne sont que des exemples, ne les utilisez pas directement dans l'environnement de production, bien sûr.
Il n'y a pas d'étiquette de docker mentionnée pour spécifier l'url (dans https://docs.traefik.io/v2.1/routing/providers/docker/#routers ). Et j'ai essayé d'utiliser l'url au lieu du port, mais cela ne fonctionne pas.
Je suggère donc d'utiliser le fournisseur de fichiers ( https://docs.traefik.io/v2.1/providers/file/ ).
mettez à jour votre configuration avec:
services:
...
traefik:
...
command:
...
- "--providers.file.directory=/path/to/dynamic/conf"
config:
- source: redirect.toml
target: /path/to/dynamic/conf/redirect.toml
...
...
configs:
redirect.toml:
file: redirect.toml
et créez redirect.toml avec votre redirection (comme dans votre exemple).
Bien sûr, vous pouvez également monter la configuration dans le conteneur, ou créer votre propre image traefik contenant la configuration, ou ...
Si vous souhaitez travailler avec des étiquettes, vous pouvez démarrer un service qui redirige avec socat
services:
...
netdata:
image: Alpine/socat
command: tcp-listen:80,fork,reuseaddr tcp-connect:192.168.0.2:19999
deploy:
labels:
traefik.enable: "true"
traefik.http.routers.netdata.rule: Host(`netdata.my-domain.com`)
traefik.http.services.netdata_srv.loadbalancer.server.port: 80
# hm, and probably tell to forward as https, ...