Перейти к содержанию

Traefik v3 (поддерживается сообществом)

Важно

Сначала прочитайте обзор.

Внимание

Это вклад, поддерживаемый сообществом. Не стесняйтесь предлагать исправления.

В данном руководстве объясняется, как настроить animails с Traefik в качестве обратного прокси-сервера для обработки HTTPS-соединений, маршрутизации доменов и управления сертификатами.

Предварительные требования

  • Установленный и запущенный Traefik v3.x
  • Доменные имена, настроенные на ваш сервер в соответствии с этим руководством

Обзор

Traefik будет обрабатывать весь входящий веб-трафик и направлять соответствующие запросы в animails. Такая конфигурация позволяет Traefik:

  • Управлять SSL-сертификатами
  • Обслуживать сервисы autodiscover и autoconfig
  • Обслуживать интерфейс (frontend UI)
  • Передавать ответы на ACME-вызовы для проверки сертификатов почтового сервера

Обновление конфигурации animails

Сначала измените файл animails.conf или .env, чтобы отключить встроенную обработку SSL в animails:

# Отключить autodiscover SAN в animails
AUTODISCOVER_SAN=n

# Пропустить запуск ACME (acme-animails, сертификаты Let's Encrypt) - y/n
SKIP_LETS_ENCRYPT=y

Настройка Traefik

Создайте или обновите файл динамической конфигурации Traefik следующим содержимым:

http:
  routers:
    animails:
      entryPoints: "websecure"
      rule: "Host(`mail.domain.com`)"
      service: animails-svc
      tls:
        certResolver: cloudflare

    animails-autoconfig:
      entryPoints: "websecure"
      rule: "(Host(`autoconfig.domain.com`) && Path(`/mail/config-v1.1.xml`))"
      service: animails-svc
      tls:
        certResolver: cloudflare

    animails-autodiscover:
      entryPoints: "websecure"
      rule: "(Host(`autodiscover.domain.com`) && Path(`/autodiscover/autodiscover.xml`))"
      service: animails-svc
      tls:
        certResolver: cloudflare

  services:
    animails-svc:
      loadBalancer:
        servers:
          - url: "http://animails-nginx-animails-1:8080"

Добавьте / обновите ваш файл docker-compose.yaml:

services:
  certdumper:
    image: ghcr.io/kereis/traefik-certs-dumper:latest
    container_name: traefik_certdumper
    restart: unless-stopped
    network_mode: none
    command: --restart-containers animails_postfix-animails_1,animails_dovecot-animails_1
    volumes:
      - traefik_certs:/traefik:ro # mount your traefik certificate file
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./data/assets/ssl:/output:rw
    environment:
      - DOMAIN=domain.com
      - ACME_FILE_PATH=/traefik/cloudflare-acme.json # your traefik acme file

  # ...

  nginx:
    # ...
    expose:
      - 8080
    labels:
      - traefik.enable=true
      - traefik.http.routers.animails-autodiscover.entrypoints=websecure
      - traefik.http.routers.animails-autodiscover.rule=Host(`autodiscover.domain.com`) && Path(`/autodiscover/autodiscover.xml`)
      - traefik.http.routers.animails-autodiscover.tls.certresolver=cloudflare
      - traefik.http.routers.animails-autodiscover.service=animails-svc

      - traefik.http.routers.animails-autoconfig.entrypoints=websecure
      - traefik.http.routers.animails-autoconfig.rule=Host(`autoconfig.domain.com`)&& Path(`/mail/config-v1.1.xml`)
      - traefik.http.routers.animails-autoconfig.tls.certresolver=cloudflare
      - traefik.http.routers.animails-autoconfig.service=animails-svc

      - traefik.http.routers.animails.entrypoints=websecure
      - traefik.http.routers.animails.rule=Host(`mail.domain.com`)
      - traefik.http.routers.animails.tls=true
      - traefik.http.routers.animails.tls.certresolver=cloudflare
      - traefik.http.routers.animails.service=animails-svc

      - traefik.http.services.animails-svc.loadbalancer.server.port=8080
      - traefik.docker.network=proxy
    restart: always
    networks:
      animails-network:
        aliases:
          - nginx
      proxy:

Важные примечания к этой конфигурации:

  • Замените mail.domain.com, autoconfig.domain.com и autodiscover.domain.com на ваши реальные доменные имена
  • entryPoints: "websecure" — замените на вашу фактическую точку входа HTTPS в Traefik
  • certResolver: cloudflare — замените на ваш фактический резолвер сертификатов

Шаг 3: Перезапуск сервисов

Перезапустите Traefik и animails, чтобы применить изменения:

# Restart animails
cd /path/to/animails
docker compose up -d
# Restart animails
cd /path/to/animails
docker-compose up -d

Тестирование конфигурации

  1. Перейдите по адресу https://mail.domain.com, чтобы проверить, правильно ли загружается веб-интерфейс animails
  2. Настройте почтовый клиент для проверки функции autodiscover
  3. Следите за логами Traefik на предмет ошибок маршрутизации или сертификатов

Устранение неполадок

Проблемы с сертификатами

  • Проверьте traefik_certsdumper на наличие ошибок или отсутствие acme-файла
  • Убедитесь, что файл сертификата правильно смонтирован

Проблемы с маршрутизацией

  • Проверьте сетевое соединение между Traefik и animails
  • Убедитесь, что IP-адрес animails в конфигурации Traefik указан верно
  • Убедитесь, что все необходимые порты открыты в брандмауэрах