This is my basic traefik setup for docker. Create the file and compose up the docker-compose and done.
You can add let's encrypt if need be, or use custom certs.
Here's the docker-compose.yml
:
networks:
ingress:
name: ingress
volumes:
traefik-letsencrypt:
services:
reverse-proxy:
image: traefik:v3
# environment:
# If needed: - INFOMANIAK_ACCESS_TOKEN=TOKEN
command:
- "--api.insecure=false"
- "--api.dashboard=false"
- "--providers.docker"
# Public Endpoint
- "--entrypoints.web-http.address=:1080"
- "--entrypoints.web-http.http.redirections.entrypoint.to=:443"
- "--entrypoints.web-http.http.redirections.entrypoint.scheme=https"
- "--entrypoints.web.address=:1443"
# Allow proxying to self signed certs
- "--serverstransport.insecureskipverify=true"
# Custom Certs
# - "--providers.file.filename=/etc/traefik/dynamic.yaml"
# Letsencrypt Config
# - "--certificatesresolvers.le.acme.dnschallenge.provider=infomaniak"
# - "--certificatesresolvers.le.acme.dnschallenge.delaybeforecheck=0"
labels:
- "traefik.enable=false"
networks:
- ingress
- default
ports:
- "80:1080"
- "443:1443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- traefik-letsencrypt:/letsencrypt"
# - ./configuration:/etc/traefik
# - ./certs:/certs
If you need custom certs, put the configuration file inside ./configuration and the certs in ./certs. In configuration place the dynamic.yaml like this: (!use yaml not yml)
tls:
options:
default:
sniStrict: false
certificates:
- certFile: /certs/fullchain.pem
keyFile: /certs/key.pem
stores:
default:
defaultCertificate:
certFile: /certs/fullchain.pem
keyFile: /certs/key.pem
serversTransport:
insecureSkipVerify: true
Now to use it:
networks:
ingress:
external: true
name: ingress
services:
(...)
networks:
- default
- ingress
labels:
# Setup Traefik
- "traefik.enable=true"
- "traefik.docker.network=ingress"
- "traefik.http.routers.${TRAEFIK_SERVICE_NAME}.entrypoints=web"
# Rule to match the traffic
- "traefik.http.routers.${TRAEFIK_SERVICE_NAME}.rule=Host(`${TRAEFIK_SUBDOMAIN}.214.li`) || Host(`${TRAEFIK_SUBDOMAIN}.suter.dev`) || Host(`${TRAEFIK_SUBDOMAIN}.postme.ch`)"
# TLS
- "traefik.http.routers.${TRAEFIK_SERVICE_NAME}.tls=true"
- "traefik.http.routers.${TRAEFIK_SERVICE_NAME}.tls.certresolver=le"