Приложение ядра dcape, reverse-proxy сервисов.
Роль в dcape | Сервис | Docker images |
---|---|---|
router | traefik | traefik |
Агрегация и проксирование www-сервисов развернутых приложений по заданному имени с поддержкой сертификатов Let's Encrypt
Traefik - ключевой сервис dcape. Он решает следующие задачи:
- при запуске контейнера проанализировать его метки (
label
) и добавить контейнер в систему проксирования внешних http(s) запросов, определяя целевой контейнер по имени хоста - если конфигурацией предусмотрена работа через TLS - проверить наличие сертификата и, при необходимости, получить или обновить его через сервис Let's Encrypt
В составе dcape есть три варианта файла конфигурации traefik:
- traefik.local.yml - использование DCAPE на локальном компьютере без поддержки TLS
- traefik.acme-http.yml - https с получением сертификатов по протоколу
HTTP-01
- traefik.acme.yml - https с получением сертификатов по протоколу
HTTP-01
иDNS-01
(для поддержки wildcard-доменов)
При выполнении команды make apply
, по значению параметра ACME
определяется вариант конфигурации и соответствующий файл копируется в var/traefik/traefik.yml
с заменой переменных (если его еще нет).
Для того, чтобы конкретный экземпляр traefik отреагировал на запуск контейнера, в конфигурации контейнера надо указать две метки:
labels:
- traefik.enable=true
- dcape.traefik.tag=${DCAPE_TAG}
Если не задана первая из этих меток, контейнер не будет виден никакому экземпляру traefik. Значение второй метки позволяет запустить на одном хосте несколько экземпляров traefik и привязывать контейнер только к тому экземпляру, у которого совпадает значение DCAPE_TAG
.
Такая функциональность обеспечивается следующими настройками traefik:
providers:
docker:
exposedByDefault: false
constraints: Label(`dcape.traefik.tag`,`=DCAPE_TAG=`)
Dcape поддерживает протокол TLS с использованием ключей Let's Encrypt.
Для получения сертификатов по протоколу DNS-01
необходим доступ к АПИ сервера DNS. В состав dcape для этого включен сервер powerdns. Если параметр ACME
имеет значение wild
, при выполнении команды make apply
создается файл var/traefik/traefik.env
с настройками для доступа к АПИ локальной копии powerdns
Ниже в примерах использованы следующие параметры конфигурации:
APP_TAG
- уникальный тег контейнера, может формироваться автоматически из значенияAPP_SITE
USE_TLS
- использовать TLSAPP_SITE
- основной hostname контейнераAPP_ACME_DOMAIN
- wildcard-домен контейнера
labels:
- traefik.http.routers.${APP_TAG}.tls=${USE_TLS}
- traefik.http.routers.${APP_TAG}.tls.certresolver=letsEncrypt
labels:
- traefik.http.routers.${APP_TAG}.tls=${USE_TLS}
- traefik.http.routers.${APP_TAG}.tls.certresolver=letsEncrypt
- traefik.http.routers.${APP_TAG}.tls.domains[0].main=${APP_SITE}
- traefik.http.routers.${APP_TAG}.tls.domains[0].sans=${APP_ACME_DOMAIN}
Файл конфигурации traefik включает строку
# caServer: "https://acme-staging-v02.api.letsencrypt.org/directory"
В период настройки, во избежание бана со стороны Letsencrypt, рекомендуется ее раскомментировать для работы через тестовый канал (выписывается Fake сертификат), а после полной отладки механизма, удалить.
dcape позволяет запуск нескольких экемпляров на одном сервере, для этого они должны использовать разные порты. Поэтому TLS с обновлением сертификатов будет доступен только тому экземпляру, который слушает порт 443.
Для запуска второго экземпляра необходимо разместить его в другом каталоге (или использовать другие значения параметров CFG
, DCAPE_VAR
) и изменить в его настройках:
- порты в параметрах
TRAEFIK_LISTEN
иTRAEFIK_LISTEN_SSL
- параметр
DCAPE_TAG
Приложение разворачивается в составе dcape.
The MIT License (MIT), see LICENSE.
Copyright (c) 2023-2024 Aleksei Kovrizhkin [email protected]