Skip to content

Instantly share code, notes, and snippets.

@fortunto2
Forked from 50Bytes-dev/Dockerfile
Created March 16, 2020 15:57
Show Gist options
  • Save fortunto2/c1ebc33b72fc5eb18cccb1694485a1ec to your computer and use it in GitHub Desktop.
Save fortunto2/c1ebc33b72fc5eb18cccb1694485a1ec to your computer and use it in GitHub Desktop.
ACME traefik get manual dns challenge
services:
django: &django
build:
context: .
dockerfile: ./compose/django/Dockerfile
image: backend_local_django
depends_on:
- postgres
- redis
volumes:
- .:/app
- ./tmp:/tmp
env_file:
- .env
expose:
- 8000
user: 1000:1000
stdin_open: true
tty: true
command: /start
labels:
- "traefik.enable=true"
- "traefik.http.routers.django.rule=Path(`/`)" # Путь до сервиса django = https://*.mydomain.com/
- "traefik.http.routers.django.entrypoints=web,websecure" # Попасть к нему можно через :80 и :443
- "traefik.http.routers.django.tls=true"
- "traefik.http.routers.django.tls.certresolver=le" # Тип tls который мы создали в traefik в его commands
- "traefik.http.middlewares.django.compress=true"
- "traefik.http.routers.django.tls.domains[0].main=*.sadpos.pro" # Основной домен который будет использоваться для получения сертификата
# - "traefik.http.routers.django.tls.domains[0].sans=*.sadpos.pro" # Можно указать несколько
traefik:
build:
context: .
dockerfile: ./compose/production/traefik/Dockerfile
image: sadpos_production_traefik
depends_on:
- django
volumes:
- ./traefik/acme.json:/acme.json # Обязательный файл. Необходимо локально создать и установить chmod 600 acme.json
- /var/run/docker.sock:/var/run/docker.sock
command:
# - "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entryPoints.web.address=:80"
- "--entryPoints.websecure.address=:443"
- "--certificatesResolvers.le.acme.email=your@mail.com" # Здесь ваша почта
- "--certificatesResolvers.le.acme.storage=acme.json" # Обязательно указать файл где будут хранится сгенерированные ключи
- "--certificatesresolvers.le.acme.dnschallenge=true" # Тип получения сертификата dns chalenge
- "--certificatesresolvers.le.acme.dnschallenge.provider=manual" # Провайдер manual
- "--certificatesResolvers.le.acme.dnsChallenge.delayBeforeCheck=10" # Точно не понял.. но без него плохо работает. 10 секунд ожидания перед проверкой DNS записей
- "--certificatesResolvers.le.acme.dnsChallenge.resolvers=1.1.1.1:53,8.8.8.8:53,208.67.222.220:53" # DNS сервера через которые будет проведена проверка. Можете указать что то своё
ports:
- "80:80"
- "443:443"
- "8080:8080"
labels:
- "traefik.enable=true"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https" # Тут всё для глобального редиректа на https
- "traefik.http.routers.redirs.rule=hostregexp(`{host:.+}`)"
- "traefik.http.routers.redirs.entrypoints=web"
- "traefik.http.routers.redirs.middlewares=redirect-to-https"
# tty: true # Нужно для ввода в терминал при получнии сертификата, потом отключаем
# stdin_open: true # Нужно для ввода в терминал при получнии сертификата, потом отключаем
# При первом запуске для получения сертификата используйте команду:
# docker-compose run -T --service-ports traefik
#
# После запуска вас попросят сделать запись в своём домене типа TXT с определенным значением,
# и затем нажать Enter.
# Делайте запись, проверяйте появилась ли данная запись на DNS серверах (первый раз у меня это заняло часа 2, а после минут 5-10)
# и нажимайте Enter. Там возможно будет какаято ошибка 400 (у меня такая была), но она ни на что не повлияла и в конце концов у вас
# в файле acme.json появятся записи. Готово!
FROM traefik:v2.2
RUN touch acme.json
RUN chmod 600 acme.json
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment