diff --git a/docker-swarm-traefik/docker-compose.yml b/docker-swarm-traefik/docker-compose.yml new file mode 100644 index 0000000..c8d0dcd --- /dev/null +++ b/docker-swarm-traefik/docker-compose.yml @@ -0,0 +1,73 @@ +version: '3' + +services: + traefik: + image: traefik:v2.10 + hostname: '{{.Node.Hostname}}' + ports: + # listen on host ports without ingress network + - target: 80 + published: 80 + protocol: tcp + mode: host + - target: 443 + published: 443 + protocol: tcp + mode: host + networks: + - proxy + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + - /var/log:/var/log + - letsencrypt:/letsencrypt + command: + - --api.dashboard=true + - --log.level=INFO + #- --log.filepath=/var/log/traefik.log + - --accesslog=true + #- --accesslog.filepath=/var/log/traefik-access.log + - --providers.docker.exposedByDefault=false + - --providers.docker.network=proxy + - --providers.docker.swarmMode=true + - --entrypoints.web.address=:80 + - --entrypoints.web.http.redirections.entrypoint.to=websecure + - --entryPoints.web.http.redirections.entrypoint.scheme=https + - --entrypoints.websecure.address=:443 + - --entrypoints.websecure.http.tls.certresolver=myresolver + - --certificatesresolvers.myresolver.acme.email=mail@example.com + - --certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json + - --certificatesresolvers.myresolver.acme.tlschallenge=true + deploy: + mode: global + placement: + constraints: + - node.role==manager + labels: + - traefik.enable=true + - traefik.http.routers.mydashboard.rule=Host(`traefik.example.com`) + - traefik.http.routers.mydashboard.service=api@internal + - traefik.http.routers.mydashboard.middlewares=myauth + - traefik.http.services.mydashboard.loadbalancer.server.port=1337 + - traefik.http.middlewares.myauth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/ + + whoami: + image: traefik/whoami:v1.10 + hostname: '{{.Node.Hostname}}' + networks: + - proxy + deploy: + mode: global + labels: + - 'traefik.enable=true' + - 'traefik.http.routers.whoami.rule=Host(`whoami.example.com`) || PathPrefix(`/whoami`)' + - 'traefik.http.services.whoami.loadbalancer.server.port=80' + +networks: + proxy: + name: proxy + driver: overlay + attachable: true + +volumes: + letsencrypt: + name: letsencrypt