GithubHelp home page GithubHelp logo

dcape-app-traefik's Introduction

dcape-app-traefik

Приложение ядра dcape, reverse-proxy сервисов.

GitHub Release GitHub code size in bytes GitHub license

Роль в dcape Сервис Docker images
router traefik traefik

Назначение

Агрегация и проксирование www-сервисов развернутых приложений по заданному имени с поддержкой сертификатов Let's Encrypt

Traefik - ключевой сервис dcape. Он решает следующие задачи:

  • при запуске контейнера проанализировать его метки (label) и добавить контейнер в систему проксирования внешних http(s) запросов, определяя целевой контейнер по имени хоста
  • если конфигурацией предусмотрена работа через TLS - проверить наличие сертификата и, при необходимости, получить или обновить его через сервис Let's Encrypt

Особенности

Варианты файла конфигурации {#configs}

В составе 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=`)

Поддержка wildcard-доменов

Dcape поддерживает протокол TLS с использованием ключей Let's Encrypt.

Для получения сертификатов по протоколу DNS-01 необходим доступ к АПИ сервера DNS. В состав dcape для этого включен сервер powerdns. Если параметр ACME имеет значение wild, при выполнении команды make apply создается файл var/traefik/traefik.env с настройками для доступа к АПИ локальной копии powerdns

Настройки контейнера для работы с TLS

Ниже в примерах использованы следующие параметры конфигурации:

  • APP_TAG - уникальный тег контейнера, может формироваться автоматически из значения APP_SITE
  • USE_TLS - использовать TLS
  • APP_SITE - основной hostname контейнера
  • APP_ACME_DOMAIN - wildcard-домен контейнера

HTTP-01, индивидуальные сертификаты

    labels:
      - traefik.http.routers.${APP_TAG}.tls=${USE_TLS}
      - traefik.http.routers.${APP_TAG}.tls.certresolver=letsEncrypt

DNS-01, wildcard-домен

    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 на одном сервере

dcape позволяет запуск нескольких экемпляров на одном сервере, для этого они должны использовать разные порты. Поэтому TLS с обновлением сертификатов будет доступен только тому экземпляру, который слушает порт 443.

Для запуска второго экземпляра необходимо разместить его в другом каталоге (или использовать другие значения параметров CFG, DCAPE_VAR) и изменить в его настройках:

  • порты в параметрах TRAEFIK_LISTEN и TRAEFIK_LISTEN_SSL
  • параметр DCAPE_TAG

Install

Приложение разворачивается в составе dcape.

License

The MIT License (MIT), see LICENSE.

Copyright (c) 2023-2024 Aleksei Kovrizhkin [email protected]

dcape-app-traefik's People

Contributors

lekovr avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.