К концу руководства вы запустите Traefik 2.11 (релиз 2025) в Docker Compose, подключите HTTPS через Let's Encrypt и настроите middleware для редиректов и rate-limit. Выполнение шагов займет около 30–50 минут на машине с доступом в интернет.
Что вы изучите
- Сборка базового docker-compose.yml для Traefik 2.11 и сервисов-приложений.
- Как маркировать сервисы через labels для автоматического роутинга.
- Конфигурация автоматического получения сертификатов Let's Encrypt (ACME).
- Настройка middleware: редиректы HTTP->HTTPS, basic auth, rate-limit.
- Мониторинг dashboard Traefik и логирование для отладки 404.
Требования
- ОС: Ubuntu 24.04 LTS (релиз 2025) или аналогичный Linux с systemd.
- Docker Engine 24.0 (релиз 2025), docker-compose CLI 2.17 (релиз 2025).
- Traefik 2.11 image:
traefik:2.11, сжатый размер образа ~45MB. - Порты: 80/tcp, 443/tcp на хосте; dashboard: 8080/tcp (внутри контейнера).
- Минимум: 1 vCPU, 1GB RAM; рекомендуется 2 vCPU и 2GB RAM для продакшна.
- Домен для теста, делегированный на адрес сервера, и открытые порты 80/443.
Почему Traefik?
Traefik 2.11 (релиз 2025) оптимизирован под динамические окружения: он читает конфигурацию от провайдеров (Docker, Kubernetes, файл) и автоматически создаёт маршруты без ручного правления конфигов. В отличие от монолитных конфигураций Nginx, Traefik умеет ACME-автоматизацию и middleware-конвейер на лету. Это сокращает время деплоя и уменьшает риск человеческой ошибки при изменениях в Docker Compose.

Скриншот Traefik dashboard с сервисами и маршрутами
Шаг 1: базовый конфиг
Цель шага — запустить Traefik как сервис в Docker Compose с Docker-провайдером и dashboard. Команда создаёт сеть и монтирует конфигурацию в контейнер.
# docker-compose.yml
version: '3.9'
services:
traefik:
image: traefik:2.11
container_name: traefik
restart: unless-stopped
ports:
- "80:80" # HTTP
- "443:443" # HTTPS
- "8080:8080" # Dashboard
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik/traefik.yml:/etc/traefik/traefik.yml:ro
- ./traefik/acme:/acme
networks:
- web
networks:
web:
driver: bridge
Создайте файл traefik/traefik.yml с минимальной конфигурацией провайдера Docker и dashboard:
# traefik/traefik.yml
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
api:
dashboard: true
insecure: false
log:
level: INFO
certificatesResolvers:
http:
acme:
email: "admin@example.com"
storage: "/acme/acme.json"
httpChallenge:
entryPoint: web
Команда запуска и ожидаемый вывод:
$ docker compose up -d
Creating network "web" with the default driver
Creating traefik ... done
Типичная ошибка и фикс:
Ошибка: Bind for 0.0.0.0:80 failed: port is already allocated
Фикс: убедитесь, что на хосте не запущен другой сервис на порту 80 (например, systemd unit nginx). Остановите его: sudo systemctl stop nginx или перенаправьте порты Traefik на другие.

Скриншот docker-compose.yml с labels для сервисов
Шаг 2: labels на сервисах
Добавим пример приложения (nginx 1.26, релиз 2023, сжатый образ ~23MB) и проставим labels для автоматического роутинга. Это уменьшает ручное редактирование конфигов при добавлении сервисов.
# docker-compose.override.yml
version: '3.9'
services:
webapp:
image: nginx:1.26
container_name: webapp
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.webapp.rule=Host(`app.example.com`)"
- "traefik.http.routers.webapp.entrypoints=websecure"
- "traefik.http.routers.webapp.tls=true"
- "traefik.http.services.webapp.loadbalancer.server.port=80"
networks:
- web
Запустите сервисы и проверьте роуты:
$ docker compose -f docker-compose.yml -f docker-compose.override.yml up -d
Creating webapp ... done
Проверка через API Traefik (dashboard доступен на http://HOST:8080/dashboard/) вернёт список роутов. Ожидаемый фрагмент вывода при запросе API:
HTTP/1.1 200 OK
Content-Type: application/json
...
{"routers":[{"name":"webapp@docker","rule":"Host(`app.example.com`)","service":"webapp@docker\
Комментарии (0)
Войдите или зарегистрируйтесь, чтобы оставить комментарий
Загрузка комментариев…