diff --git a/docker-compose.swarm.yml b/docker-compose.swarm.yml new file mode 100644 index 0000000..ff617e8 --- /dev/null +++ b/docker-compose.swarm.yml @@ -0,0 +1,47 @@ +version: '3.8' + +volumes: + traefik: + +networks: + traefik: + name: traefik + +services: + traefik: + image: "${IMAGE:-traefik}:${VERSION:-latest}" + command: + - --providers.docker=true + - --providers.docker.swarmMode=true + - --providers.docker.exposedbydefault=${EXPOSED_BY_DEFAULT:-false} + - --api.dashboard=${DASHBOARD:-true} + - --api.debug=${DEBUG:-false} + - --log.level=${LOG_LEVEL:-ERROR} + - --entrypoints.web.address=:80 + - --entrypoints.websecure.address=:443 + - --entrypoints.web.http.redirections.entrypoint.to=websecure + - --entrypoints.web.http.redirections.entrypoint.scheme=https + - --entrypoints.web.http.redirections.entrypoint.permanent=true + ports: + - "${WEB_PORT:-0.0.0.0:80:80}" + - "${WEBSECURE_PORT:-0.0.0.0:443:443}" + networks: + - traefik + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - "traefik:/etc/traefik" + deploy: + mode: global + placement: + constraints: + - node.role == manager + labels: + - "traefik.http.routers.${ROUTER:-traefik}.rule=Host(`${DOMAIN:-traefik.local.krislamo.org}`)" + - "traefik.http.routers.${ROUTER:-traefik}.service=api@internal" + - "traefik.http.routers.${ROUTER:-traefik}.entrypoints=${ENTRYPOINT:-websecure}" + - "traefik.http.routers.${ROUTER:-traefik}.tls=${ENABLE_TLS:-true}" + - "traefik.http.services.${SERVICE:-traefik}.loadbalancer.server.port=80" + - "traefik.http.middlewares.internalonly.ipwhitelist.sourcerange=127.0.0.1/32" + - "traefik.http.routers.${ROUTER:-traefik}.middlewares=internalonly" + - "traefik.docker.network=${NETWORK:-traefik}" + - "traefik.enable=${ENABLE:-true}"