Комментарии 8
Acme dns в виде кастомного днс сервера — так себе штука. Гораздо надёжнее отделегировать зону на какой-нибудь днс, который имеет апи для LE — route53, cloudflare etc. Зато не будет голова болеть от отказоустойчивости, защите днса
Возможно вам будет интересно посмотреть на решения вроде traefik.
https://docs.traefik.io/v1.7/user-guide/docker-and-lets-encrypt/
Помимо получения le сертификата через http challenge, он умеет использовать разные dns провайдеры для acme challenge через API. К примеру cloudflare из статьи.
- Он умеет service discovery в docker/k8s.
Таким образом вам не нужно полнимать ns и из коробки будет работать получение wildcard сертификатов на базе cloudflare ns.
Как плюшка мы к примеру на базе traefik тоже держим стейджи, только у нас каждая ветка поднимается, а не несколько окружений, и мы проставляем для них кастомный header — x-robots позволяющую выключить сайт из индекса без необходимости изменений в контейнер приложения. Но мы все равно отдельно сделали сайт — https://nodeart.io, а отдельно стейджи на https://stage.nodeart.app который никак не должен клеится с основным (на тот случай если заголовков будет не достаточно)
Traefik пока тестируем, сразу v2. Но он же вроде как только в докер умеет проксировать, а основная масса проектов на dedicated серверах без контейнеров. А для контейнеров — да, он хорош.
Он умеет проксировать во что угодно. Не только в контейнеры, но и просто в сервисы. Главная штука в том, что действительно трефик раскрывается именно при наличии механизма сервис Дискавери, а его, действительно, проще всего получить, засунув все в контейнеры
Ну, и отмечу, что traefik v1. для меня выглядит более понятным и простым, чем traefik v2. Очень много чего во второй версии поменяли…
Согласен, первая версия для меня тоже удобнее.
Подключил provider: file, и описал конфигурацию в yml примерно так:
http:
services:
app:
loadBalancer:
servers:
- url: "http://192.168.0.103:8080"
routers:
app:
entryPoints:
- "http"
rule: "Host(`app.domain.tld`)"
service: "app"
duplicati-secure:
app:
- "https"
rule: "Host(`app.domain.tld`)"
tls:
certResolver: default
service: "app"
Как ни странно — работает.
На пути к автоматизации выпуска SSL