私はTraefik v2.1.4の初心者です。 Dockerコンテナーで使用しています。静的ルートを設定しようとしています。 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"
この例に従って、それを私のdocker-composeのdockerラベルに変換します。
私の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
2つのプロバイダーを一緒に使用できます:file
およびdocker
。
きみの docker-compose.yml
:
services: traefik: image:traefik:2.2.1 command:traefik --configFile =/etc/traefik/traefik.yml ports: -"80:80" -"8080:8080" ボリューム: -./traefik.yml:/etc/traefik/traefik.yml -./routes.yml:/etc/traefik/routes.yml -/var/run/docker.sock:/var/run/docker.sock #サービスがここに表示されます...
きみの traefik.yml
:
api:
dashboard: true
insecure: true
entryPoints:
web:
address: :80
providers:
docker: {}
file:
filename: /etc/traefik/routes.yml
watch: true
きみの routes.yml
:
http:
routers:
hello:
rule: PathPrefix(`/hello`)
service: hello@docker
rule: PathPrefix(`/world`)"
service: world@docker
これらは単なる例であり、本番環境で直接使用しないでください。
( https://docs.traefik.io/v2.1/routing/providers/docker/#routers で)URLを指定するために言及されたdockerラベルはありません。ポートの代わりにURLを使用しようとしましたが、機能しません。
ファイルプロバイダー( https://docs.traefik.io/v2.1/providers/file/ )を使用することをお勧めします。
あなたの設定を更新してください:
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
そして、リダイレクトを使用して(例のように)redirect.tomlを作成します。
もちろん、設定をコンテナーにbindmountしたり、設定を含む独自のtraefikイメージを作成したりすることもできます...
ラベルを操作したい場合は、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, ...