Skip to content

qulaz/traefik_template

Repository files navigation

Traefik Base Template

Репозиторий содержит два конфига: для prod среды и dev среды (без https, Lets Encrypt, с debug логированием и открытым дашбордом). Оформлены они в виде отдельных веток репозитория по названию среды.

Клонирование конфига для prod среды:

git clone --single-branch --branch prod https://github.com/qulaz/traefik_template.git

Что есть

  • https с Let's Encrypt + автопродление сертификатов
  • Редирект с http на https (при добавлении middleware)
  • Middleware для Basic Auth
  • Docker и File providers
  • Поддержка нескольких доменов на одном хосте

Настройка

  • Перименовать .env.dist в .env и наполнить данными

    mv .env.dist .env
  • Для использования Basic Auth необходимо переименовать .htpasswd.dist в .htpasswd и наполнить данными

    mv .htpasswd.dist .htpasswd
    sudo apt install apache2-utils
    htpasswd -nb user password >> .htpasswd

    или для генерации паролей можно использовать openssl:

    openssl passwd -apr1

    При изменении файла запущенный traefik необходимо перезапускать, чтобы он применил изменения

  • Переименовать acme.json.dict в acme.json и выставить ему разрешения 600

    mv acme.json.dist acme.json
    chmod 600 acme.json
  • Переименовать configs/middlewares.yaml.dist в configs/middlewares.yaml

    mv configs/middlewares.yaml.dist configs/middlewares.yaml
  • Запустить traefik:

    docker compose up -d

Проверка

  • Заполнить в .env переменную TEST_DOMAIN заполнить доменом, который привязан к VPS
  • Запустить тестовый контейнер
    docker compose -f docker-compose.test.yml up -d
  • Открыть в браузере TEST_DOMAIN и проверить работоспособность. При первом открытии сертификат может быть выдан не сразу, нужно попробовать пообновлять страницу пару минут.

Использование

В Docker Compose

Один сервис - один роут

version: "3"

networks:
  traefik:
    external:
      name: traefik

services:
  grafana:
    container_name: grafana
    image: grafana/grafana:7.1.5
    user: "472"
    command: --config=/grafana/conf/custom.ini
    volumes:
      - ./config.ini:/grafana/conf/custom.ini
    networks:
      - traefik
    labels:
      traefik.enable: true
      traefik.http.routers.grafana.rule: Host(`localhost`) && PathPrefix(`/grafana`)
      traefik.http.services.grafana.loadbalancer.server.port: 3000
      traefik.http.routers.grafana.middlewares: RedirectToHttps@file  # редирект с http на https

Один сервис - несколько роутов с разными правилами

version: "3.7"

networks:
  internal:
    driver: bridge
  traefik:
    external:
      name: traefik

services:
  backend:
    build: .
    networks:
      - traefik
      - internal
    labels:
      traefik.enable: true
      traefik.http.routers.backend.rule: Host(`localhost`) && PathPrefix(`/`)
      traefik.http.routers.backend.service: PublicBackend
      # Порт, по которому доступно приложение
      traefik.http.services.PublicBackend.loadbalancer.server.port: 8000

      traefik.http.routers.admin.rule: Host(`localhost`) && PathPrefix(`/admin`)
      traefik.http.routers.admin.service: AdminBackend
      # Basic Auth только для роутов, начинающихся с /admin
      traefik.http.routers.admin.middlewares: BasicAuth@file
      traefik.http.services.AdminBackend.loadbalancer.server.port: 8000

Динамическое имя хоста

Для динамического задания имени хоста/домена необходимо создать переменную среды с произвольным именем. Лучший для этого способ - создать рядом с docker-compose.yml запускаемого сервиса файл .env со следующим содержимым:

HOST=example.com
API_HOST=api.example.com

Затем в docker-compose.yml запускаемого сервиса

version: "3"

networks:
  traefik:
    external:
      name: traefik

services:
  backend:
    build: .
    networks:
      - traefik
    labels:
      traefik.enable: true
      # Подставляем хост из созданного `.env` файла
      traefik.http.routers.backend.rule: Host(`${API_HOST}`)
      traefik.http.services.backend.loadbalancer.server.port: 8000

  frontend:
    build: .
    networks:
      - traefik
    labels:
      traefik.enable: true
      # Подставляем хост из созданного `.env` файла
      traefik.http.routers.frontend.rule: Host(`${HOST}`)
      traefik.http.services.frontend.loadbalancer.server.port: 3000

Файловые конфиги

Добавить yaml файл в директорию configs по аналогии с файлом примера configs/NodeExporter.yaml.dist

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published