Пошаговый гид по развёртыванию Traefik 2.11 (релиз 2025) как ingress для стека на Docker Compose с поддержкой Let's Encrypt и middleware. Примерное время выполнения: 30–50 минут.
Статья была полезной?
К концу руководства вы запустите Traefik 2.11 (релиз 2025) в Docker Compose, подключите HTTPS через Let's Encrypt и настроите middleware для редиректов и rate-limit. Выполнение шагов займет около 30–50 минут на машине с доступом в интернет.
traefik:2.11, сжатый размер образа ~45MB.Traefik 2.11 (релиз 2025) оптимизирован под динамические окружения: он читает конфигурацию от провайдеров (Docker, Kubernetes, файл) и автоматически создаёт маршруты без ручного правления конфигов. В отличие от монолитных конфигураций Nginx, Traefik умеет ACME-автоматизацию и middleware-конвейер на лету. Это сокращает время деплоя и уменьшает риск человеческой ошибки при изменениях в Docker Compose.

Скриншот Traefik dashboard с сервисами и маршрутами
Цель шага — запустить 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 для сервисов
Добавим пример приложения (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)
Войдите или зарегистрируйтесь, чтобы оставить комментарий
Загрузка комментариев…