2019-11-28 23:16:06 +03:00
|
|
|
log:
|
|
|
|
level: INFO
|
|
|
|
|
|
|
|
entryPoints:
|
|
|
|
web:
|
|
|
|
# http
|
|
|
|
address: ":80"
|
|
|
|
|
|
|
|
web-secure:
|
|
|
|
# https
|
|
|
|
address: ":443"
|
2020-02-18 12:01:56 +03:00
|
|
|
{%- if cookiecutter.use_celery == 'y' %}
|
2019-11-28 23:16:06 +03:00
|
|
|
|
2020-02-04 16:04:47 +03:00
|
|
|
flower:
|
|
|
|
address: ":5555"
|
2020-02-18 12:01:56 +03:00
|
|
|
{%- endif %}
|
2020-02-04 16:04:47 +03:00
|
|
|
|
2019-11-28 23:16:06 +03:00
|
|
|
certificatesResolvers:
|
|
|
|
letsencrypt:
|
|
|
|
# https://docs.traefik.io/master/https/acme/#lets-encrypt
|
|
|
|
acme:
|
|
|
|
email: "{{ cookiecutter.email }}"
|
|
|
|
storage: /etc/traefik/acme/acme.json
|
|
|
|
# https://docs.traefik.io/master/https/acme/#httpchallenge
|
|
|
|
httpChallenge:
|
|
|
|
entryPoint: web
|
|
|
|
|
|
|
|
http:
|
2020-04-17 21:43:12 +03:00
|
|
|
{%- set domain_dots = cookiecutter.domain_name.count('.') %}
|
2019-11-28 23:16:06 +03:00
|
|
|
routers:
|
|
|
|
web-router:
|
2020-04-17 21:43:12 +03:00
|
|
|
{%- if domain_dots == 1 or (domain_dots == 2 and '.co.' in cookiecutter.domain_name) %}
|
2020-04-04 18:26:24 +03:00
|
|
|
rule: "Host(`{{ cookiecutter.domain_name }}`) || Host(`www.{{ cookiecutter.domain_name }}`)"
|
2020-04-17 21:20:57 +03:00
|
|
|
{% else %}
|
|
|
|
rule: "Host(`{{ cookiecutter.domain_name }}`)"
|
|
|
|
{%- endif %}
|
2019-11-28 23:16:06 +03:00
|
|
|
entryPoints:
|
|
|
|
- web
|
|
|
|
middlewares:
|
|
|
|
- redirect
|
|
|
|
- csrf
|
|
|
|
service: django
|
|
|
|
|
|
|
|
web-secure-router:
|
2020-04-17 21:43:12 +03:00
|
|
|
{%- if domain_dots == 1 or (domain_dots == 2 and '.co.' in cookiecutter.domain_name) %}
|
2020-04-04 18:26:24 +03:00
|
|
|
rule: "Host(`{{ cookiecutter.domain_name }}`) || Host(`www.{{ cookiecutter.domain_name }}`)"
|
2020-04-17 21:20:57 +03:00
|
|
|
{% else %}
|
|
|
|
rule: "Host(`{{ cookiecutter.domain_name }}`)"
|
|
|
|
{%- endif %}
|
2019-11-28 23:16:06 +03:00
|
|
|
entryPoints:
|
|
|
|
- web-secure
|
|
|
|
middlewares:
|
|
|
|
- csrf
|
|
|
|
service: django
|
|
|
|
tls:
|
|
|
|
# https://docs.traefik.io/master/routing/routers/#certresolver
|
|
|
|
certResolver: letsencrypt
|
2020-02-18 12:01:56 +03:00
|
|
|
{%- if cookiecutter.use_celery == 'y' %}
|
2019-11-28 23:16:06 +03:00
|
|
|
|
2020-02-04 16:04:47 +03:00
|
|
|
flower-secure-router:
|
|
|
|
rule: "Host(`{{ cookiecutter.domain_name }}`)"
|
|
|
|
entryPoints:
|
|
|
|
- flower
|
|
|
|
service: flower
|
|
|
|
tls:
|
|
|
|
# https://docs.traefik.io/master/routing/routers/#certresolver
|
|
|
|
certResolver: letsencrypt
|
2020-02-18 12:01:56 +03:00
|
|
|
{%- endif %}
|
2020-02-04 16:04:47 +03:00
|
|
|
|
2019-11-28 23:16:06 +03:00
|
|
|
middlewares:
|
|
|
|
redirect:
|
|
|
|
# https://docs.traefik.io/master/middlewares/redirectscheme/
|
|
|
|
redirectScheme:
|
|
|
|
scheme: https
|
|
|
|
permanent: true
|
|
|
|
csrf:
|
|
|
|
# https://docs.traefik.io/master/middlewares/headers/#hostsproxyheaders
|
|
|
|
# https://docs.djangoproject.com/en/dev/ref/csrf/#ajax
|
|
|
|
headers:
|
2020-02-04 16:04:47 +03:00
|
|
|
hostsProxyHeaders: ["X-CSRFToken"]
|
2019-11-28 23:16:06 +03:00
|
|
|
|
|
|
|
services:
|
|
|
|
django:
|
|
|
|
loadBalancer:
|
|
|
|
servers:
|
|
|
|
- url: http://django:5000
|
2020-02-18 12:01:56 +03:00
|
|
|
{%- if cookiecutter.use_celery == 'y' %}
|
2019-11-28 23:16:06 +03:00
|
|
|
|
2020-02-04 16:04:47 +03:00
|
|
|
flower:
|
|
|
|
loadBalancer:
|
|
|
|
servers:
|
|
|
|
- url: http://flower:5555
|
2020-02-18 12:01:56 +03:00
|
|
|
{%- endif %}
|
2020-02-04 16:04:47 +03:00
|
|
|
|
2019-11-28 23:16:06 +03:00
|
|
|
providers:
|
|
|
|
# https://docs.traefik.io/master/providers/file/
|
|
|
|
file:
|
|
|
|
filename: /etc/traefik/traefik.yml
|
|
|
|
watch: true
|