@@ -2,44 +2,72 @@ version: "3.3"
22services :
33
44 proxy :
5- image : traefik:v1.7
5+ image : traefik:v2.2
66 networks :
77 - ${TRAEFIK_PUBLIC_NETWORK}
88 - default
99 volumes :
1010 - /var/run/docker.sock:/var/run/docker.sock
11- command : --docker \
12- --docker.swarmmode \
13- --docker.watch \
14- --docker.exposedbydefault=false \
15- --constraints=tag==${TRAEFIK_TAG} \
16- --logLevel=INFO \
17- --accessLog \
18- --web
11+ command :
12+ # Enable Docker in Traefik, so that it reads labels from Docker services
13+ - --providers.docker
14+ # Add a constraint to only use services with the label for this stack
15+ # from the env var TRAEFIK_TAG
16+ - --providers.docker.constraints=Label(`traefik.constraint-label-stack`, `${TRAEFIK_TAG}`)
17+ # Do not expose all Docker services, only the ones explicitly exposed
18+ - --providers.docker.exposedbydefault=false
19+ # Enable Docker Swarm mode
20+ - --providers.docker.swarmmode
21+ # Enable the access log, with HTTP requests
22+ - --accesslog
23+ # Enable the Traefik log, for configurations and errors
24+ - --log
25+ # Enable the Dashboard and API
26+ - --api
1927 deploy :
2028 placement :
2129 constraints :
2230 - node.role == manager
2331 labels :
24- # For the configured domain
25- - traefik.frontend.rule=Host:${DOMAIN}
26- # For a domain with and without 'www'
27- # Comment the previous line above and un-comment the line below
28- # - "traefik.frontend.rule=Host:www.${DOMAIN},${DOMAIN}"
32+ # Enable Traefik for this service, to make it available in the public network
2933 - traefik.enable=true
30- - traefik.port=80
31- - traefik.tags=${TRAEFIK_PUBLIC_TAG}
34+ # Use the traefik-public network (declared below)
3235 - traefik.docker.network=${TRAEFIK_PUBLIC_NETWORK}
33- - traefik.frontend.entryPoints=http,https
34- - traefik.frontend.redirect.entryPoint=https
35- # Uncomment the config line below to detect and redirect www to non-www (or the contrary)
36- # The lines above for traefik.frontend.rule are needed too
37- # - "traefik.frontend.redirect.regex=^https?://(www.)?(${DOMAIN})/(.*)"
38- # To redirect from non-www to www un-comment the line below
39- # - "traefik.frontend.redirect.replacement=https://www.${DOMAIN}/$$3"
40- # To redirect from www to non-www un-comment the line below
41- # - "traefik.frontend.redirect.replacement=https://${DOMAIN}/$$3"
42-
36+ # Use the custom label "traefik.constraint-label=traefik-public"
37+ # This public Traefik will only use services with this label
38+ - traefik.constraint-label=${TRAEFIK_PUBLIC_TAG}
39+ # traefik-http set up only to use the middleware to redirect to https
40+ - traefik.http.middlewares.${STACK_NAME}-https-redirect.redirectscheme.scheme=https
41+ - traefik.http.middlewares.${STACK_NAME}-https-redirect.redirectscheme.permanent=true
42+ # Handle host with and without "www" to redirect to only one of them
43+ # Uses environment variable DOMAIN
44+ # To disable www redirection remove the Host() you want to discard, here and
45+ # below for HTTPS
46+ - traefik.http.routers.${STACK_NAME}-proxy-http.rule=Host(`${DOMAIN}`) || Host(`www.${DOMAIN}`)
47+ - traefik.http.routers.${STACK_NAME}-proxy-http.entrypoints=http
48+ # traefik-https the actual router using HTTPS
49+ - traefik.http.routers.${STACK_NAME}-proxy-https.rule=Host(`${DOMAIN}`) || Host(`www.${DOMAIN}`)
50+ - traefik.http.routers.${STACK_NAME}-proxy-https.entrypoints=https
51+ - traefik.http.routers.${STACK_NAME}-proxy-https.tls=true
52+ # Use the "le" (Let's Encrypt) resolver created below
53+ - traefik.http.routers.${STACK_NAME}-proxy-https.tls.certresolver=le
54+ # Define the port inside of the Docker service to use
55+ - traefik.http.services.${STACK_NAME}-proxy.loadbalancer.server.port=80
56+ # Handle domain with and without "www" to redirect to only one
57+ # To disable www redirection remove the next line
58+ - traefik.http.middlewares.${STACK_NAME}-www-redirect.redirectregex.regex=^https?://(www.)?(${DOMAIN})/(.*)
59+ # Redirect a domain with www to non-www
60+ # To disable it remove the next line
61+ - traefik.http.middlewares.${STACK_NAME}-www-redirect.redirectregex.replacement=https://${DOMAIN}/$${3}
62+ # Redirect a domain without www to www
63+ # To enable it remove the previous line and uncomment the next
64+ # - traefik.http.middlewares.${STACK_NAME}-www-redirect.redirectregex.replacement=https://www.${DOMAIN}/$${3}
65+ # Middleware to redirect www, to disable it remove the next line
66+ - traefik.http.routers.${STACK_NAME}-proxy-https.middlewares=${STACK_NAME}-www-redirect
67+ # Middleware to redirect www, and redirect HTTP to HTTPS
68+ # to disable www redirection remove the section: ${STACK_NAME}-www-redirect,
69+ - traefik.http.routers.${STACK_NAME}-proxy-http.middlewares=${STACK_NAME}-www-redirect,${STACK_NAME}-https-redirect
70+
4371 db :
4472 image : postgres:12
4573 volumes :
@@ -64,13 +92,17 @@ services:
6492 - .env
6593 deploy :
6694 labels :
67- - traefik.frontend.rule=Host:pgadmin.${DOMAIN}
6895 - traefik.enable=true
69- - traefik.port=5050
70- - traefik.tags=${TRAEFIK_PUBLIC_TAG}
7196 - traefik.docker.network=${TRAEFIK_PUBLIC_NETWORK}
72- - traefik.frontend.entryPoints=http,https
73- - traefik.frontend.redirect.entryPoint=https
97+ - traefik.constraint-label=${TRAEFIK_PUBLIC_TAG}
98+ - traefik.http.routers.${STACK_NAME}-pgadmin-http.rule=Host(`pgadmin.${DOMAIN}`)
99+ - traefik.http.routers.${STACK_NAME}-pgadmin-http.entrypoints=http
100+ - traefik.http.routers.${STACK_NAME}-pgadmin-http.middlewares=${STACK_NAME}-https-redirect
101+ - traefik.http.routers.${STACK_NAME}-pgadmin-https.rule=Host(`pgadmin.${DOMAIN}`)
102+ - traefik.http.routers.${STACK_NAME}-pgadmin-https.entrypoints=https
103+ - traefik.http.routers.${STACK_NAME}-pgadmin-https.tls=true
104+ - traefik.http.routers.${STACK_NAME}-pgadmin-https.tls.certresolver=le
105+ - traefik.http.services.${STACK_NAME}-pgadmin.loadbalancer.server.port=5050
74106
75107 queue :
76108 image : rabbitmq:3
@@ -93,13 +125,17 @@ services:
93125 # - "--broker_api=http://guest:guest@queue:15672/api//"
94126 deploy :
95127 labels :
96- - traefik.frontend.rule=Host:flower.${DOMAIN}
97128 - traefik.enable=true
98- - traefik.port=5555
99- - traefik.tags=${TRAEFIK_PUBLIC_TAG}
100129 - traefik.docker.network=${TRAEFIK_PUBLIC_NETWORK}
101- - traefik.frontend.entryPoints=http,https
102- - traefik.frontend.redirect.entryPoint=https
130+ - traefik.constraint-label=${TRAEFIK_PUBLIC_TAG}
131+ - traefik.http.routers.${STACK_NAME}-flower-http.rule=Host(`flower.${DOMAIN}`)
132+ - traefik.http.routers.${STACK_NAME}-flower-http.entrypoints=http
133+ - traefik.http.routers.${STACK_NAME}-flower-http.middlewares=${STACK_NAME}-https-redirect
134+ - traefik.http.routers.${STACK_NAME}-flower-https.rule=Host(`flower.${DOMAIN}`)
135+ - traefik.http.routers.${STACK_NAME}-flower-https.entrypoints=https
136+ - traefik.http.routers.${STACK_NAME}-flower-https.tls=true
137+ - traefik.http.routers.${STACK_NAME}-flower-https.tls.certresolver=le
138+ - traefik.http.services.${STACK_NAME}-flower.loadbalancer.server.port=5555
103139
104140 backend :
105141 image : ' ${DOCKER_IMAGE_BACKEND}:${TAG-latest}'
@@ -119,10 +155,10 @@ services:
119155 INSTALL_DEV : ${INSTALL_DEV-false}
120156 deploy :
121157 labels :
122- - traefik.frontend.rule=PathPrefix:/api,/docs,/redoc
123158 - traefik.enable=true
124- - traefik.port=80
125- - traefik.tags=${TRAEFIK_TAG}
159+ - traefik.constraint-label-stack=${TRAEFIK_TAG}
160+ - traefik.http.routers.${STACK_NAME}-backend-http.rule=PathPrefix(`/api`) || PathPrefix(`/docs`) || PathPrefix(`/redoc`)
161+ - traefik.http.services.${STACK_NAME}-backend.loadbalancer.server.port=80
126162
127163 celeryworker :
128164 image : ' ${DOCKER_IMAGE_CELERYWORKER}:${TAG-latest}'
@@ -150,10 +186,10 @@ services:
150186 FRONTEND_ENV : ${FRONTEND_ENV-production}
151187 deploy :
152188 labels :
153- - traefik.frontend.rule=PathPrefix:/
154189 - traefik.enable=true
155- - traefik.port=80
156- - traefik.tags=${TRAEFIK_TAG}
190+ - traefik.constraint-label-stack=${TRAEFIK_TAG}
191+ - traefik.http.routers.${STACK_NAME}-frontend-http.rule=PathPrefix(`/`)
192+ - traefik.http.services.${STACK_NAME}-frontend.loadbalancer.server.port=80
157193
158194volumes :
159195 app-db-data :
0 commit comments